0

我在使用 SoundPool 和 .OGG 文件播放循环声音时遇到问题。我设置了这个 HashMap 来查找与名称关联的声音并播放/停止它

    public void playLoopSound(String soundName){

        currentSound = (Integer) soundMap.get(soundName);

        if(currentSound != -1){
            try{
                Logger.log("Playing Loop Sound: " + currentSound);
                loopingSound = soundPool.play(currentSound, 1, 1, 0, -1, 1);
            } catch (Exception e) {
                Logger.log("Sound Playing Error: " + e.getMessage());
            }
        } else {
            Logger.log("Sound Not Found");
        }
    }

    public void stopLoopSound(){
        soundPool.stop(loopingSound);
        loopingSound = 0;
    }

这个设置工作正常,我在角色开始行走时启动循环,并在它停止行走时停止循环。

然而,声音会随机停止播放,通常在使用后一分钟左右(打开和关闭)......

有没有其他人遇到过与 SoundPool 和循环声音类似的问题?

4

1 回答 1

3

阅读有关 Soundpool 的文档会清楚很多:

- 播放一个声音,你传递一个指向加载声音的 int。此方法(以及其他开始播放声音的方法)soundpool.play(int) 返回一个 int,它引用现在播放声音的 threadID。

- 当你想停止声音(或循环声音)时,你必须使用你刚开始播放声音时返回的 threadID 的 int,而不是声音本身的 int!

然后在 soundpool 类中,设置一个私有 int threadIDInt = mSoundPool.play/setloop/whatever(int soundtobeplayed, int/float volumeleft, int/float volumeright, float speed, int loopornot); [注意:论点有点编造;看看他们]

然后停止声音(或暂停,或将其设置为循环或不循环)您传递 mSoundPool.stop(threadIDINT);

TLDR:表示您的声音的 int 与用于表示当前声音正在播放的流的内部 int soundpool 之间存在差异。

于 2012-04-09T11:39:07.767 回答