2011-06-06 95 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),並對這些格式進行相同的測試。做這兩件事應該有助於縮小實際問題的範圍。

相關問題