Вопрос

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

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

Редактировать: Формат 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;
Это было полезно?

Решение

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

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

  • ALAC (Apple без потерь) ~> kAudioFormatAppleLossless (Без потерь Apple)
  • iLBC ( иЛБК ) (интернет-кодек с низким битрейтом, для речи) ~> kAudioFormatiLBC
  • IMA/ADPCM (IMA4) ~> Каудиоформат appleima4
  • линейный PCM ~> Каудиоформат линейныйарсм
  • µ-закон ~> kaudioформатирование
  • a-закон ~> kAudioFormatALaw ( Каудиоформат)

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

Редактировать:Обновленная официальная ссылка на api

Другие советы

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

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

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

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

-РЕКЛАМА

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top