6

请看一下这些代码:

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 次吗?我该如何解决这个问题?谢谢

4

3 回答 3

19

该方法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允许的流数量。如果您将您SoundPoolmaxStreams值实例化为 1,那么当您尝试启动另一个声音时,任何当前播放的声音都会停止,这可能会更干净地实现您想要的行为。

于 2012-07-27T19:11:06.837 回答
0

你可以看到代码

public static void clear() {
        if (mSoundManager != null) {
            mSoundManager.mSoundPool = null;
            mSoundManager.mAudioManager = null;
            mSoundManager.mSoundPoolMap = null;
        }
        mSoundManager = null;
    }
于 2014-10-27T15:37:58.410 回答
0

我通过再次加载soundpool track id来做到这一点..

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

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

于 2018-08-20T11:59:18.093 回答