Объедините два аудио файла в один в объективе 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), если это необходимо.

Другие вопросы по тегам