2013-01-16 93 views
1

我在這裏有一個問題,在混合兩個CAF文件。混合兩個CAF文件在一起

首先CAF文件 - >通過從服務器側

二CAF文件給定的URL抓取 - >與AVAudioRecorder

取文件尺寸的記錄 - 10秒

錄音文件大小 - 7秒

如何在一個文件中混合這兩個給定的音頻文件,請給我一些相同的示例代碼。格式也必須只在CAF中。

+0

'mix'的意思是讓1個文件同時播放兩個聲音,或者將它們連接成1個17秒播放第一個文件然後第二個文件?對於後者,我有辦法用.wav文件做到這一點。也許你可以使用這個代碼來解決你的問題。 – Manuel

+0

@ dragon112「Mix」表示兩個文件混合在一起後,兩個文件在一個文件中一起播放。例如,如果其中一個是主題音頻文件,並且您錄製了我們自己的內容,然後將該錄製文件與主題文件混合在一起。 – sandy

+0

@sandy你已經試過了什麼?你有什麼問題? – occulus

回答

1

AVFoundation框架中的AVMutableComposition可以做到這一點;你可以做類似

AVMutableComposition *comp = [AVMutableComposition new]; 
AVMutableCompositionTrack *compTrack1 = [comp addMutableTrackWithMediaType:AVMediaTypeAudio 
    preferredTrackId:kCMPersistentTrackID_Invalid]; 
AVMutableCompositionTrack *compTrack2 = [comp addMutableTrackWithMediaType:AVMediaTypeAudio 
    preferredTrackId:kCMPersistentTrackID_Invalid]; 

AVAssetTrack *srcTrack1 = UseAVAssetToGetTrackfromFirstFile(); 
AVAssetTrack *srcTrack2 = UseAVAssetToGetTrackfromSecondFile(); 

NSError *error = nil; 

    [compTrack1 insertTimeRange:CMTimeRangeMake(kCMTimeZero, kCMTimePositiveInfinity) 
          ofTrack:srcTrack1 
          atTime:kCMTimeZero error:&error]; 

    CheckForError(error); 

    [compTrack2 insertTimeRange:CMTimeRangeMake(kCMTimeZero, kCMTimePositiveInfinity) 
          ofTrack:srcTrack2 
          atTime:kCMTimeZero error:&error]; 

    CheckForError(error); 

// emit mix from the composition here with a reader or whatever. 

你也可以用組合設置相對等級。如果你需要做更多的事情而不僅僅是關卡和平移,你必須創建一個AudioUnit圖。

+0

如何在這種情況下設置鍋? – DEADBEEF

+1

我不相信你可以在AVComposition中控制平移,你必須給我們一個AVAudioMix – iluvcapra

+0

是的。我去了這個解決方案。然後你必須在你的AVAudioMix中用一個AudioUnit(比如一個多聲道混音器)設置一個MTAudioProcessingTap。在MTAudioProcessingTap回調期間,您可以設置音頻單元的聲像。 – DEADBEEF