我正在开发一种音乐应用程序,它可以一起播放多种声音,就像一种多轨程序。当所有声音播放时,定时器会触发。声音必须在节拍上完全播放并完美同步和混音。
我找到的最简单的解决方案是为每个声音安装一个MediaPlayer,在一开始就使用MediaPlayer.create()在我的应用程序的OnCreate()中初始化所有声音。 为了使它更可靠和快速,我为每个声音制作了两个媒体播放器。 然后我有一个调用简单循环的计时器,类似于:
for (int w=0; w<SOUNDS; w++)
if (must_play(w)) {
if (mp[w].isPlaying()) {
if (mp2[w].isPlaying())
mp[w].seekTo(0);
else mp2[w].start();
} else mp[w].start();
}
我使用.seekTo(0),因为我发现它比制作.stop()和.start()稍快。 但声音并不总是完全同步。两个媒体播放器的.start()之间延迟的1/10秒非常烦人,如果这两个声音是两个应该完美排列的鼓。 有没有办法强制所有被指示.start()的媒体播放器一次有效地播放? 请注意,声音可能非常短,如鼓声:问题不是让多个媒体播放器随着时间的推移保持同步,而是让它们完全一起开始,没有延迟。
这个问题相当棘手,因为我认为有两个问题:
谢谢。
答案 0 :(得分:0)
我做到了,只使用了SoundPool类而不是MediaPlayer。它的响应速度更快,处理得非常好,甚至可以在流量不足时切割最老的声音。虽然问题没有得到解答,但问题仍然存在。