Android SoundPool.stop似乎不起作用

Add*_*ddi 3 android soundpool

我创建了一个类MySoundPool(我使用这个类作为sigelton,但不认为这是相关的,因为其他所有工作).我正在初始化SoundPool,一个HashMap,并获取AudioManager的上下文.此后我正在加载两个声音.MySoundpool由方法MySoundPool.playSound(int index,float rate)使用,playSound剪辑率为0.5 <= rate> = 2.0执行语句

float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 
streamVolume = streamVolume / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, index, 0, rate);
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.一切正常.不会发生在前一个声音仍在播放时调用playSound,我想在播放新声音之前停止播放.在上面的代码片段之前,我试过了

mSoundPool.stop(mSoundPoolMap.get(index));
Run Code Online (Sandbox Code Playgroud)

mSoundPool.autoPause();
Run Code Online (Sandbox Code Playgroud)

没有成功.声音继续发挥到底.任何意见将不胜感激

DRi*_*FTy 11

我假设您在MySoundPool类的构造函数中创建了一个新的SoundPool对象?

如果是这样,那么SoundPool的构造函数所采用的第一个参数是同时允许的流的数量.例如...

mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
Run Code Online (Sandbox Code Playgroud)

这将允许一次播放10个声音,所以只需将10改为1即可.

编辑:stop()方法将流id作为参数,该参数应该是play()方法返回的数字.您可以尝试设置一个等于play()返回的变量,然后在停止声音时使用该变量.


Ada*_*rce 7

使用soundId播放声音,但使用streamId来停止声音.这些并不总是相同的数字!

当您启动声音时,存储返回的streamId:

int myStreamId = mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, index, 0, rate);
Run Code Online (Sandbox Code Playgroud)

然后使用streamId(而不是soundId)来停止声音:

mSoundPool.stop(myStreamId);
Run Code Online (Sandbox Code Playgroud)