【问题标题】:Sound works on HTC Desire but not on T-Mobile G1声音适用于 HTC Desire 但不适用于 T-Mobile G1
【发布时间】:2010-07-13 19:26:43
【问题描述】:

我定义了以下声音类来在我的吃豆人游戏中播放声音:

public class Sound {

    private static boolean sound = true;

    private static MediaPlayer eatSound;
    private static MediaPlayer shortEatSound;
    private static MediaPlayer eatCherry;
    private static MediaPlayer eatGhost;
    private static MediaPlayer extraLive;
    private static MediaPlayer intermission;
    private static MediaPlayer openingSound;
    private static MediaPlayer pacmanDiesSound;
    private static MediaPlayer sirenSound;

    public static void initializeOpenSound(Context context) {
        openingSound = MediaPlayer.create(context, R.raw.opening_song);
    }

    public static void initializeSounds(Context context) {
        eatSound = MediaPlayer.create(context, R.raw.eating);
        shortEatSound = MediaPlayer.create(context, R.raw.eating_short);
        eatCherry = MediaPlayer.create(context, R.raw.eating_cherry);
        eatGhost = MediaPlayer.create(context, R.raw.eating_ghoasts);
        extraLive = MediaPlayer.create(context, R.raw.extra_lives);
        intermission = MediaPlayer.create(context, R.raw.intermission);
        pacmanDiesSound = MediaPlayer.create(context, R.raw.pac_man_dies);
        sirenSound = MediaPlayer.create(context, R.raw.siren);
    }

    public static int getOpeningSoundDuration() throws SoundInitializationError {
        if (openingSound != null) {
            return openingSound.getDuration();
        } else {
            throw new SoundInitializationError("Opening Sound not initialized!");
        }
    }

    public static void playSirenSound() throws SoundInitializationError {
        if (isSoundOn()) {
            if (sirenSound != null) {
                sirenSound.start();
            } else {
                throw new SoundInitializationError("Siren Sound not initialized!");
            }
        }
    }

    public static void playPacmanDiesSound() throws SoundInitializationError {
        if (isSoundOn()) {
            if (pacmanDiesSound != null) {
                pacmanDiesSound.start();
            } else {
                throw new SoundInitializationError("Pacman Dies Sound not initialized!");
            }
        }
    }

    public static void playOpeningSound() throws SoundInitializationError {
        if (isSoundOn()) {
            if (openingSound != null) {
                openingSound.setLooping(true);
                openingSound.start();
            } else {
                throw new SoundInitializationError("Opening Sound not initialized!");
            }
        }
    }

    public static void playIntermissionSound() throws SoundInitializationError {
        if (isSoundOn()) {
            if (intermission != null) {
                intermission.start();
            } else {
                throw new SoundInitializationError("Intermission Sound not initialized!");
            }
        }
    }

    public static void playExtraLiveSound() throws SoundInitializationError {
        if (isSoundOn()) {
            if (extraLive != null) {
                extraLive.start();
            } else {
                throw new SoundInitializationError("Extra Live Sound not initialized!");
            }
        }
    }

    public static void playEatSound() throws SoundInitializationError {
        if (isSoundOn()) {
            if (eatSound != null) {
                eatSound.start();
            } else {
                throw new SoundInitializationError("Eat Sound not initialized!");
            }
        }
    }

    public static void playShortEatSound() throws SoundInitializationError {
        if (isSoundOn()) {
            if (shortEatSound != null) {
                shortEatSound.start();
            } else {
                throw new SoundInitializationError("Short Eat Sound not initialized!");
            }
        }
    }

    public static void playEatCherrySound() throws SoundInitializationError {
        if (isSoundOn()) {
            if (eatCherry != null) {
                eatCherry.start();
            } else {
                throw new SoundInitializationError("Eat Cherry Sound not initialized!");
            }
        }
    }

    public static void playEatGhostSound() throws SoundInitializationError {
        if (isSoundOn()) {
            if (eatGhost != null) {
                eatGhost.start();
            } else {
                throw new SoundInitializationError("Eat Ghost Sound not initialized!");
            }
        }
    }

    public static void stopOpeningSound() throws SoundInitializationError {
        if (openingSound != null) {
            openingSound.stop();
        } else {
            throw new SoundInitializationError("Opening Sound not initialized!");
        }
    }

    public static boolean isSoundOn() {
        return sound;
    }

    public static void setSoundOn(boolean b) {
        sound = b;
    }

}

这在我的 HTC Desire 上运行良好,但在我的 T-Mobile G1 上,只能播放 OpeningSound。其他声音文件不播放,但也不例外。两种设备都使用 2.1。

有什么提示吗?

【问题讨论】:

    标签: java android audio


    【解决方案1】:

    只需将 SoundPool 用于短声音

    【讨论】:

    • 我不得不在 SoundPool 中使用 AudioManager.STREAM_RING 而不是 AudioManager.STREAM_MUSIK,但现在可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 2012-08-09
    • 2015-07-13
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多