我正在做一个应用程序,涉及以多轨格式(鼓、人声、吉他、钢琴等)播放歌曲。我不需要对每个轨道进行任何花哨的音频处理,我需要做的就是播放、暂停和静音/取消静音每个轨道。
我一直在使用 AVAudioPlayer 的多个实例,但在执行设备测试时,我注意到这些曲目在首次播放时播放时稍微不同步。此外,当我暂停并播放曲目时,它们会继续变得更加不同步。经过一番研究后,我意识到 AVAudioplayer 的延迟太大,不适用于我的应用程序。
在我的应用程序中,我基本上有一个 AVAudioPlayers 的 NSArray,我会循环播放每个播放器或暂停/停止每个播放器,我确信这就是导致它在设备上不同步的原因。
看起来苹果的音频混音器对我来说效果很好,但是当我尝试实现它时,我收到了一个我无法弄清楚的 EXC_BAD_ACCESS 错误。
我知道答案是使用 OpenAL 或音频单元,但当我需要做的只是同时播放 5 个 .mp3 曲目时,似乎没有必要花几周时间来学习这些。有人对如何实现这一目标有任何建议吗?谢谢
感谢 admsyn 的建议,我能够想出一个解决方案。
AVAudioPlayer 有一个 currentTime 属性,它返回曲目的当前时间,也可以设置。
因此,我按照 admsyn 的说明实现了 startSynchronizedPlayback,然后在停止曲目时添加了以下内容:
-(void) stopAll
{
int count = [tracksArr count];
for(int i = 0; i < count; i++)
{
trackModel = [tracksArr objectAtIndex:i]
if(i = 0)
{
currentTime = [trackModel currentTime]
}
[trackModel stop]
[trackModel setCurrentTime:currentTime]
}
{
这段代码基本上循环遍历我的轨道数组,每个轨道都有自己的 AVAudioPlayer,从第一个轨道获取当前时间,然后将所有后续轨道设置为该时间。现在,当我使用 startSynchronizedPlayback 方法时,它们都同步播放,并且暂停、取消暂停也使它们保持同步。希望这对其尝试保持同步的其他人有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)