2012-07-27 985 views
4

请看看这些代码片段:如何通过Soundpool停止播放声音?

private SoundPool soundPool; 
private int soundID; 

soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); 
soundID = soundPool.load(this, R.raw.batimanbailedosenxutos, 1); 

,当我按下按钮:

soundPool.play(soundID, volume, volume, 1, 0, 1f); 

,如果我按两次在同一时间这个按钮,它播放的声音togheter ,我想停下来的声音并再次播放,如果用户按下按钮,同时播放

我tryed puting的

soundPool.stop(soundID); 

之前soundPool.play,但我不知道为什么它只适用于歌曲播放的1次,你们有任何理想为什么这只适用于1次?以及我如何解决这个问题?谢谢

回答

15

方法stop()获取当前播放流的流ID,而不是您已加载的声音ID。所以像这样:

int streamId = soundPool.play(soundID, volume, volume, 1, 0, 1f); 

soudPool.stop(streamId); 
streamId = soundPool.play(soundID, volume, volume, 1, 0, 1f); 

会停止当前播放的曲目,并开始另一个。第二种选择是限制您的SoundPool允许的数据流。如果您将SoundPool实例化为maxStreams的值为1,则当您尝试启动另一个时,任何当前播放的声音都会停止,这可能会更干净地实现您所需的行为。

+0

谢谢,它的工作,对不起我的noobiness ^^ – 2012-07-27 19:14:42

+0

谢谢。这解决了我的游戏中的小错误。 – 2014-10-19 04:54:08

0

你能看到代码

public static void clear() { 
     if (mSoundManager != null) { 
      mSoundManager.mSoundPool = null; 
      mSoundManager.mAudioManager = null; 
      mSoundManager.mSoundPoolMap = null; 
     } 
     mSoundManager = null; 
    }