I am trying to cut an audio file for an iPhone project. I can cut it and save it, but any disappearance / disappearance that I am trying to apply does not work, the sound file just remains, but does not fade.
I am using the following code:
// // NO PROBLEMS TO SEE HERE, MOVE ON // NSArray *documentsFolders = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); int currentFileNum = 10; NSURL *url = [NSURL fileURLWithPath: [[documentsFolders objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%d.%@", AUDIO_SOURCE_FILE_NAME ,currentFileNum, AUDIO_SOURCE_FILE_EXTENSION ]]]; NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:AVURLAssetPreferPreciseDurationAndTimingKey]; AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:url options:options]; AVAssetExportSession* exporter = [AVAssetExportSession exportSessionWithAsset:asset presetName:AVAssetExportPresetAppleM4A]; for (NSString* filetype in exporter.supportedFileTypes) { if ([filetype isEqualToString:AVFileTypeAppleM4A]) { exporter.outputFileType = AVFileTypeAppleM4A; break; } } if (exporter.outputFileType == nil) { NSLog(@"Needed output file type not found? (%@)", AVFileTypeAppleM4A); //return; } NSString* outPath = [[documentsFolders objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"%@%d.%@", AUDIO_CUTTED_FILE_NAME ,currentFileNum, AUDIO_SOURCE_FILE_EXTENSION ]]; NSURL* const outUrl = [NSURL fileURLWithPath:outPath]; exporter.outputURL = outUrl; float endTrimTime = CMTimeGetSeconds(asset.duration); float startTrimTime = fminf(AUDIO_DURATION, endTrimTime); CMTime startTrimCMTime=CMTimeSubtract(asset.duration, CMTimeMake(startTrimTime, 1)); exporter.timeRange = CMTimeRangeMake(startTrimCMTime, asset.duration); // // TRYING TO APPLY FADEIN FADEOUT, NOT WORKING, NO RESULTS, "CODE IGNORED" // AVMutableAudioMix *exportAudioMix = [AVMutableAudioMix audioMix]; NSMutableArray* inputParameters = [NSMutableArray arrayWithCapacity:1]; CMTime startFadeInTime = startTrimCMTime; CMTime endFadeInTime = CMTimeMake(startTrimTime+1, 1); CMTime startFadeOutTime = CMTimeMake(endTrimTime-1, 1); CMTime endFadeOutTime = CMTimeMake(endTrimTime, 1); CMTimeRange fadeInTimeRange = CMTimeRangeFromTimeToTime(startFadeInTime, endFadeInTime); CMTimeRange fadeOutTimeRange = CMTimeRangeFromTimeToTime(startFadeOutTime, endFadeOutTime); AVMutableAudioMixInputParameters *exportAudioMixInputParameters = [AVMutableAudioMixInputParameters audioMixInputParameters]; [exportAudioMixInputParameters setVolume:0.0 atTime:CMTimeMakeWithSeconds(startTrimTime-0.01, 1)]; [exportAudioMixInputParameters setVolumeRampFromStartVolume:0.0 toEndVolume:1.0 timeRange:fadeInTimeRange]; [exportAudioMixInputParameters setVolumeRampFromStartVolume:1.0 toEndVolume:0.0 timeRange:fadeOutTimeRange]; [inputParameters insertObject:exportAudioMixInputParameters atIndex:0]; exportAudioMix.inputParameters = inputParameters; exporter.audioMix = exportAudioMix; [exporter exportAsynchronouslyWithCompletionHandler:^(void) { NSString* message; switch (exporter.status) { case AVAssetExportSessionStatusFailed: message = [NSString stringWithFormat:@"Export failed. Error: %@", exporter.error.description]; [asset release]; break; case AVAssetExportSessionStatusCompleted: { [asset release]; [self reallyConvert:currentFileNum]; message = [NSString stringWithFormat:@"Export completed: %@", outPath]; break; } case AVAssetExportSessionStatusCancelled: message = [NSString stringWithFormat:@"Export cancelled!"]; [asset release]; break; default: NSLog(@"Export 4 unhandled status: %d", exporter.status); [asset release]; break; } }];
source share