【发布时间】:2010-12-03 04:32:50
【问题描述】:
我一直在尝试同时播放一些声音;目前我正在使用 SoundPool 的共享实例。我希望同时播放 1、2 或 3 种声音而没有延迟。
当连续调用 SoundPool.play(...) X 次时,声音会按照人们想象的顺序播放。什么是正确的方法来实现这一点,我可以准备同时播放所有声音,然后将它们作为一个播放?
须藤代码:
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);
【问题讨论】:
-
@Patrick,我尝试了线程方法,起初我认为它有效,或者当你只有两个线程时至少足够接近。但是,当您采用相同的想法并将其扩展为说 4 个线程都在做同样的事情时,您就会再次回来,并且会稍有延迟。也许下一步是潜入混合声音......我真的不想走这么远,但在这一点上我没有看到很多其他选择。
-
我认为混音是最好的方法。您是否在手机上尝试过,而不仅仅是像詹姆斯在另一个线程中所说的那样在模拟器上尝试过?如果你知道你想要混合播放什么声音,你可以在应用程序生命周期的开始进行设置,这样你就不必在想要播放声音时混合它,这有望提供更好的流动。
-
@Patrick,我确实尝试将它安装在我的 Droid X 上,结果与模拟器相同。我确信我可以预混这些声音。我希望今天晚些时候有时间阅读混音;我以前从未做过任何事情,但我相信这将是一个有趣的练习。如果我找到一个好的答案,我一定会更新这篇文章。
标签: android audio soundpool android-audiomanager