paint-brush
Cómo configurar el sintetizador de voz Piper en una máquina localby@biq
1,658
1,658

Cómo configurar el sintetizador de voz Piper en una máquina local

biq2m2023/12/18
Read on Terminal Reader

Echemos un vistazo a cómo se puede configurar un sintetizador de texto a voz ad-hoc, local (fuera de línea) usando piper, piper-whistle y Named Pipes.
featured image - Cómo configurar el sintetizador de voz Piper en una máquina local
biq HackerNoon profile picture
0-item
1-item

Echemos un vistazo a cómo se puede configurar un sintetizador de texto a voz ad-hoc, local (fuera de línea) usando piper , piper-whistle y Named Pipes.


Para configurar Piper en un sistema basado en GNU/Linux, describiré una arquitectura general que utiliza canalizaciones con nombre, que es lo suficientemente sencilla como para permitir la conversión de texto a voz en todo el sistema, con un poco de configuración manual y la ayuda de Piper. -silbato y algunas compensaciones menores (es simple, pero no admite el procesamiento de voz en paralelo).


Para comenzar, busquemos la última versión independiente de Piper creada desde su repositorio alojado en github ( 2023.11.14-2 al momento de escribir esto). Después de descargar el archivo comprimido, crearemos una estructura de directorios para nuestra configuración de Piper. El directorio raíz estará en /opt/wind con los siguientes subdirectorios:


  • /opt/wind/piper (albergará el gaitero construido)
  • /opt/wind/channels (contendrá las canalizaciones con nombre)


Después de descomprimirlo, el ejecutable de Piper debería estar disponible en /opt/wind/piper/piper , así como las bibliotecas que lo acompañan y espeak-ng-data .

Para administrar los modelos de voz utilizados por Piper, recomendaría usar piper-whistle, una utilidad de línea de comandos escrita en Python, que hace que sea más conveniente descargar y administrar voces.


Puede obtener el archivo wheel más reciente desde su página de lanzamiento de gitlab o github . Después de instalar el archivo wheel, busquemos una voz para generar algo de voz. Primero, actualicemos la base de datos llamando a piper_whistle -vR . Para hablar en inglés, me gusta bastante la voz femenina llamada alba. Usando Whistle, podemos obtener una lista de todas las voces en inglés (GB) disponibles usando piper_whistle list -l en_GB -i 2 . La voz está en el índice 2. Entonces, para instalarla, simplemente llame a piper_whistle install en_GB 2 .


A continuación, creemos las canalizaciones con nombre necesarias. La estructura resultante se verá así:

  • /opt/wind/channels/speak (acepta carga útil JSON)
  • /opt/wind/channels/input (leído por piper)
  • /opt/wind/channels/ouput (escrito por piper)


Para crear una canalización con nombre, puede utilizar el siguiente comando: mkfifo -m 755 /opt/wind/channels/input


Finalmente, creamos tres procesos en shells separados:

  • tty0: tail -F /opt/wind/channels/speak | tee /opt/wind/channels/input
  • tty1: /opt/wind/piper/piper -m $(piper_whistle path alba@medium) --debug --json-input --output_raw < /opt/wind/channels/input > /opt/wind/channels/output
  • tty2: aplay --buffer-size=777 -r 22050 -f S16_LE -t raw < /opt/wind/channels/output


El proceso en tty0 garantiza que la tubería se mantenga abierta, incluso después de que haya finalizado el procesamiento por parte de piper o aplay . De esta manera, podemos poner en cola las solicitudes TTS y posteriormente reproducirlas o guardarlas.


Dado que piper-whistle ofrece características adicionales si usa la estructura anterior, ahora podemos generar voz a través de piper_whistle speak "This is quite neat" . En sistemas con X11, puede generar una versión hablada del texto en su portapapeles a través de piper_whistle speak "$(xsel --clipboard --output)" .