多个音轨的 AVMutableAudioMix 音量无法正常工作
Posted
技术标签:
【中文标题】多个音轨的 AVMutableAudioMix 音量无法正常工作【英文标题】:AVMutableAudioMix volume of multiple tracks not working correctly 【发布时间】:2015-10-14 19:31:19 【问题描述】:我有一个简单的编辑器,它可以连接本地视频文件并在其上添加来自本地文件的音乐。
我正在创建一个合成和合成轨道,并将视频 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,AV 音量也是如此。
对于每个视频音量,我使用滑块值减一,对于音乐,我使用它的值。
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】:我不确定您是否将音频混合添加到正确的对象中,audiomix
不会添加到合成本身。要查看音频混合的效果,您需要在播放时将其添加到 AVPlayerItem
的实例中,或者在导出时将其添加到 AVAssetExportSession
中。看看AVFoundation Programming Guide
【讨论】:
“当我现在使用音频混合进行播放或渲染时,[...]”请正确阅读问题。它必须对订单左右做点什么,但我已经解决了,所以我要删除问题 对不起,我错过了。但请提供有关您如何解决此问题的答案,AVFoundation 非常复杂,这个问题可能对包括我在内的其他人有用,因为我就是这样回答您的问题的首先,我在使用 audiomix 时遇到了类似的问题。 会更好,你是对的。我需要查找实际问题,这很奇怪。给我一点时间;) 我能得到你的答案吗?拜托。我也有同样的问题。以上是关于多个音轨的 AVMutableAudioMix 音量无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章