Android SoundPool:播放结束时收到通知

这听起来很简单,我不明白为什么我找不到答案大声笑

我有一个工作的声音池类(感谢教程和我做了一些调整),它工作正常。

现在的问题是我想要随意更换我的背景音乐。 (并不总是在一个循环中有相同的音乐,但有2或3,当一个完成,我打其他2人之一)。

问题是我找不到通知音乐播放完毕的方法。

有任何想法吗 ?

贾森

Solutions Collecting From Web of "Android SoundPool:播放结束时收到通知"

据我所知,无法用SoundPool完成。

我知道唯一可以提供完成通知的audio“播放器”是MediaPlayer – 它比SoundPool更复杂,但允许设置OnCompletionListener在播放完成时得到通知。

这就是我所做的:

启动时,我使用MediaPlayer获取每个声音点击的长度:

private long getSoundDuration(int rawId){ MediaPlayer player = MediaPlayer.create(context, rawId); int duration = player.getDuration(); return duration; } 

并将声音和持续时间一起存储(在DTOtypes的对象中)。

我有超过100个短的声音剪辑,SoundPool是我最好的select。 我想在另一个剪辑完成播放后播放一个剪辑。 一旦发现没有onCompletionListener()等价物,我select实现一个可运行的。 这适用于我,因为第一个声音在1到2秒之间,所以我的可运行时间设置为2000年。希望他们在这个类上工作,因为它有很大的潜力!

与SoundPool相比,MediaPlayer沉重而缓慢,但SoundPool没有setOnCompletionListener。 为了解决这个问题,我使用setOnCompletionListener从SoundPool实现了一个自定义的类 。

用法:与MediaPlayer类似

创build:

 SoundPoolPlayer mPlayer = SoundPoolPlayer.create(context, resId); mPlayer.setOnCompletionListener( new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { //mp will be null here Log.d("debug", "completed"); } }; ); mPlayer.play(); 

暂停:

 mPlayer.pause(); 

停止:

 mPlayer.stop(); 

恢复:

 mPlayer.resume(); 

正在玩:

 mPlayer.isPlaying(); 

任何拉请求是受欢迎的。 我只在这里实现了我需要的东西。