Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo utilizar el códec de audio AACLib V1.0 en Android

Cómo utilizar el códec de audio AACLib V1.0 en Android

Recientemente, en un proyecto de audio en Android, por cierto, se utilizó el paquete de la biblioteca de códecs aac. Es necesario descargarlo desde arriba. Por supuesto, no tengo la capacidad de escribir el códec yo mismo, así que usaré FFmpeg + FDK_aac. A continuación se explica cómo utilizar su interfaz Java. Para la biblioteca Java, consulte el archivo libaac.jar. Agregue libaac.jar al directorio libs y libaac.so al directorio libs/armeabi para usarlo.

Codificación AAC:

(1) Crear un objeto codificador como variable miembro

codificador aac.Encoder;

(2) Inicializarlo

encoder = new aac.Encoder();

if(! encoder.open(11025, 1))

{

Log.d("mylog", "no se pudo abrir el codificador!\n");

encoder = null;

}

Aquí, usted debe especificar la frecuencia de muestreo y el número de canales de la fuente de audio de entrada (formato PCM), si es CHANNEL_OUT_MONO, el número de canales = 1, de lo contrario el número de canales es 2. La frecuencia de muestreo generalmente se establece en 11025, porque el rendimiento de los teléfonos móviles es limitado. Si se configura demasiado alta, no podrá procesar, y 11025 es suficiente para procesar voces humanas.

(3) Codificación

Los datos PCM recibidos se entregarán al codificador para su procesamiento. El requisito de la fuente de entrada es ENCODING_PCM_16BIT, es decir, cada muestra es de 16 BITS. El objeto codificador tiene dos buffers: inbuf y outbuf. Obviamente, durante la codificación, inbuf se usa para almacenar los datos PCM recibidos y outbuf se usa para almacenar los datos codificados.

int out_size = encoder.encode(in_size);

El valor de retorno out_size representa la longitud de los datos válidos en outbuf. En este punto, puede enviar los datos aac en outbuf a través de la red o para otros fines.

En este caso, el usuario necesita conocer la duración de cada procesamiento por parte del codificador, es decir, el tamaño de un fotograma. Para mono MONO, se deben ingresar 2048 bytes de datos a la vez. Para ESTÉREO de dos canales, se deben ingresar 4096 bytes de datos. Decoder;

(2) Inicialización

decoder = new aac.Decoder();

if(! decoder.open())

{

Log.d("mylog", "¡no se pudo abrir el decodificador!\n");

decodificador = null;

}

(3) Decodificación

El objeto decodificador también tiene un inbuf y un outbuf. Coloque el marco aac a decodificar en inbuf

int pcm_size = decoder.decode. ( aac_size);

La longitud efectiva de los datos decodificados en outbuf es pcm_size, el valor de retorno de la función anterior. En este momento, puede extraer los datos PCM en outbuf para reproducirlos u otros fines.