2012-02-22 2 views
1

벽을 여러 번 사용하여 머리를 여러 번 치고 처리하는 데 너무 많은 시간이 걸리는 다른 방법을 시도한 후에 (다른 볼륨의 MP3 파일을 변경)이 질문을 모든 사람에게 게시하기로 결정했습니다. 대답이있는 사람을 찾을 수 있기를 바랍니다.AVMutableComposition에서 트랙의 볼륨을 변경하는 방법

오디오 및 비디오 용 AVMutableCompositionTrack으로 채워지는 AVMutableComposition이 있습니다. 믹싱은 정상적으로 작동하지만 오디오 트랙의 볼륨 조정이 작동하지 않고 내보내는 동안 실패합니다.

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) { 
... 

모든 오디오 믹서없이 잘 혼합하지만 볼륨을 변경하려고 할 때 내보내기가 나에게 오류 제공 : AVMutableAudioMixInputParameters 설정 필요

AVFoundationErrorDomain Error: 11822 
+0

나는 해킹 작업에 이르렀다. 비디오없이 오디오 파일을 병합 한 다음 두 번째 패스를 수행하고 비디오를 병합하십시오. 더 좋은 방법이 있기를 바랍니다. – Dex

+0

감사합니다 덱스 나는 그것을 시도 할 것입니다. –

+0

당신은이 일을 했나요 ..? –

답변

1

을 여기

내가 사용하는 코드입니다 매개 변수를 적용 할 오디오 트랙을 나타내는 "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

이것이 작동하지 않습니다. –

관련 문제