es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La lectura de stdout de subprocess.Popen corrompe el archivo de salida WAV que debería generar teóricamente.

Estoy leyendo la salida de un comando que genera un archivo WAV y reproduzco el resultado conectando ambos procesos.


Generar secuencia WAV en la salida process = Popen(['larynx', '-v', os.environ["VOICE"], "--raw-stream", "\"{}\"".format(message)], stdout=PIPE) Lee entrada de secuencia WAV y la reproduce process2 = Popen(["aplay", "-r", "22050", "-c", "1", "-f", "S16_LE"], shell=True, stdin=PIPE, bufsize=4000) while True: data = process.stdout.read(4000) if(len(data) == 0): break process2.stdin.write(data)

Solo reproduce una versión corrupta de lo que debería reproducir. Al leer stderr de aplay se revela que detecta una tasa de bits y una frecuencia de muestreo incorrectas (8 bits y 8 KHz en lugar de 16 bits y 16 KHz).
Mientras tanto, si solo uso el comando:

larynx -v en –raw-stream my_message | aplay -r 22050 -c 1 -f S16_LE

Reproduce el resultado correctamente. Creo que stdout.read está perdiendo la forma de mi archivo WAV. ¿Alguna idea sobre cómo resolver esto?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el comando stdout.read. Es posible que esté perdiendo la forma del archivo WAV, como sugiere. Para resolver esto, podría intentar usar un método diferente para leer la salida del comando larynx. Por ejemplo, podría intentar usar el comando subprocess.check_output en lugar de Popen y stdout.read.

Comments are closed.