В этом случае какой аудио файл / формат мне следует использовать? Могу ли я использовать .avi файлы?
Вы можете выбрать сжатый или несжатый формат. Распространенные несжатые форматы включают Wav и AIFF. CAF может представлять сжатые и несжатые данные. .avi не вариант (предлагается ОС).
Если файлы имеют большой размер и пространство для хранения (на диске) является проблемой, вы можете рассмотреть формат AAC, сохраненный в CAF (или просто .m4a). Для большинства приложений достаточно 16-битных сэмплов, и вы также можете сэкономить место, память и процессор, сохранив эти файлы с соответствующей частотой дискретизации (см .: CD с частотой 44,1 кГц).
Поскольку интерфейс ExtAudioFile абстрагирует процесс преобразования, вам не нужно менять свою программу для сравнения различий в размерах и скорости сжатых и несжатых форматов для вашего дистрибутива (AAC в CAF подойдет для обычных приложений).
Несжатый звук качества CD будет потреблять около 5,3 МБ в минуту на канал. Таким образом, если у вас есть 2 стереофонических аудиофайла, каждый по 3 минуты, и 3-минутный буфер назначения, ваша потребность в памяти составит около 50 МБ.
Поскольку у вас есть «минуты» аудио, вам, возможно, придется избегать одновременной загрузки всех аудиоданных в память. Чтобы читать, манипулировать и комбинировать аудио, вам понадобится несжатое представление для работы в памяти, поэтому форматы сжатия здесь не помогут. Кроме того, преобразование сжатого представления в pcm требует значительного количества ресурсов; чтение сжатого файла, хотя и меньше байтов, может занять больше (или меньше) времени.
Как программно добавить второй звук после динамического времени, установленного для первого аудиофайла? Например: если общее время первого аудио составляет 2 минуты, мне может потребоваться смешать второй аудиофайл (аудио 3 секунды) где-то в 1 минуте, или 1,5 минуте, или 55 секундах первого файла. Его динамика.
Чтобы прочитать файлы и преобразовать их в формат, который вы хотите использовать, используйте API-интерфейсы ExtAudioFile - это преобразует вас в целевой формат примера для вас. Типичные представления PCM в памяти включают SInt32
, SInt16
и float
, но они могут сильно различаться в зависимости от приложения и аппаратного обеспечения (помимо iOS). API-интерфейсы ExtAudioFile также при необходимости будут преобразовывать сжатые форматы в PCM.
Ваши входные аудиофайлы должны иметь одинаковую частоту дискретизации. Если нет, вам придется пересчитать аудио, сложный процесс, который также требует много ресурсов (если все сделано правильно / точно). Если вам требуется поддержка повторной выборки, удвойте время, отведенное на выполнение этой задачи (не описывая здесь процесс).
Чтобы добавить звуки, вы должны запросить сэмплы PCM из файлов, обработать их и записать в выходной файл (или в буфер в памяти).
Чтобы определить, когда добавлять другие звуки, вам нужно получить частоты дискретизации для входных файлов (через ExtAudioFileGetProperty). Если вы хотите записать второй звук в буфер назначения на 55 с, то вы начнете добавлять звуки с номером семпла SampleRate * 55
, где SampleRate
- частота семплирования файлов, которые вы читаете.
Для микширования аудио вы просто будете использовать эту форму (псевдокод):
mixed[i] = fileA[i] + fileB[i];
но вы должны быть уверены, что избегаете переполнения / переполнения и других арифметических ошибок. Как правило, вы будете выполнять этот процесс, используя некоторое целочисленное значение, потому что вычисления с плавающей запятой могут занять много времени (когда их так много). Для некоторых приложений вы можете просто перемещать и добавлять, не беспокоясь о переполнении - это эффективно уменьшит каждый ввод наполовину перед их добавлением. Амплитуда результата будет равна половине. Если у вас есть контроль над содержимым файлов (например, они все связаны как ресурсы), вы можете просто убедиться, что ни один из пиковых отсчетов в файлах не превысил половину значения полной шкалы (около -6dBFS). Конечно, сохранение в формате float решит эту проблему за счет повышения требований к процессору, памяти и файловому вводу / выводу.
На этом этапе у вас будет 2 открытых файла для чтения и один открытый для записи, затем несколько небольших временных буферов для обработки и микширования входных данных перед записью в выходной файл. Вы должны выполнять эти запросы в блоках для эффективности (например, прочитать 1024 образца из каждого файла, обработать образцы, записать 1024 образца). API не гарантируют многого в отношении кеширования и буферизации для эффективности.
Как сохранить окончательный выходной аудиофайл на устройстве? Если я сохраню аудиофайл где-нибудь программно, могу ли я воспроизвести его снова?
API ExtAudioFile подойдут для ваших нужд чтения и записи. Да, вы можете прочитать / воспроизвести его позже.