Как записать что-то кроме Linear PCM на iPhone - PullRequest
5 голосов
/ 24 марта 2009

Я с трудом пытаюсь записать что-то, кроме линейного PCM на iPhone :-( Все образцы, которые я нашел (книги SDK SpeakHere, Zdziarski и Sadun, а также trailsinthesand.com), используют линейный PCM, но я бы предпочел вместо этого широко используемый сжатый формат (без ima4 или любого другого имени ...).

Я просто не могу понять, как настроить пример кода, который будет использоваться, например, AAC, MP3 или AMR. Любые предложения и советы о том, как это сделать, очень ценятся!

(Кстати, я не думаю, что MP3-кодер или AMR-кодер доступны из-за проблем с лицензированием, но AAC существует, или ???)

Редактирование / обновление: Я наткнулся на следующий текст в «Руководстве по программированию приложений iPhone» для Apple, 2009-01-06, стр. 137, раздел: Запись звука:
«Вы можете записывать звук в любом из форматов, перечисленных в« Предпочтительные форматы аудио в iPhone OS »(стр. 140)», и в качестве предпочтительных форматов аудио на стр. 140: «Для сжатого звука при воспроизведении одного звука за раз, и когда Вам не нужно воспроизводить звук одновременно с приложением iPod, используйте формат AAC, упакованный в файл CAF или m4a. "
Таким образом, я интерпретирую это как четкое указание на то, что действительно, не только возможно, но и даже предпочтительно, записывать звук в формате AAC, обернутом в файл m4a, что является именно тем, что я хочу. Но все же я не могу этого достичь?!

Спасибо, / John

Ответы [ 5 ]

4 голосов
/ 24 марта 2009

Продолжайте смотреть на эти документы. В разделе «Core Audio Essentials» раздел «Подключаемые модули Core Audio: блоки аудио и кодеки» отмечает, что:

iPhone OS содержит запись кодеки, перечисленные в таблице 2-5. Как вы можете видите, ни MP3, ни AAC запись имеется в наличии. Это связано с высокой загрузкой процессора накладные расходы, и, как следствие, батарея сток, из этих форматов.

В таблице 2-5 перечислены несколько форматов, но поскольку текстовые примечания не включают в себя те, которые вы ищете. Если вы хотите эти форматы, вам придется принести свой собственный кодер.

2 голосов
/ 02 сентября 2010

Это возможно в iPhone 3GS и iPod 2-го поколения и выше. У них есть аппаратный энкодер для AAC. Для этого есть пример проекта Apple, который делает именно то, что вы хотите:

iPhoneExtAudioFileConvertTest

1 голос
/ 05 августа 2009

Подсказка по использованию faac для преобразования файлов линейного PCM с iPhone на выходе в формат aac:

Я экспериментально обнаружил, что вы должны использовать флаг -X в версии faac для командной строки (работающей в Mac OS X), которая «меняет входные байты». (Я думаю, это меняет порядок байтов.)

Так, например, если вы записали аудио файл linear.pcm на вашем iPhone, вы можете запустить:

faac -XP linear.pcm

на вашем Mac, чтобы преобразовать это в aac файл linear.aac.

Полагаю, это означает, что вы можете использовать faac в своем приложении для преобразования, если хотите, так как это библиотека C.

Также обратите внимание, что технически файлы, выводимые аудиослужбами iPhone, обычно представляют собой файлы CAF, Core Audio Format, который является своего рода форматом-оберткой для множества возможных кодировок: Документы Apple по CAF . Приведенная выше командная строка прекрасно работает для меня, хотя linear.pcm начинается с заголовка caff.

0 голосов
/ 05 сентября 2011

Почему бы не попробовать TPAACAudioConverter , написанный легендарным Майклом Тайсоном?

TPAACAudioConverter - это простой класс Objective C, который выполняет преобразование любого аудиофайла в кодировку AAC m4a, асинхронно с делегатом или преобразует любое аудио, предоставляемое классом источника данных (которая обеспечивает запись прямо в AAC).

0 голосов
/ 24 марта 2009

Вы пробовали Lame mp3-кодировщик? Или faac / faad AAC кодеки? Вы можете встроить их в ffmpeg для еще большего количества аудиокодеков.

...