2010-02-03 7 views
5

Actualmente uso las clases AudioTrack y AudioRecord en Android.Opciones de códec Android AudioRecord y AudioTrack?

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

De this page parece que solo puedo codificar y decodificar usando banda estrecha AMR?

Actualmente puedo configurar 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); 

Así que mi pregunta es ¿cómo puedo cambiar la codificación de PCM a uno de los otros códecs compatibles?

Cuando intento cambiar ENCODING_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 codificación y decodificación de audio en Android sería genial si alguien sabe de alguna o alguna ayuda aquí muy apreciada.

Gracias

EDIT: me han cambiado mi código a la 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 ¿realmente codificar el audio como AMR_NB y si esto es no es una forma adecuada de hacerlo?

que estaba recibiendo un desbordamiento de búfer cuando se utiliza PCM en bruto, pero ninguno ha aparecido desde utilizando el nuevo código con el MediaRecorder.AudioEncoder.AMR_NB utiliza en lugar de la AudioFormat.PCM

+4

Ha pasado mucho tiempo desde que publicó su pregunta, pero tal vez todavía sea interesante para alguien ... No está codificando para AMR_NB. Los indicadores son solo campos internos. MediaRecorder.AudioEncoder.AMR_NB es 0x01 ... igual que AudioFormat.ENCODING_DEFAULT. Entonces solo estás usando la codificación predeterminada. – hacksteak25

Respuesta

2

Como los estados de 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 se puede trabajar con PCM de 8 y 16 bits. Si desea audio en otros formatos, no use AudioRecord y AudioTrack (intente MediaRecorder y MediaPlayer) o tendrá que transcodificarlo usando su propio código, posiblemente aprovechando el NDK.

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

Cuestiones relacionadas