Vamos dar uma olhada em como alguém pode configurar um sintetizador de texto para fala local (offline) ad-hoc usando , piper-whistle e pipes nomeados. piper Para configurar o piper em um sistema baseado em GNU/Linux, descreverei uma arquitetura geral usando pipes nomeados, que é simples o suficiente para permitir a conversão de texto em fala em todo o sistema, com um pouco de configuração manual, a ajuda do piper -whistle e algumas pequenas compensações (é simples, mas não suporta processamento de fala paralelo). Para começar, vamos buscar o piper autônomo mais recente construído em seu ( no momento em que este artigo foi escrito). Depois de baixar o arquivo compactado, criaremos uma estrutura de diretórios para a configuração do nosso piper. O diretório raiz deve estar em com os seguintes subdiretórios: repositório hospedado no github 2023.11.14-2 /opt/wind (abrigará o piper construído) /opt/wind/piper (conterá os pipes nomeados) /opt/wind/channels Após a descompactação, o executável do piper deve estar disponível em , bem como as bibliotecas que o acompanham e . /opt/wind/piper/piper espeak-ng-data Para gerenciar modelos de voz usados pelo piper, recomendo usar o piper-whistle, um utilitário de linha de comando escrito em python, que torna mais conveniente baixar e gerenciar vozes. Você pode obter o arquivo wheel mais recente na página de lançamento do ou . Depois de instalar o arquivo wheel, vamos buscar uma voz para gerar alguma fala. Primeiro, vamos atualizar o banco de dados chamando . Para falar em inglês, gosto bastante da voz feminina chamada alba. Usando o apito, podemos listar todas as vozes disponíveis em inglês (GB) usando . A voz está no índice 2. Então para instalar basta chamar . gitlab do github piper_whistle -vR piper_whistle list -l en_GB -i 2 piper_whistle install en_GB 2 A seguir, vamos criar os pipes nomeados necessários. A estrutura resultante ficará assim: (aceita carga JSON) /opt/wind/channels/speak (lido por piper) /opt/wind/channels/input (escrito por piper) /opt/wind/channels/ouput Para criar um pipe nomeado, você pode usar o seguinte comando: mkfifo -m 755 /opt/wind/channels/input Finalmente, criamos três processos em 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 O processo em tty0 garante que o pipe seja mantido aberto, mesmo após o término do processamento por piper ou . Desta forma, podemos enfileirar as solicitações TTS e posteriormente reproduzi-las ou salvá-las. aplay Como o piper-whistle oferece recursos adicionais se você usar a estrutura acima, agora podemos gerar fala via . Em sistemas com X11 você pode gerar uma versão falada do texto em sua área de transferência via . piper_whistle speak "This is quite neat" piper_whistle speak "$(xsel --clipboard --output)"