Android SoundPool.stop似乎不起作用

时间:2011-07-27 18:12:57

标签: 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);

到目前为止一切顺利。一切正常。 不会发生在前一个声音仍在播放时调用playSound,我想在播放新声音之前停止播放。在上面的代码片段之前我试过

mSoundPool.stop(mSoundPoolMap.get(index));

mSoundPool.autoPause();

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

3 个答案:

答案 0 :(得分:11)

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

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

mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);

这样可以同时播放10个声音,所以只需将10改为1即可。

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

答案 1 :(得分:7)

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

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

int myStreamId = mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, index, 0, rate);

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

mSoundPool.stop(myStreamId);

答案 2 :(得分:2)

正如课堂文件所述:

public final int play(int soundID,float leftVolume,float rightVolume,int priority,int loop,float rate) 自:API Level 1

播放声音ID中的声音。播放soundID指定的声音。这是load()函数返回的值。如果成功则返回非零streamID,如果失败则返回零。 streamID可用于进一步控制回放。

返回

non-zero streamID if successful, zero if failed 

有同样的问题,为什么一个人不读F? :D

- 谢谢你们!