Pregunta

Actualmente uso las clases AudioTrack y Audiorecord en Android.

Uso los datos de PCM puro pero me preguntaba cuáles son mis opciones para otros códecs.

De esta página ¿Parece que solo puedo codificar y decodificar usando la banda estrecha AMR?

Actualmente configuré las clases de audio de la siguiente manera:

arec = new AudioRecord(MediaRecorder.AudioSource.MIC,
                     11025,
                     AudioFormat.CHANNEL_CONFIGURATION_MONO,
                     AudioFormat.ENCODING_PCM_16BIT,
                     buffersize);

atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
                     11025,
                     AudioFormat.CHANNEL_CONFIGURATION_MONO,
                     AudioFormat.ENCODING_PCM_16BIT,
                     buffersize,
                     AudioTrack.MODE_STREAM);

Entonces, mi pregunta es ¿cómo cambio la codificación de PCM a uno de los otros códecs compatibles?

Cuando intento cambiar coding_pcm_16bit en audioformat, solo obtengo las opciones de codificación predeterminada o no válida junto con las opciones de PCM.

Cualquier enlace a tutoriales sobre la codificación y la decodificación de audio en Android sería excelente si alguien sabe de alguna o cualquier ayuda aquí muy apreciada.

Gracias

EDITAR: He cambiado mi código a lo siguiente:

arec = new AudioRecord(MediaRecorder.AudioSource.MIC,
                     11025,
                     AudioFormat.CHANNEL_CONFIGURATION_MONO,
                     **MediaRecorder.AudioEncoder.AMR_NB**,
                     buffersize);

atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,
                     11025,
                     AudioFormat.CHANNEL_CONFIGURATION_MONO,
                     **MediaRecorder.AudioEncoder.AMR_NB**,
                     buffersize,
                     AudioTrack.MODE_STREAM);

El código se ejecuta correctamente, pero me pregunto si realmente codifica el audio como AMR_NB y si esta no es una forma adecuada de hacerlo.

Estaba obteniendo un desbordamiento del búfer cuando usaba PCM sin procesar, pero ninguno ha aparecido desde que usé el nuevo código con MediareCorder.audioencoder.amr_nb usado en lugar del audioformat.pcm

¿Fue útil?

Solución

Como dice la documentación para AudioRecord y AudioTrack:

audioFormat     the format in which the audio data is represented. See ENCODING_PCM_16BIT and ENCODING_PCM_8BIT

Solo puede trabajar con PCM de 8 bits y 16 bits. Si desea audio en otros formatos, no use AudioRecord y AudioTrack (probar MediaRecorder y MediaPlayer) o tendrá que transcodarlo usando su propio código, posiblemente aprovechando el NDK.

AudioRecord y AudioTrack están diseñados específicamente para casos en que el audio en cuestión no es compatible con el motor multimedia OpenCore, ya sea porque no es un códec compatible o no un protocolo de transmisión compatible (por ejemplo, SIP).

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