2013-12-23 126 views
1

我正在使用AVAssetExportSession调整音频文件,但无法在保存的文件中淡入淡出效果。这是我正在使用的代码。AVAssetExportSession和淡入淡出效果

 [[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