首页 文章

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

提问于
浏览
0

我有一个简单的编辑器,它连接本地视频文件,并将其与本地文件中的音乐一起使用 .

我正在创建合成和合成曲目并将视频添加到他们的轨道:

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时,它不可测量 . 当设置为零时,我可以听到它 .

无论我为音乐设置了什么 Value ,它都在输出上完整 .

我也试过设置trackID,但没有做到 . 此外,它没有滑块问题,我尝试硬编码各种浮动值,结果证明它不起作用 .

现在我不明白为什么这会像这样 . 这完全是奇怪的,我无法解释 .

1 回答

  • 0

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

相关问题