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

Cés*_*arQ 5 android soundpool

请看看这些代码:

private SoundPool soundPool;
private int soundID;

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

当我按下按钮时:

soundPool.play(soundID, volume, volume, 1, 0, 1f);
Run Code Online (Sandbox Code Playgroud)

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

我试着投了一个

soundPool.stop(soundID); 
Run Code Online (Sandbox Code Playgroud)

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

Dev*_*red 17

该方法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);
Run Code Online (Sandbox Code Playgroud)

将停止当前播放的曲目并启动另一个曲目.第二种选择是限制SoundPool允许的流数量.如果您SoundPool使用maxStreams值1 实例化,那么当您尝试启动另一个时,任何当前播放的声音都将停止,这可能会更干净地实现您想要的行为.