Estoy tratando de codificar datos pcm sin procesar como uLaw para ahorrar en el ancho de banda requerido para transmitir datos de voz.Android PCM a Ulaw codificación de archivo wav
Me he encontrado con una clase llamada UlawEncoderInputStream en This page pero no hay documentación! :(
El constructor toma un flujo de entrada y un valor máximo PCM (sea lo que sea).
/**
* Create an InputStream which takes 16 bit pcm data and produces ulaw data.
* @param in InputStream containing 16 bit pcm data.
* @param max pcm value corresponding to maximum ulaw value.
*/
public UlawEncoderInputStream(InputStream in, int max) {
Después de mirar a través del código, sospecho que yo debería calcular este valor "max" utilizando un suministrado función: maxAbsPcm. ¡El problema es que realmente no entiendo lo que debo pasar! Estoy grabando mi pcm en bruto en un archivo en la tarjeta sd, así que no tengo una matriz de datos residente en memoria continua para pasar a este
/**
* Compute the maximum of the absolute value of the pcm samples.
* The return value can be used to set ulaw encoder scaling.
* @param pcmBuf array containing 16 bit pcm data.
* @param offset offset of start of 16 bit pcm data.
* @param length number of pcm samples (not number of input bytes)
* @return maximum abs of pcm data values
*/
public static int maxAbsPcm(byte[] pcmBuf, int offset, int length) {
Otro problema que tengo al usar este código es que no estoy seguro de qué valores escribir para el encabezado de los datos de ley. ¿Cómo puedo determinar la cantidad de datos de bytes que hay después de la codificación con uLaw?
He escuchado uno de los archivos codificados (potencialmente) uLaw que he creado en el reproductor multimedia VLC (el único jugador que tengo que intentará leer el archivo) y sus sonidos son desagradables, rotos y clics, pero aún pueden la voz.
Estoy escribiendo mi encabezado de onda usando un código similar a una clase que encontré llamada WaveHeader que se puede encontrar Here!
Si alguien tiene alguna idea sobre este asunto estaría muy agradecidos a escucharlos! :)
Muchas gracias Dexter
Si está creando un archivo .wav. Almacene el archivo de encabezado de onda al principio y cámbielo al final de su grabación. Normalmente, no sabrá el tamaño (cantidad de registros) hasta que llegue al final. Su máximo debe ser 0x7f de todos modos. –