2012-02-22 17 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

ハックで作業することができました。ビデオなしでオーディオファイルをまとめてから、2回目のパスを実行してビデオをマージします。私は良い方法があることを願っています。 – Dex

+0

ありがとうDex私はそれを試みます。 –

+0

あなたはこれを動作させました..? –

答えて

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

これは動作しません –

関連する問題