Объедините два аудио файла в один в объективе c
Возможный дубликат:
объединить аудио файлы на iPhone
Я пытаюсь объединить 2 аудиофайла в один файл. Например: file1.mp3 - там написано "Я есть". file2.mp3 - там написано "Джордж". Я хочу получить объединенный файл file3.mp3, в котором будет указано "Я - Джордж".
Как я могу сделать это в объективе-C?
3 ответа
Посмотрите на структуру AVFoundation... Есть много способов, но самый простой для вас может быть...
- создать AVAsset для обоих файлов (используйте подкласс AVURLAsset),
- выделить AVMutableComposition (состав),
- добавить AVMutableCompositionTrack с типом AVMediaTypeAudio в композицию
[composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
- получить трек (ы) из первого AVAsset и добавить его AVMutableCompositionTrack,
- получить треки из второго AVAsset и добавить его в AVMutableCompositionTrack,
- затем создайте AVAssetExportSession со своей композицией и экспортируйте ее.
Упрощенное описание, но вы получите подсказку. Зависит от того, сколько у вас треков, какие эффекты вы хотите использовать и т. Д.
Если вы хотите увидеть настоящий код, откройте пример 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), если это необходимо.