如何通过Soundpool停止播放声音?

时间:2012-07-27 19:03:36

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

如果我同时按下此按钮两次,它会播放声音,我想停止声音,如果用户在播放时按下按钮则再次播放

我试着提出

soundPool.stop(soundID); 
在soundPool.play之前的

但是我不知道它为什么只播放这首歌1次,你们有没有想到为什么这只能用于1次?以及如何解决这个问题?感谢

3 个答案:

答案 0 :(得分: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的{​​{1}}实例化为maxStreams,则当您尝试启动另一个时,任何当前播放的声音都会停止,这可能会更干净地实现您想要的行为。

答案 1 :(得分:0)

你可以看到代码

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

答案 2 :(得分:0)

我是通过再次加载声音池音轨ID来做到这一点的。

mSoundPool.Stop(trackID);
trackID.load(getApplicationContext(),R.raw.audioclip,1;

您可以在任何地方再次播放mSoundPool.play()。