gpt4 book ai didi

iphone - AVMutableAudioMix 和 AVAssetExportSession

转载 作者:行者123 更新时间:2023-12-03 20:57:27 26 4
gpt4 key购买 nike

我想为导出 session 制作淡入/淡出效果。但这不起作用。请帮助我!

修剪效果完美!但淡入/淡出则不然:(((

    NSURL *assetURL = [song valueForProperty:MPMediaItemPropertyAssetURL];  
AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:assetURL options:nil];

AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]
initWithAsset:songAsset
presetName:AVAssetExportPresetPassthrough];

NSArray *tracks = [songAsset tracksWithMediaType:AVMediaTypeAudio];
AVAssetTrack *track = [tracks objectAtIndex:0];
id desc = [track.formatDescriptions objectAtIndex:0];
const AudioStreamBasicDescription *audioDesc = CMAudioFormatDescriptionGetStreamBasicDescription((CMAudioFormatDescriptionRef)desc);
FourCharCode formatID = audioDesc->mFormatID;


// trim track
CMTime startTrimTime = CMTimeMakeWithSeconds(startTime, 1);
CMTime endTrimTime = CMTimeMakeWithSeconds(endTime, 1);
CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(startTrimTime, endTrimTime);
exportSession.timeRange = exportTimeRange;

//add fade in, fade out
CMTime startFadeInTime = startTrimTime;
CMTime endFadeInTime = CMTimeMakeWithSeconds(startTime + 4.0, 1);
CMTimeRange fadeInTimeRange = CMTimeRangeFromTimeToTime(startFadeInTime, endFadeInTime);

CMTime startFadeOutTime = CMTimeMakeWithSeconds(endTime - 4.0, 1);
CMTime endFadeOutTime = endTrimTime;
CMTimeRange fadeOutTimeRange = CMTimeRangeFromTimeToTime(startFadeOutTime, endFadeOutTime);

AVMutableAudioMix *exportAudioMix = [AVMutableAudioMix audioMix];

//AVMutableAudioMixInputParameters *exportAudioMixInputParameters = [AVMutableAudioMixInputParameters audioMixInputParameters];
AVMutableAudioMixInputParameters *exportAudioMixInputParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:track];

[exportAudioMixInputParameters setVolumeRampFromStartVolume:0.0 toEndVolume:1.0 timeRange:fadeInTimeRange];
[exportAudioMixInputParameters setVolumeRampFromStartVolume:1.0 toEndVolume:0.0 timeRange:fadeOutTimeRange];

exportAudioMix.inputParameters = [NSArray arrayWithObject:exportAudioMixInputParameters];
exportSession.audioMix = exportAudioMix;
...

myDeleteFile(filePath);
exportSession.outputURL = [NSURL fileURLWithPath:filePath];


[exportSession exportAsynchronouslyWithCompletionHandler:^{

if (exportSession.status == AVAssetExportSessionStatusCompleted) {
NSLog(@"export session completed");
//
//return YES;
} else {
NSLog(@"export session error");
//return NO;
}

[exportSession release];
}];

最佳答案

您可以尝试添加这一行:

[exportAudioMixInputParameters setVolume:0.0 atTime:CMTimeMakeWithSeconds(start-0.01, 1)];

之前:

[exportAudioMixInputParameters setVolumeRampFromStartVolume:0.0 toEndVolume:1.0 timeRange:fadeInTimeRange];

示例代码:

//trim
CMTime startTrimTime = CMTimeMakeWithSeconds(start, 1);
CMTime endTrimTime = CMTimeMakeWithSeconds(start+length, 1);
CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(startTrimTime, endTrimTime);
exportSession.timeRange = exportTimeRange;


//add fade in, fade out
AVMutableAudioMix *exportAudioMix = [AVMutableAudioMix audioMix];

NSMutableArray* inputParameters = [NSMutableArray arrayWithCapacity:1];
NSArray *tracks = [asset tracksWithMediaType:AVMediaTypeAudio];
for(AVAssetTrack *track in tracks) {
//NSLog(@"track:%@", track);
CMTime startFadeInTime = startTrimTime;
CMTime endFadeInTime = CMTimeMakeWithSeconds(start + 4.0, 1);
CMTimeRange fadeInTimeRange = CMTimeRangeFromTimeToTime(startFadeInTime, endFadeInTime);

CMTime startFadeOutTime = CMTimeMakeWithSeconds(start+length - 4.0, 1);
CMTime endFadeOutTime = endTrimTime;
CMTimeRange fadeOutTimeRange = CMTimeRangeFromTimeToTime(startFadeOutTime, endFadeOutTime);

//AVMutableAudioMixInputParameters *exportAudioMixInputParameters = [AVMutableAudioMixInputParameters audioMixInputParameters];
AVMutableAudioMixInputParameters *exportAudioMixInputParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:track];

[exportAudioMixInputParameters setVolume:0.0 atTime:CMTimeMakeWithSeconds(start-0.01, 1)];
[exportAudioMixInputParameters setVolumeRampFromStartVolume:0.0 toEndVolume:1.0 timeRange:fadeInTimeRange];
[exportAudioMixInputParameters setVolumeRampFromStartVolume:1.0 toEndVolume:0.0 timeRange:fadeOutTimeRange];

[inputParameters addObject:exportAudioMixInputParameters];
}

exportAudioMix.inputParameters = inputParameters;
exportSession.audioMix = exportAudioMix;

关于iphone - AVMutableAudioMix 和 AVAssetExportSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4025950/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com