美文网首页
iOS音轨合成

iOS音轨合成

作者: 倪大头 | 来源:发表于2018-08-20 14:01 被阅读178次

需求是录音+bgm,用AVMutableComposition创建录音和bgm的轨道(AVMutableCompositionTrack),两个音轨分别生成混音素材(AVMutableAudioMixInputParameters),再把两个素材添加到AVMutableAudioMix里,用AVAssetExportSession导出,目前导出格式只找到M4A(AVFileTypeAppleM4A)

//录音url
NSString *url = [self getFullFilePathInDocuments:@"record" fileName:@"selfRecord.caf"];

NSString *outputPath = [self getFullFilePathInDocuments:@"record" fileName:@"recordWithBgm.m4a"];
//存放音频混合参数的数组
NSMutableArray *mixParams = [NSMutableArray array];
//用来添加track轨道的混合素材
AVMutableComposition *composition = [[AVMutableComposition alloc]init];
    
//录音的轨道
AVMutableCompositionTrack *recordMutableTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
AVURLAsset *recordAsset = [[AVURLAsset alloc]initWithURL:[NSURL fileURLWithPath:url] options:nil];
AVAssetTrack *recordTrack = recordAsset.tracks.firstObject;
NSError *recordInsertError;
[recordMutableTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, recordAsset.duration) ofTrack:recordTrack atTime:kCMTimeZero error:&recordInsertError];
if (recordInsertError) {
    NSLog(@"recordInsertError  %@",recordInsertError.description);
}
//从录音轨道中生成一个混音素材,添加到数组中
AVMutableAudioMixInputParameters *recordMix = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:recordMutableTrack];
//录音音量
[recordMix setVolume:100 atTime:CMTimeMake(0, 1)];
[mixParams appendObject:recordMix];
    
//bgm的轨道
AVMutableCompositionTrack *bgmMutableTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
AVURLAsset *bgmAsset = [[AVURLAsset alloc]initWithURL:[NSURL fileURLWithPath:self.bgmUrlStr] options:nil];
AVAssetTrack *bgmTrack = bgmAsset.tracks.firstObject;
NSError *bgmInsertError;
CMTimeRange insertRange = CMTimeRangeMake(kCMTimeZero, recordAsset.duration);
if (progressSlider.value > 0) {
    CMTime currentTime = CMTimeMake(bgmAsset.duration.value / 100 * progressSlider.value, bgmAsset.duration.timescale);
    insertRange = CMTimeRangeMake(currentTime, recordAsset.duration);
}
[bgmMutableTrack insertTimeRange:insertRange ofTrack:bgmTrack atTime:kCMTimeZero error:&bgmInsertError];
if (bgmInsertError) {
    NSLog(@"bgmInsertError  %@",bgmInsertError.description);
}
AVMutableAudioMixInputParameters *bgmMix = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:bgmMutableTrack];
//bgm音量
[bgmMix setVolume:currentVolume / 5 atTime:CMTimeMake(0, 1)];
//插入bgm
[mixParams appendObject:bgmMix];
    
//创建一个可变的音频混音
AVMutableAudioMix *audioMix = [[AVMutableAudioMix alloc]init];
//将两个混音素材添加到混音对象中
audioMix.inputParameters = mixParams;
    
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]initWithAsset:composition presetName:AVAssetExportPresetAppleM4A];
exportSession.outputFileType = AVFileTypeAppleM4A;
exportSession.audioMix = audioMix;
exportSession.outputURL = [NSURL fileURLWithPath:outputPath];
[exportSession exportAsynchronouslyWithCompletionHandler:^{
    dispatch_async(dispatch_get_main_queue(), ^{
        [hud hideAnimated:YES];
        [self.navigationController popViewControllerAnimated:YES];
    });
    if (exportSession.status == AVAssetExportSessionStatusCompleted) {
        NSLog(@"合成完毕  %f MB", [[NSData dataWithContentsOfURL:[NSURL fileURLWithPath:outputPath]] length] / 1024.00 / 1024.00);
    }
}];

相关文章

  • iOS音轨合成

    需求是录音+bgm,用AVMutableComposition创建录音和bgm的轨道(AVMutableCompo...

  • 36.音轨合成

    直接上代码了

  • ios学习总结

    2019-01-07 1、ios音轨变更通知(AVAudioSessionRouteChangeNotificat...

  • iOS音轨合成(音频与音频,音频与视频)

    今天和大家一起分享关于音轨合成的坑(套路!全TM是套路!走一步套一路) 理论部分: 我们需要用到AVURLAsse...

  • iOS语音合成

    标签:ios语音合成 苹果公司在iOS7中推出了语音合成的技术,无需网络环境也可以实现语音合成。 iOS7语音合成...

  • 分享个专业录音工具

    分享个专业音频编辑制作软件:Cooledit 2.0,可以支持多音轨编辑,耳麦或者系统声音录制,音频裁剪、合成。以...

  • 音轨

    “就如同,你知道音乐它有没有感情呢?” “音乐没有感情,感情是由音乐引导出来的。” “那为什么,你会有感情呢?” ...

  • 04_MoviePy混合剪辑_中文文档

    目录 视频合成,也称为非线性编辑,是在新剪辑中一起播放多个剪辑的事实。 开始之前,请注意,视频剪辑通常带有音轨和遮...

  • VideoJS-轨道-音频轨道

    音频轨道Audio Tracks 音轨允许为视频选择替代音频,可为用户提供备用音轨选择,以便播放主轨之外的音轨。v...

  • AVSpeechUtterance

    AVSpeechUtterance是iOS中语音合成的类。 输入iOS支持的语言

网友评论

      本文标题:iOS音轨合成

      本文链接:https://www.haomeiwen.com/subject/nyxliftx.html