2015-10-14 26 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更好,你说得对。我需要查找实际问题,这是一个奇怪的问题。请给我一点时间;) –