AVMutableAudioMix多个轨道的音量无法正常工作

时间:2015-10-14 19:31:20

标签: ios audio video avfoundation

我有一个简单的编辑器,可以连接本地视频文件,并将其与本地文件中的音乐相关联。

我正在制作合成曲目和合成曲目,并将视频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也可以。

我为每个视频卷使用滑块值减1,为音乐使用值。

    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,但也没有。此外,它没有滑块问题,我尝试硬编码各种浮点值,结果证明它不起作用。

现在我不知道为什么会这样。这完全是奇怪的,我无法解释。

1 个答案:

答案 0 :(得分:0)

我不确定您是否在正确的对象中添加音频混合,audiomix未添加到合成本身。要查看音频混合的效果,您需要在播放时将其添加到AVPlayerItem的实例,或者在导出时将其添加到AVAssetExportSession。看看AVFoundation Programming Guide