我目前正在开发一种具有32种声音的放松声音应用程序,这些声音是不同大小的OGG文件,应分别以及同时播放。一些OGG文件小于100 KB,最大的OGG文件不超过400 Kb。所有这32种声音的加载时间大约为1分钟。
我正在加载这样的声音:
for (sound: Sound in sounds) {
val soundPoolId = soundPool.load(sound.filePath, 1)
}
我等待回调:
soundPool.setOnLoadCompleteListener { soundPool: SoundPool?, soundPoolId: Int, status: Int ->
val soundWithSoundPoolId = allSounds.find { sound ->
sound.soundPoolId == soundPoolId
}
for ((index, value) in allSounds.withIndex()) {
if (value.id == soundWithSoundPoolId?.id) {
allSounds[index] = soundWithSoundPoolId.copy(loaded = true)
break
}
}
_allSoundsLive.value = allSounds
}
据我了解,本机加载调用是在其他线程上完成的,因此,我不必担心我在错误的位置或错误的线程上调用了加载命令。加载命令的发送非常迅速。每种声音在1-2秒后将调用回调。
我的问题是,是否有其他方法可以在Android上播放多种声音,同时使声音加载速度更快。我在stackoverflow上看到了一个较旧的帖子,其中有人提到使用Soundpool加载100个mp3文件需要花费几秒钟的时间。感谢您的帮助!