2015-10-14 25 views
0

我有一個簡單的編輯器連接本地視頻文件,並將其與本地文件中的音樂進行疊加。AVMutableAudioMix多個音軌的音量不能正常工作

我創建一個成分和組成軌道和視頻A/V曲目添加到他們:

NSMutableArray *audioInputParams = [NSMutableArray array]; 
AVMutableComposition *composition = [NSMutableComposition composition]; 
AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 
AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 

for (AVURLAsset *asset in assets) { 
    AVAssetTrack *audioTrack = [asset compatibleTrackForCompositionTrack:compositionAudioTrack]; 
    AVAssetTrack *videoTrack = [asset compatibleTrackForCompositionTrack:compositionVideoTrack]; 

    // compositionAudioTrack insert audioTrack 
    // compositionVideoTrack insert videoTrack 

這一切工作正常。由此產生的視頻在聲音和視頻中完美切割。

UI中有一個滑塊,可以在原始視頻聲音和音樂聲音之間交叉淡入淡出。滑塊從0變爲1,因爲AVs音量也是如此。

我使用滑塊值減去每個視頻音量和音樂的價值,因爲它是。

AVMutableAudioMixInputParameters *audioMixParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:audioTrack]; 
    [audioMixParameters setVolume:1.0 - [slider value] atTime:kCMTimeZero]; 
    [audioInputParams addObject:audioMixParameters]; 
} 

AVMutableCompositionTrack *compositionMusicTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 
AVURLAsset *musicAsset; 
AVAssetTrack *musicTrack = [musicAsset compatibleTrackForCompositionTrack:compositionMusicTrack]; 

[compositionMusicTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, [composition duration]) 
           ofTrack:musicTrack 
           atTime:kCMTimeZero 
           error:nil]; 

AVMutableAudioMixInputParameters *musicInputParameter = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:musicTrack]; 
[musicInputParameter setVolume:[slider value] atTime:kCMTimeZero]; 

[audioInputParams addObject:musicInputParameter]; 

AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix]; 
[audioMix setInputParameters:audioInputParams]; 

當我現在用的音響組合,無論是播放或進行渲染,音頻混合不起作用。當我將視頻音量設置爲1時,它無法忍受。設置爲零時,我可以聽到它。

無論我爲音樂設置了什麼樣的價值,它在輸出上都是完整的。

我也嘗試設置trackID,這也沒有做。此外,它沒有滑塊問題,我試圖硬編碼各種浮點值,結果證明不起作用。

現在我不明白爲什麼這會表現得像這樣。這是完全奇怪的,我不能解釋。

回答

0

我不確定您是否將音頻混合添加到正確的對象中,audiomix未添加到合成本身。要查看混音的效果,您需要在播放時將其添加到AVPlayerItem的實例,或者在導出時將其添加到AVAssetExportSession。看看AVFoundation Programming Guide

+0

「當我現在使用音頻混合,無論是播放還是渲染,[......]」請正確閱讀這個問題。它不得不做一些事情,但我已經解決了,所以我要刪除這個問題 –

+0

對不起,我錯過了這個..但請提供答案你如何解決這個問題,AVFoundation是非常複雜的,這問題可能對包括我在內的其他人有用,因爲那是我首先遇到你的問題的原因,我遇到過與audiomix類似的問題。 – Gregortega

+0

Wiuld更好,你說得對。我需要查找實際問題,這是一個奇怪的問題。請給我一點時間;) –