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

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

por biq
biq HackerNoon profile picture

biq

@biq

R&D, consulting and open-source development.

2 min read2023/12/18
Read on Terminal Reader
Read this story in a terminal
Print this story

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
biq

biq

@biq

R&D, consulting and open-source development.

0-item
1-item

STORY’S CREDIBILITY

Code License

Code License

The code in this story is for educational purposes. The readers are solely responsible for whatever they build with it.

Guide

Guide

Walkthroughs, tutorials, guides, and tips. This story will teach you how to do something new or how to do something better.

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)" .

Comment on this Story
L O A D I N G
. . . comments & more!

About Author

biq HackerNoon profile picture
biq@biq
R&D, consulting and open-source development.

Rótulos

ESTE ARTIGO FOI APRESENTADO EM...

Read on Terminal Reader
Read this story in a terminal
 Terminal
Read this story w/o Javascript
Read this story w/o Javascript
 Lite
X REMOVE AD