我创建了一个类 MySoundPool(我将这个类用作 sigelton,但不要认为这与其他所有工作都相关)。我正在初始化 SoundPool,一个 HashMap,并获取 AudioManager 的上下文。此后我正在加载两个声音。
MySoundpool 由方法 MySoundPool.playSound(int index, float rate) 使用
playSound 剪辑速率为 0.5 = 2.0 并执行语句
float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
streamVolume = streamVolume / mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, index, 0, rate);
到现在为止还挺好。一切正常。
不,在前一个声音仍在播放时调用 playSound,我想在播放新声音之前停止它。在上面的代码 fragment 之前我试过
mSoundPool.stop(mSoundPoolMap.get(index));
和
mSoundPool.autoPause();
没有成功。声音只是继续播放到结束。
任何意见将不胜感激
最佳答案
我假设您在 MySoundPool 类的构造函数中创建了一个新的 SoundPool 对象?
如果是这样,则 SoundPool 的构造函数采用的第一个参数是同时允许的流数。例如...
mSoundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
这将允许一次播放 10 个声音,因此只需将 10 更改为 1 即可。
编辑:
stop() 方法接受一个流 id 作为参数,它应该是从 play() 方法返回的数字。您可以尝试设置一个等于 play() 返回的变量,然后在停止声音时使用该变量。