Pregunta

Una grabadora de voz no necesita audio PCM lineal sin comprimir. El AMR comprimido haría bien. El marco de iPhone creado para grabar audio es bastante simple, pero los únicos ejemplos que he encontrado para configurar el formato de audio (que provienen de Apple) usan LinearPCM. He intentado varias otras combinaciones de valores, pero parece que no funciona nada.

¿Alguien tiene algún código que realmente grabe AMR ?

Editar: El formato AMR es una de las opciones para configurar el tipo de datos, pero las otras opciones (tamaño de paquete, tamaño de trama, etc.) no parecen coincidir, independientemente de lo que haya configurado.

Editar: Esto es lo que tengo para la versión 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;
¿Fue útil?

Solución

El códec AMR NO es compatible con la codificación / grabación en el iPhone, aunque sí es compatible con la reproducción: esta es la razón por la que existe la constante kAudioFormatAMR.

API oficial dice que los formatos de codificación compatibles son :

  • ALAC (Apple Lossless) ~ > kAudioFormatAppleLossless
  • iLBC (códec de baja tasa de bits de Internet, para voz) ~ > kAudioFormatiLBC
  • IMA / ADPCM (IMA4) ~ > kAudioFormatAppleIMA4
  • PCM lineal ~ > kAudioFormatLinearPCM
  • & # 181; -law ~ > kAudioFormatULaw
  • a-law ~ > kAudioFormatALaw

Puede probar uno de estos formatos o usar un codificador AMR de código abierto como goldenmean sugiere.

editar : Enlace oficial actualizado de la API

Otros consejos

Para actualizar el enlace de olegueret a la documentación oficial (¿por qué ocultan estas cosas?)

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

Creo que el formato de códec AMR no es compatible con mi aplicación de grabación de voz de iPhone.

Puede tratarse de integrar una implementación de código abierto de codificador AMR en el marco de la aplicación de iPhone de Apple e intentar hacer que la grabadora de voz almacene el audio en formato codificado AMR. (No sé si eso es permitido por Apple por su NDA / licencia).

-AD

Puede grabar audio en un búfer PCM lineal sin comprimir (circular o en anillo) y, en otro hilo, convertir datos en este búfer, utilizando su propio motor de compresión AMR (u otro), antes de guardar los datos de audio comprimido en un archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top