2016-04-21 238 views
3

我已使用AVAssetExportSession裁剪了特定持续时间的音频,并且我还获得了裁剪后的音频。淡入淡出在音频中的效果通过在ios中使用AVAssetExportSession

但我的问题是,我想添加淡入和淡出效果在我的音频。

让我知道,我该如何解决这个问题? 任何帮助将不胜感激。

代码微调音频是这里 -

- (void)trimAudio:(NSString *)inputAudioPath audioStartTime:(float)sTime audioEndTime:(float)eTime outputPath:(NSString *)outputFilePath mode:(NSInteger)kSelectionMode 
{ 
@try 
{ 
    AVAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:inputAudioPath] options:nil]; 

    //Create the session with assets 
    AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]initWithAsset:asset presetName:AVAssetExportPresetAppleM4A]; 

    //Set the output url 
    exportSession.outputURL = [NSURL fileURLWithPath:outputFilePath]; 

    // Trim video in a particular duration 
    CMTime startTime = CMTimeMake((int)(floor(sTime * 100)), 100); 
    CMTime stopTime = CMTimeMake((int)(ceil(eTime * 100)), 100); 
    CMTimeRange range = CMTimeRangeFromTimeToTime(startTime, stopTime); 
    exportSession.timeRange = range; 

    exportSession.outputFileType = AVFileTypeAppleM4A; 
    [exportSession exportAsynchronouslyWithCompletionHandler:^{ 
     switch (exportSession.status) { 
      case AVAssetExportSessionStatusCompleted:{ 
       NSLog(@"Export Complete"); 
       if(UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(exportSession.outputURL.path)){ 

        UISaveVideoAtPathToSavedPhotosAlbum(exportSession.outputURL.path, nil, nil, nil); 
        if ([self.delegate respondsToSelector:@selector(trimDidSucceed:mode:)]) { 
         [self.delegate trimDidSucceed:outputFilePath mode:kTrimAudio]; 
        } 
        else{ 
         [self.delegate trimDidFail:exportSession.error]; 
        } 
       } 

       break; 
      } 
      case AVAssetExportSessionStatusFailed:{ 
       NSLog(@"Export Error: %@", [exportSession.error description]); 

       break; 
      } 
      case AVAssetExportSessionStatusCancelled: 
       NSLog(@"Export Cancelled"); 
       break; 
      default: 
       break; 
     } 
    }]; 


    exportSession = nil; 

} 
@catch (NSException * e) 
{ 
    NSLog(@"Exception Name:%@ Reason:%@",[e name],[e reason]); 
} 
} 
+0

你想增加或减少音量的一段时间的音量? – Lion

+0

是的,我确实需要这个。 –

+0

pleae w8 @NehaPurwar我正在写作 –

回答

3
//fade in /out 

AVMutableAudioMix *exportAudioMix = [AVMutableAudioMix audioMix]; 
AVMutableAudioMixInputParameters *exportAudioMixInputParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:asset.tracks.lastObject]; 

int start=2,length=3; 

[exportAudioMixInputParameters setVolume:0.0 atTime:CMTimeMakeWithSeconds(start-1, 1)]; 
[exportAudioMixInputParameters setVolume:0.1 atTime:CMTimeMakeWithSeconds(start, 1)]; 
[exportAudioMixInputParameters setVolume:0.5 atTime:CMTimeMakeWithSeconds(start+1, 1)]; 
[exportAudioMixInputParameters setVolume:1.0 atTime:CMTimeMakeWithSeconds(start+2, 1)]; 



[exportAudioMixInputParameters setVolume:1.0 atTime:CMTimeMakeWithSeconds((start+length-2), 1)]; 
[exportAudioMixInputParameters setVolume:0.5 atTime:CMTimeMakeWithSeconds((start+length-1), 1)]; 
[exportAudioMixInputParameters setVolume:0.1 atTime:CMTimeMakeWithSeconds((start+length), 1)]; 

exportAudioMix.inputParameters = [NSArray arrayWithObject:exportAudioMixInputParameters]; 

exportSession.audioMix = exportAudioMix; // fade in audio mix 

之前只需添加这些少数线[exportSession exportAsynchronouslyWithCompletionHandler:^ { }];

+0

你试过了吗? –

+0

是的,我试了这个,它的工作完美:) –

+0

谢谢@Jagveer辛格 –

0

采取nstimer喜欢在特定第二是提高音量,如果时间达到播放音频时,您可以简单地把if语句,如果它在达到高峰,然后第二将音量降至初始音量。

查询this link仅供参考。