How to mix 2 audio files in ios using AVFoundation
I am trying to mix two audio files into one, the code does not work for
me.. can anyone help me on this ?
NSString *documentDirectory =
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,
YES) objectAtIndex:0];
NSURL *audioURL = [[NSBundle mainBundle] URLForResource:@"sample"
withExtension:@"mp3"];
NSURL *audioURL2 = [[NSBundle mainBundle] URLForResource:@"sample2"
withExtension:@"mp3"];
AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audioURL
options:nil];
AVURLAsset* audioAsset2 = [[AVURLAsset alloc]initWithURL:audioURL2
options:nil];
AVMutableComposition* mixComposition = [AVMutableComposition composition];
AVMutableCompositionTrack *compositionCommentaryTrack = [mixComposition
addMutableTrackWithMediaType:AVMediaTypeAudio
preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionCommentaryTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,
audioAsset.duration)
ofTrack:[[audioAsset
tracksWithMediaType:AVMediaTypeAudio]
objectAtIndex:0]
atTime:kCMTimeZero error:nil];
AVMutableCompositionTrack *compositionAudioTrack = [mixComposition
addMutableTrackWithMediaType:AVMediaTypeAudio
preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero,
audioAsset.duration)
ofTrack:[[audioAsset2
tracksWithMediaType:AVMediaTypeAudio]
objectAtIndex:0]
atTime:kCMTimeZero error:nil];
AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc]
initWithAsset:mixComposition
presetName:AVAssetExportPresetPassthrough];
NSString *soundFilePath = [documentDirectory
stringByAppendingPathComponent: @"audioJoined.m4a"];
NSLog(@"soundFilePath:%@", soundFilePath);
NSURL *savetUrl = [NSURL fileURLWithPath:soundFilePath];
if ([[NSFileManager defaultManager] fileExistsAtPath:soundFilePath])
{
[[NSFileManager defaultManager] removeItemAtPath:soundFilePath
error:nil];
}
_assetExport.outputFileType = @"com.apple.m4a-audio";
_assetExport.outputURL = savetUrl;
_assetExport.shouldOptimizeForNetworkUse = YES;
[_assetExport exportAsynchronouslyWithCompletionHandler:
^(void ) {
NSLog(@"fileSaved !");
}
];
No comments:
Post a Comment