请看一下这些代码:
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次?以及如何解决这个问题?感谢
答案 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()。