我在使用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和循环声音的问题?
答案 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声音之间存在差异。