我一直试图让几个声音在同一时间播放;目前我正在使用SoundPool的共享实例。我想在完全相同的时间播放1,2或3个声音而没有延迟。
连续多次调用SoundPool.play(...)X次时,声音会按照人们的想法按顺序播放。什么是正确的实现这一点,我可以准备所有的声音同时播放,然后作为一个播放?
Sudo代码:
SoundPool _soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
_soundPool.load(_context, soundId1, 1);
_soundPool.load(_context, soundId2, 1);
_soundPool.load(_context, soundId3, 1);
_soundPool.play(soundId1, vol, vol, 1, 0, 1f);
_soundPool.play(soundId2, vol, vol, 1, 0, 1f);
_soundPool.play(soundId3, vol, vol, 1, 0, 1f);
答案 0 :(得分:0)
我完成了一个声音的声音池,它可能对你有帮助。 Android:sound pool and service
谢谢
答案 1 :(得分:0)
您需要了解SoundPool.load
方法是异步的,因此,当您连续调用3次然后调用play时,听起来确实没有保证。因此,您需要等待,直到所有声音加载完毕。为此,请使用OnLoadCompleteListener
:
fun loadAndPlay(soundPool: SoundPool, context: Context, resIds: IntArray) {
val soundIds = IntArray(resIds.size) {
soundPool.load(context, resIds[it], 1)
}
var numLoaded: Int = 0
soundPool.setOnLoadCompleteListener { sPool, sampleId, status ->
numLoaded++
if (numLoaded == resIds.size) {
soundPool.setOnLoadCompleteListener(null)
for (id in soundIds) {
soundPool.play(id, 1f, 1f, 1, 0, 1f)
}
}
}
}
要使用:
loadAndPlay(soundPool, context, intArrayOf(R.raw.sound_1, R.raw.sound_2, R.raw.sound_3))