Как я могу записать аудиоформат AMR на iPhone? - PullRequest
13 голосов
/ 10 ноября 2008

Диктофон не нуждается в несжатом аудио Linear PCM. Сжатый AMR будет хорошо. Фреймворк iPhone, созданный для записи аудио, достаточно прост, но единственные примеры, которые я нашел для настройки аудиоформата (который идет от Apple), используют LinearPCM. Я пробовал различные другие комбинации значений, но, похоже, ничего не получалось.

У кого-нибудь есть код, который на самом деле записывает AMR?

Edit: Формат AMR является одним из параметров для установки типа данных, но другие параметры (размер пакета, размер кадра и т. Д.), Похоже, не совпадают, независимо от того, что я их установил.

Редактировать: Вот что у меня есть для версии PCM:

/*
 If we want to use AMR instead of PCM:
 AMR Format:
 Sampling Frequency: 8 kHz/13-bit (160 samples for 20 ms frames), filtered to 200-3400 Hz
 eight source codecs :  12.2, 1.2, 7.95, 7.40, 6.70, 5.90, 5.15, 4.75 kbit/s
 generated frame length: 244, 204,  159,  148,  134,  118,  103,   95 bits per frame
 */
format->mFormatID = kAudioFormatLinearPCM;
format->mSampleRate = 8000.0;    //8 kHz
format->mFramesPerPacket = 1;    //1 frame per packet
format->mChannelsPerFrame = 1;    //Mono
format->mBytesPerFrame = 2;        //8/bits per frame (round up)
format->mBytesPerPacket = 2;    //Same as bytes per frame
format->mBitsPerChannel = 16;    //16-bit audio
format->mReserved = 0;            //always 0
format->mFormatFlags = kLinearPCMFormatFlagIsBigEndian |
                       kLinearPCMFormatFlagIsSignedInteger |
                       kLinearPCMFormatFlagIsPacked;

Ответы [ 4 ]

13 голосов
/ 05 марта 2009

Кодек AMR НЕ поддерживается для кодирования / записи на iPhone, хотя и поддерживается для воспроизведения: по этой причине существует константа kAudioFormatAMR.

Официальный API говорит, что поддерживаются следующие форматы кодирования:

  • ALAC (Apple Lossless) ~> kAudioFormatAppleLossless
  • iLBC (интернет-кодек с низким битрейтом, для речи) ~> kAudioFormatiLBC
  • IMA / ADPCM (IMA4) ~> kAudioFormatAppleIMA4
  • линейный PCM ~> kAudioFormatLinearPCM
  • µ-закон ~> kAudioFormatULaw
  • a-law ~> kAudioFormatALaw

Вы можете попробовать один из этих форматов или использовать кодировщик AMR с открытым исходным кодом, как подсказывает goldenmean .

edit : обновлена ​​официальная ссылка API

4 голосов
/ 30 сентября 2010

Чтобы обновить ссылку olegueret на официальную документацию (почему они скрывают это?)

http://developer.apple.com/library/ios/#qa/qa2008/qa1615.html

2 голосов
/ 10 ноября 2008

Я полагаю, формат кодека AMR не поддерживается моим приложением для записи голоса на iPhone.

Может быть, можно попробовать интегрировать некий открытый кодировщик AMR в среду приложения Apple для яблок и попытаться заставить диктофон хранить звук в кодированном формате AMR. (Я не знаю, разрешено ли это Apple по NDA / лицензии).

-AD

1 голос
/ 20 апреля 2012

Вы можете записать звук в несжатый буфер Linear PCM (циклический или кольцевой) и в другом потоке преобразовать данные в этом буфере, используя собственный механизм сжатия AMR (или другой), перед сохранением сжатых аудиоданных в файл.

...