Подтвердить что ты не робот

Как я могу записать аудиоформат AMR на iPhone?

Диктофон не требует несжатого аудиосигнала 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;
4b9b3361

Ответ 1

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

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

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

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

изменить: обновлено Официальная ссылка api

Ответ 3

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

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

-AD

Ответ 4

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