2012-06-25 158 views
10

我有一個iOS應用程序,它可以播放一個AVPlayer的背景音軌,並在第二個AVPlayer上播放其他聲音片段。 (聲音剪輯從互聯網流出,因此需要AVPlayer。)問題是,當第二個AVPlayer開始播放時,它會導致後臺AVPlayer停止幾分之一秒,這與本評論中描述的內容類似:同時播放兩個AVPlayer音頻文件時的音頻故障

Play multiple Audio Files with AVPlayer


我準備的音頻剪輯用這種方法:

- (void)prepareAudio:(NSURL *)assetURL { 

asset = [AVURLAsset URLAssetWithURL:assetURL options:nil]; 
playerItem = [AVPlayerItem playerItemWithAsset:asset]; 
[player replaceCurrentItemWithPlayerItem:playerItem]; 


[playerItem addObserver:self forKeyPath:@"playbackBufferEmpty" options:NSKeyValueObservingOptionNew context:nil]; 
[playerItem addObserver:self forKeyPath:@"playbackLikelyToKeepUp" options:NSKeyValueObservingOptionNew context:nil]; 


[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(playerItemDidReachEnd:) 
              name:AVPlayerItemDidPlayToEndTimeNotification 
              object:[player currentItem]]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(playerItemFailedToReachEnd:) 
              name:AVPlayerItemFailedToPlayToEndTimeNotification 
              object:[player currentItem]]; 
} 

...,然後調用[player play];當I W螞蟻聽到每​​一個聲音。


有什麼我需要做的,當我設置音頻會話或AVPlayer的每個實例,使聲音不融合的故障?

回答

2

這可能是軟件編碼器踢入的結果。當軟件編碼器嘗試播放第二個聲音片段時,您會看到內存相當大的峯值。看看蘋果文檔部分「iOS硬件和軟件音頻編解碼器」 http://developer.apple.com/library/ios/#DOCUMENTATION/AudioVideo/Conceptual/MultimediaPG/UsingAudio/UsingAudio.html

「當使用硬件輔助解碼時,設備一次只能播放一種支持格式的單個實例。

另外...「要以最佳性能播放多個聲音,或者在iPod在後臺播放時高效播放聲音,請使用線性PCM(未壓縮)或IMA4(壓縮)音頻。」

如果您在可以提供的媒體編解碼器中沒有選擇,請查看AudioUnit框架以獲得更加無縫的混音。特別是「音頻混音器(MixerHost)」在http://developer.apple.com/library/ios/#samplecode/MixerHost/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010210

+0

這不可能。我已經做了一些使用直接PCM未壓縮文件的實驗,問題依然存在。這就是說,它似乎與AVMutableAudioMix的應用有關。無論什麼時候應用,就是在發生漏接時。 –

1

我終於弄清楚了問題所在。我正在編寫一個應用程序,使用AVMutableAudioMixInputParameters類調整音量,並且我試圖通過按每個樣本上移或下移音量來使用此類對音頻進行標準化。

雖然這種方法在只有少量音量斜坡時起作用,但似乎應用斜坡發生在緩衝音頻的同一線程上,所以當我使用太多(>〜1000)最終會吃掉應該忙於緩衝音頻的CPU,然後在音頻中出現ggg-glitch。

我的解決方案是重構我的音量規範化算法,以使用更少的音量斜坡來實現相同的目的。一旦我能夠將每組音量斜坡/歌曲降低到大約500個左右,我就不再有這個問題,並且音頻故障消失了。