2013-12-23 5 views
1

Я обрезаю аудиофайл, используя AVAssetExportSession, но не смог добиться эффекта затухания в эффекте затухания в сохраненном файле. Вот код, который я использую.AVAssetExportSession и fade-in fade-out Эффект

 [[NSFileManager defaultManager] removeItemAtURL:audioFileOutput error:NULL]; 
     AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:file_path]]; 
     AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:asset 
                       presetName:AVAssetExportPresetAppleM4A]; 
     time = floorf(Endtime-startTime); 
     CMTime start = CMTimeMake(0.0*100,100); 
     CMTime stop = CMTimeMake(time*100,100); 
     CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(start, stop); 
     AVMutableAudioMix *mutableAudioMix = [AVMutableAudioMix audioMix]; 
     AVURLAsset* audio = [[AVURLAsset alloc]initWithURL:[NSURL URLWithString:file_path] options:nil]; 
     AVAssetTrack* audioTrack = [[audio tracksWithMediaType:AVMediaTypeAudio] 
            objectAtIndex:0]; 
     AVMutableAudioMixInputParameters *mixParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:audioTrack]; 
     [mixParameters setVolumeRampFromStartVolume:1.0 toEndVolume:0.0 timeRange:exportTimeRange]; 
     mutableAudioMix.inputParameters = @[mixParameters]; 
     exportSession.audioMix = mutableAudioMix; 
     exportSession.outputURL = audioFileOutput; 
     exportSession.outputFileType = AVFileTypeAppleM4A; 
     exportSession.timeRange = exportTimeRange; 
     [SVProgressHUD showWithStatus:@"Saving Recording.." maskType:SVProgressHUDMaskTypeBlack]; 
     [exportSession exportAsynchronouslyWithCompletionHandler:^ 
     { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       if (AVAssetExportSessionStatusCompleted == exportSession.status) 
       { 
        [SVProgressHUD dismiss]; 
        NSLog(@"Success!"); 
        NSLog(@"saving complete %@", exportSession.description); 

        NSLog(@"the Song Path : %@", strOutputFilePath); 

       } 
       else if (AVAssetExportSessionStatusFailed == exportSession.status) 
       { 
        NSLog(@"failed"); 
        [SVProgressHUD showErrorWithStatus:@"Record Again"]; 
       } 
       [[NSFileManager defaultManager] removeItemAtPath:file_path error:nil]; 
      }); 

     }]; 

Я не знаю, что мне не хватает. Любая помощь приветствуется.

ответ

5

Ну попробовать что-то вроде этого

AVMutableAudioMix *exportAudioMix = [AVMutableAudioMix audioMix]; 
AVAssetTrack *assetTrack = [[asset tracksWithMediaType:AVMediaTypeAudio]objectAtIndex:0]; 
AVMutableAudioMixInputParameters *exportAudioMixInputParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:assetTrack]; 
exportAudioMixInputParameters.trackID = [[[asset tracksWithMediaType:AVMediaTypeAudio]objectAtIndex:0] trackID]; 
NSMutableArray* inputParameters = [NSMutableArray arrayWithCapacity:1]; 

CMTime startFadeInTime = start; 
CMTime endFadeInTime = CMTimeMake((startTime+2)*100, 100); 
CMTime startFadeOutTime = CMTimeMake((time-2)*100, 100); 
CMTime endFadeOutTime = CMTimeMake(time*100, 100); 

CMTimeRange fadeInTimeRange = CMTimeRangeFromTimeToTime(startFadeInTime, endFadeInTime); 
CMTimeRange fadeOutTimeRange = CMTimeRangeFromTimeToTime(startFadeOutTime, endFadeOutTime); 
[exportAudioMixInputParameters setVolumeRampFromStartVolume:0.0 toEndVolume:1.0 timeRange:fadeInTimeRange]; 
[exportAudioMixInputParameters setVolumeRampFromStartVolume:1.0 toEndVolume:0.0 timeRange:fadeOutTimeRange]; 

[inputParameters insertObject:exportAudioMixInputParameters atIndex:0]; 

Надеется, что это поможет. Счастливое кодирование.

+0

Спасибо Nikhil, я использовал этот код и его работу абсолютно отлично .... спасибо большое – Guffy