将两个audio文件合并为一个目标c
可能重复:
合并iPhone上的audio文件
我试图将2个audio文件合并成一个文件。 例如:file1.mp3 – 它说“我是”。 file2.mp3 – 它说“乔治”。 我想得到一个组合文件file3.mp3,它会说“我是乔治”。
我如何在Objective-C中做到这一点?
看AVFoundation框架…有很多方法,但最简单的方法可以是…
- 为这两个文件创buildAVAsset (使用AVURLAsset子类),
- alloc AVMutableComposition ( 构图 ),
- 将typesAVMediaTypeAudio的AVMutableCompositionTrack添加到合成
[composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
- 从第一个AVAsset获得跟踪并添加AVMutableCompositionTrack ,
- 从第二个AVAsset获取音轨并将其追加到AVMutableCompositionTrack ,
- 然后用你的作品创buildAVAssetExportSession并导出它。
简单的描述,但你得到一个线索。 取决于你有多less轨道,你想使用什么样的效果等等。
如果你想看到一些真实的代码,打开AVMovieExporter例子,复制这个代码,并删除video的东西,只留下audio。
您可以合并2个MP3文件为: –
NSMutableData *part1 = [NSMutableData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"file1" ofType: @"mp3"]]; NSMutableData *part2 = [NSMutableData dataWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"file2" ofType: @"mp3"]]; [part1 appendData: part2]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDir = [paths objectAtIndex:0]; NSString *myMp3 = [documentsDir stringByAppendingPathComponent: @"final.mp3"]; [part1 writeToFile:myMp3 atomically:YES];
这样你可以直接将mp3文件添加到一个。 我已经在我的一个应用程序中使用它。 对于其他格式的文件,你必须分别更新文件的头文件,但是使用mp3相对简单些。
更新:
那么你还必须注意,你试图连接的MP3文件的比特率是相同的。 如果他们不同,他们会合并,但只能部分或根本不能。 所以请确保比特率相互同步。
另一种方法是使用AVAssetReader将所有mp3文件转换为未压缩的audio文件,或者如果audio足够短,甚至可以使用内存缓冲区。 未压缩的PCM数据可以根据需要进行串接,混合或交叉淡入。 然后使用AVAssetWriter将结果写入某种压缩文件格式(如aac)(如果需要的话)。