淡入,淡出音频中的效果通过在ios中使用AVAssetExportSession

时间:2016-04-21 06:10:21

标签: ios audio avassetexportsession

我已经使用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]);
}
}

2 个答案:

答案 0 :(得分: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:^ {之前添加这几行 }];

答案 1 :(得分:0)

你可以简单地把if语句放在播放音频的时候取nstimer,如果时间到达特定秒增加音量,如果达到峰值秒然后减小音量到初始音量。

检查this link以供参考。