paint-brush
Como configurar o sintetizador de fala Piper em uma máquina localpor@biq
2,115 leituras
2,115 leituras

Como configurar o sintetizador de fala Piper em uma máquina local

por biq2m2023/12/18
Read on Terminal Reader

Muito longo; Para ler

Vamos dar uma olhada em como alguém pode configurar um sintetizador de texto para fala local (offline) ad-hoc usando piper, piper-whistle e pipes nomeados.
featured image - Como configurar o sintetizador de fala Piper em uma máquina local
biq HackerNoon profile picture
0-item
1-item

Vamos dar uma olhada em como alguém pode configurar um sintetizador de texto para fala local (offline) ad-hoc usando piper , piper-whistle e pipes nomeados.


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 repositório hospedado no github ( 2023.11.14-2 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 /opt/wind com os seguintes subdiretórios:


  • /opt/wind/piper (abrigará o piper construído)
  • /opt/wind/channels (conterá os pipes nomeados)


Após a descompactação, o executável do piper deve estar disponível em /opt/wind/piper/piper , bem como as bibliotecas que o acompanham e 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 gitlab ou do github . Depois de instalar o arquivo wheel, vamos buscar uma voz para gerar alguma fala. Primeiro, vamos atualizar o banco de dados chamando piper_whistle -vR . 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 piper_whistle list -l en_GB -i 2 . A voz está no índice 2. Então para instalar basta chamar piper_whistle install en_GB 2 .


A seguir, vamos criar os pipes nomeados necessários. A estrutura resultante ficará assim:

  • /opt/wind/channels/speak (aceita carga JSON)
  • /opt/wind/channels/input (lido por piper)
  • /opt/wind/channels/ouput (escrito por piper)


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 aplay . Desta forma, podemos enfileirar as solicitações TTS e posteriormente reproduzi-las ou salvá-las.


Como o piper-whistle oferece recursos adicionais se você usar a estrutura acima, agora podemos gerar fala via piper_whistle speak "This is quite neat" . Em sistemas com X11 você pode gerar uma versão falada do texto em sua área de transferência via piper_whistle speak "$(xsel --clipboard --output)" .