我正在尝试将2个音频文件合并为一个文件。 例如:file1.mp3 - 它说“我是”。 file2.mp3 - 它说“乔治”。 我想得到一个组合文件file3.mp3,它会说“我是乔治”。
如何在Objective-C中执行此操作?
答案 0 :(得分:12)
查看 AVFoundation 框架......有很多方法,但最简单的方法可以是......
[composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
简化说明,但是你得到了一个线索。取决于你有多少曲目,你想要使用什么样的效果,等等。
如果您确实想查看一些真实的代码,请打开 AVMovieExporter 示例,复制此代码并删除视频内容并仅在此处保留音频。
答案 1 :(得分:1)
您可以将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文件的比特率是一样的。如果它们不同,它们将合并,但只能部分播放,或者根本不播放。因此,请确保比特率彼此同步。
答案 2 :(得分:0)
另一种方法是使用AVAssetReader将所有mp3文件转换为未压缩的音频文件,如果音频足够短,甚至可以转换为内存缓冲区。然后,可以根据需要将未压缩的PCM数据连接,混合或交叉淡化。然后使用AVAssetWriter将结果写入某种压缩文件格式(如aac),如果需要的话。