Echemos un vistazo a cómo se puede configurar un sintetizador de texto a voz ad-hoc, local (fuera de línea) usando , piper-whistle y Named Pipes. piper 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 ( 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 con los siguientes subdirectorios: repositorio alojado en github 2023.11.14-2 /opt/wind (albergará el gaitero construido) /opt/wind/piper (contendrá las canalizaciones con nombre) /opt/wind/channels Después de descomprimirlo, el ejecutable de Piper debería estar disponible en , así como las bibliotecas que lo acompañan y . /opt/wind/piper/piper 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 o . Después de instalar el archivo wheel, busquemos una voz para generar algo de voz. Primero, actualicemos la base de datos llamando a . 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 . La voz está en el índice 2. Entonces, para instalarla, simplemente llame a . de gitlab github piper_whistle -vR piper_whistle list -l en_GB -i 2 piper_whistle install en_GB 2 A continuación, creemos las canalizaciones con nombre necesarias. La estructura resultante se verá así: (acepta carga útil JSON) /opt/wind/channels/speak (leído por piper) /opt/wind/channels/input (escrito por piper) /opt/wind/channels/ouput 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 . De esta manera, podemos poner en cola las solicitudes TTS y posteriormente reproducirlas o guardarlas. aplay Dado que piper-whistle ofrece características adicionales si usa la estructura anterior, ahora podemos generar voz a través de . En sistemas con X11, puede generar una versión hablada del texto en su portapapeles a través de . piper_whistle speak "This is quite neat" piper_whistle speak "$(xsel --clipboard --output)"