Android Soundpool - 循环回放异常

时间:2012-02-02 19:19:18

标签: android audio soundpool

我在使用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和循环声音的问题?

1 个答案:

答案 0 :(得分: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声音之间存在差异。