voz ver por mis historial guardando guardados google escuchar como búsqueda borrar audios actividad android audio speech-recognition wav voice-recognition

android - ver - guardando audio en gmail



Cómo guardar la entrada de audio del motor de reconocimiento de voz de Android Stock (3)

Estoy tratando de guardar en un archivo los datos de audio escuchados por el servicio de reconocimiento de voz de Android.

En realidad, implementé RecognitionListener como se explica aquí: Speech to Text en Android

guarde los datos en un búfer como se ilustra aquí: Captura de audio enviado al servidor de reconocimiento de voz de Google

y escribe el búfer en un archivo Wav, como aquí. Android Grabe los bytes sin procesar en el archivo WAVE para Http Streaming

Mi problema es cómo obtener la configuración de audio adecuada para guardar en los encabezados del archivo wav. De hecho, cuando reproduzco el archivo wav solo escucho ruido extraño, con estos parámetros,

short nChannels=2;// audio channels int sRate=44100; // Sample rate short bSamples = 16;// byteSample

o nada con esto:

short nChannels=1;// audio channels int sRate=8000; // Sample rate short bSamples = 16;// byteSample

Lo que es confuso es que al mirar los parámetros de la tarea de reconocimiento de voz de Logcat, primero encuentro la frecuencia de muestreo de REPRODUCCIÓN en 44100 HZ :

12-20 14:41:34.007: DEBUG/AudioHardwareALSA(2364): Set PLAYBACK PCM format to S16_LE (Signed 16 bit Little Endian) 12-20 14:41:34.007: DEBUG/AudioHardwareALSA(2364): Using 2 channels for PLAYBACK. 12-20 14:41:34.007: DEBUG/AudioHardwareALSA(2364): Set PLAYBACK sample rate to 44100 HZ 12-20 14:41:34.007: DEBUG/AudioHardwareALSA(2364): Buffer size: 2048 12-20 14:41:34.007: DEBUG/AudioHardwareALSA(2364): Latency: 46439

y luego aInfo.SampleRate = 8000 cuando reproduce el archivo para enviarlo a Google Server:

12-20 14:41:36.152: DEBUG/(2364): PV_Wav_Parser::InitWavParser 12-20 14:41:36.152: DEBUG/(2364): File open Succes 12-20 14:41:36.152: DEBUG/(2364): File SEEK End Succes ... 12-20 14:41:36.152: DEBUG/(2364): PV_Wav_Parser::ReadData 12-20 14:41:36.152: DEBUG/(2364): Data Read buff = RIFF? 12-20 14:41:36.152: DEBUG/(2364): Data Read = RIFF? 12-20 14:41:36.152: DEBUG/(2364): PV_Wav_Parser::ReadData 12-20 14:41:36.152: DEBUG/(2364): Data Read buff = fmt ... 12-20 14:41:36.152: DEBUG/(2364): PVWAVPARSER_OK 12-20 14:41:36.156: DEBUG/(2364): aInfo.AudioFormat = 1 12-20 14:41:36.156: DEBUG/(2364): aInfo.NumChannels = 1 12-20 14:41:36.156: DEBUG/(2364): aInfo.SampleRate = 8000 12-20 14:41:36.156: DEBUG/(2364): aInfo.ByteRate = 16000 12-20 14:41:36.156: DEBUG/(2364): aInfo.BlockAlign = 2 12-20 14:41:36.156: DEBUG/(2364): aInfo.BitsPerSample = 16 12-20 14:41:36.156: DEBUG/(2364): aInfo.BytesPerSample = 2 12-20 14:41:36.156: DEBUG/(2364): aInfo.NumSamples = 2258

Entonces, ¿cómo puedo encontrar los parámetros correctos para guardar el buffer de audio en un buen archivo de audio wav?



No ha incluido su código para realmente escribir los datos de PCM, por lo que es difícil de diagnosticar, pero si escucha ruidos extraños, es muy probable que tenga el endian equivocado cuando está escribiendo los datos, o el número equivocado de canales Obtener la frecuencia de muestreo incorrecta solo hará que el sonido suene más lento o más rápido, pero si suena completamente distorsionado, probablemente sea un error especificar el número de canales o la duración de la transmisión de bytes.

Para estar seguro, solo transmita sus bytes directamente a un archivo sin ningún encabezado (datos PCM sin procesar). De esta forma, puede descartar cualquier error al escribir su encabezado de archivo. Luego use Audacity para importar los datos brutos, experimentando con las diferentes opciones (profundidad de bit, endian, canales) hasta que obtenga un archivo de audio que suene correcto (solo uno será el correcto). Lo hace desde Archivo-> Importar-> Datos brutos ...

Una vez que haya identificado su formato de bytes de esta manera, solo tendrá que preocuparse de si está configurando los encabezados correctamente. Es posible que desee consultar esta referencia http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html para el formato de archivo. O vea los siguientes enlaces sobre soluciones Java existentes para escribir archivos de audio, Java: leer, manipular y escribir archivos WAV o FMJ . Aunque supongo que estos pueden no ser utilizables en Android.

Si tiene que pasar su propio escritor WAV / RIFF, recuerde que los tipos de datos de Java son big-endian por lo que las primitivas multibyte que escriba en su archivo deben escribirse en orden inverso de bytes para que coincidan con la poca endiabilidad de RIFF.


8000 , little endian, PCM de 16 bits , mono canal hizo el truco