2011-06-06 117 views
2

我想播放6独立.mp3声音文件使用AVAudioPlayer的实例。 声音在同一时间播放,但它们似乎以略微不同的速度播放不同步或 。有谁知道这可能是为什么?AVAudioPlayer声音文件播放不同步时混合 - iPhone

这是我如何初始化一个声音:

NSURL *musicurl = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource: @"SoundLoop" ofType: @"mp3"]]; 
music = [[AVAudioPlayer alloc] initWithContentsOfURL: musicurl error: nil]; 
[musicurl release]; 
music.numberOfLoops = -1; // Loop indefinately 
music.currentTime = 0; // start at beginning 
music.volume = 1.0; 
music.meteringEnabled = YES; 

这里是我AudioSession代码:

AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
audioSession.delegate = self; 
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];  
[[AVAudioSession sharedInstance] setPreferredHardwareSampleRate:44100 error:nil]; 
[[AVAudioSession sharedInstance] setPreferredIOBufferDuration:30 error:nil]; 

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
Float32 hardvol = 1.0; 
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory); 
AudioSessionSetProperty(kAudioSessionProperty_CurrentHardwareOutputVolume, sizeof(hardvol), &hardvol); 
UInt32 doSetProperty = 1; 
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty); 
[[AVAudioSession sharedInstance] setActive:YES error: nil]; 

莫非可能有什么用声音的比特率?或者我正在使用.mp3?

谢谢。

回答

5

我找到了解决这个问题,通过使用playAtTime:该AVAudioPlayer类的方法:

NSTimeInterval shortStartDelay = 0.5;   // seconds 
    NSTimeInterval now = player.deviceCurrentTime; 

    [player playAtTime:now + shortStartDelay]; //these players are instances of AVAudioPlayer 
    [player2 playAtTime:now + shortStartDelay]; 
    [player3 playAtTime:now + shortStartDelay]; 

使用这将允许所有的声音异步和同步播放。

1

你应该看看多媒体编程指南。 “使用音频”部分提供了大量有用的信息。 http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/MultimediaPG/Introduction/Introduction.html

这听起来像它涉及您的问题:

当使用硬件辅助解码, 该设备可以在一个时间只能播放支持的格式 一个单一 实例。例如,如果您在使用 硬件编解码器播放立体声MP3音效,则第二个 同步MP3声音将使用 软件解码。同样,您不能同时播放AAC和使用硬件的ALAC声音。如果 iPod应用程序在后台播放AAC或 MP3声音,则它具有 声称的硬件编码解码器;您的 应用程序将使用软件解码播放AAC,ALAC和MP3音频。

要播放多种声音与最佳 性能,或以有效地发挥 声音,而iPod在 背景播放,使用线性PCM (未压缩)或IMA4(压缩) 音频。

这里还有一点声称你在做什么应该是可能的,但似乎苹果正在抛出“最具处理器效率的多重播放”的警告。我认为,如果处理器很紧张,会导致不能及时完成任何事情。

在IOS 3.0开始,几乎所有 支持的音频格式,可以使用 用于同时重放即,所有 那些可以使用 软件解码如 表1-1所示播放。对于处理器效率最高的多重播放 ,使用线性PCM(未压缩)或IMA4(压缩)音频。

在调试方面,您应该从两个音频声音开始,看看是否有问题。然后按照你的方式进入第6步,找出是否有问题开始发生的明确点。我还会找到(或制作)一些Apple推荐格式的音轨(PCM或IMA4),并对这些格式进行相同的测试。做这两件事应该有助于缩小实际问题的范围。