如何停止通过 Soundpool 播放声音?
Posted
技术标签:
【中文标题】如何停止通过 Soundpool 播放声音?【英文标题】:How to stop playing a Sound via Soundpool? 【发布时间】:2012-07-27 19:03:36 【问题描述】:请看一下这些代码:
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 次吗?我该如何解决这个问题?谢谢
【问题讨论】:
【参考方案1】: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,那么当您尝试启动另一个声音时,任何当前正在播放的声音都会停止,这可能会更干净地实现您想要的行为。
【讨论】:
【参考方案2】:你可以看到代码
public static void clear()
if (mSoundManager != null)
mSoundManager.mSoundPool = null;
mSoundManager.mAudioManager = null;
mSoundManager.mSoundPoolMap = null;
mSoundManager = null;
【讨论】:
【参考方案3】:我通过再次加载 soundpool 轨道 ID 来做到这一点..
mSoundPool.Stop(trackID);
trackID.load(getApplicationContext(),R.raw.audioclip,1;
您可以在任何地方再次播放 mSoundPool.play()。
【讨论】:
以上是关于如何停止通过 Soundpool 播放声音?的主要内容,如果未能解决你的问题,请参考以下文章