R&D, consulting and open-source development.
The code in this story is for educational purposes. The readers are solely responsible for whatever they build with it.
Walkthroughs, tutorials, guides, and tips. This story will teach you how to do something new or how to do something better.
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:
tail -F /opt/wind/channels/speak | tee /opt/wind/channels/input
/opt/wind/piper/piper -m $(piper_whistle path alba@medium) --debug --json-input --output_raw < /opt/wind/channels/input > /opt/wind/channels/output
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)"
.
Cómo configurar el sintetizador de voz Piper en una máquina local | HackerNoon