AVAssetExportSession 和淡入淡出效果

Posted

技术标签:

【中文标题】AVAssetExportSession 和淡入淡出效果【英文标题】:AVAssetExportSession and fade-in fade-out Effect 【发布时间】:2013-12-23 11:20:27 【问题描述】:

我正在使用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];
             );

         ];

我不知道我错过了什么。任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

试试这样的方法

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];

希望它会有所帮助。编码愉快。

【讨论】:

以上是关于AVAssetExportSession 和淡入淡出效果的主要内容,如果未能解决你的问题,请参考以下文章

(Swift)淡入淡出标签[重复]

如何使用 cocoalibspotify 进行音频交叉淡入淡出?

Swift : 动画 SKSpriteNode 渐变

AVAssetExportSession始终无法导出

使用 AVAssetExportSession 合成和导出后视频时长发生变化

HTML中 CSS+DIV+JS 怎么实现图片切换的特效呢, 百叶窗,淡出淡进之类的呢?