2012-02-22 83 views
1

在用墙壁敲击我的头几次并尝试不同的方法需要很长时间来处理(更改不同音量的MP3文件)后,我决定将此问题发布给所有人希望找到有答​​案的人。如何更改AVMutableComposition中音轨的音量

我有一个AVMutableComposition获取音频和视频的几个AVMutableCompositionTrack。混音工作正常,但音轨的音量调整不起作用,并在导出时失败。

这里是我使用的代码:

AVMutableComposition* mixComposition = [AVMutableComposition composition]; 
AVURLAsset *soundTrackAsset = [[AVURLAsset alloc]initWithURL:trackTempProcessedURL options:nil]; 

//ADDING AUDIO 
AVMutableCompositionTrack *compositionAudioSoundTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:trackIDSoundTrack]; 
[compositionAudioSoundTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAsset.duration) 
            ofTrack:[[soundTrackAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] 
            atTime:CMTimeAdd(cmTimeDifference,startTime) error:nil]; 

NSArray *tracksToDuck = [mixComposition tracksWithMediaType:AVMediaTypeAudio]; 
NSMutableArray *trackMixArray = [NSMutableArray array]; 
for (NSInteger i = 0; i < [tracksToDuck count]; i++) { 
    AVMutableAudioMixInputParameters *trackMix = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:[tracksToDuck objectAtIndex:i]]; 
    [trackMix setVolume:volume atTime:kCMTimeZero]; 
    [trackMixArray addObject:trackMix]; 
} 
audioMix = [AVMutableAudioMix audioMix]; 
audioMix.inputParameters = trackMixArray; 

//ADDING VIDEO 
AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:frontAssetURL options:nil]; 
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) 
           ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] 
           atTime:startTime error:nil]; 

//EXPORTING 
_assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName: AVAssetExportPresetPassthrough]; 

_assetExport.outputFileType = AVFileTypeQuickTimeMovie; 
_assetExport.outputURL = exportUrl; 
_assetExport.shouldOptimizeForNetworkUse = YES; 
_assetExport.audioMix = audioMix; 

[_assetExport exportAsynchronouslyWithCompletionHandler: 
^(void) { 
... 

一切混合无需音频混频器正常,但当我试图改变卷出口给我一个错误:

AVFoundationErrorDomain Error: 11822 
+0

我知道它与黑客工作。将音频文件合并在一起而不需要视频,然后在视频中进行第二遍合并。我希望有更好的办法。 – Dex 2012-03-07 04:54:33

+0

谢谢德克斯我会尝试。 – 2012-03-08 16:03:12

+0

你有没有得到这个工作..? – 2012-05-03 07:58:32

回答

1

AVMutableAudioMixInputParameters需要设置用于指示哪个音轨应该应用参数的“trackID”。

for (NSInteger i = 0; i < [tracksToDuck count]; i++) { 
    AVMutableAudioMixInputParameters *trackMix = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:[tracksToDuck objectAtIndex:i]]; 
    [trackMix setVolume:volume atTime:kCMTimeZero]; 

//+++++code 
    AVMutableCompositionTrack * track = [tracksToDuck objectAtIndex:i] 
    [trackMix setTrackID:[track trackID]]; 

    [trackMixArray addObject:trackMix]; 
} 
+0

这是行不通的 – 2017-08-08 11:08:13