可能重复:
在 iPhone 上合并音频文件
我正在尝试将 2 个音频文件合并为一个文件。例如:file1.mp3 - 它说“我是”。file2.mp3 - 它说“乔治”。我想得到一个组合文件 file3.mp3,上面写着“我是乔治”。
我如何在 Objective-C 中做到这一点?
可能重复:
在 iPhone 上合并音频文件
我正在尝试将 2 个音频文件合并为一个文件。例如:file1.mp3 - 它说“我是”。file2.mp3 - 它说“乔治”。我想得到一个组合文件 file3.mp3,上面写着“我是乔治”。
我如何在 Objective-C 中做到这一点?
看看AVFoundation框架......有很多方法,但对你来说最简单的一种可以是......
[composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
简化的描述,但你得到一个线索。取决于你有多少轨道,你想使用什么样的效果等等。
如果您确实想查看一些真实的代码,请打开AVMovieExporter示例,复制此代码并删除视频内容并仅将音频保留在那里。
您可以将 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 文件转换为未压缩的音频文件,如果音频足够短,甚至可以转换为内存缓冲区。然后可以根据需要将未压缩的 PCM 数据连接、混合或交叉淡入淡出。然后根据需要使用 AVAssetWriter 将结果写入某种压缩文件格式(例如 aac)。