Biblioteca Micropython para o texto Yutone VoiceTx Syn6988 no módulo de fala.
ou download de áudio de demonstração: syn6988-micropython-demo.mp3
que "lê" o seguinte texto:
[g2]Hello! [g1]你好![g2]
I can speak in English, and also in Chinese:
[g1]千里之行,始于足下。[g2]
which means: a journey of five hundred kilometres starts with the first step
[s1]I can speak slowly, [s9] and I can speak very fast[s5]
[v5]I can be [v10]loud or [v1]very quiet. [v5]
I can use [t1]low tones [t5]or [t8]high tones[t5]
[d][g0]my work here is done [x1]soundy[d]

O Syn6988 é um dos vários módulos Synthesizer / Text-to-Fpeel (TTS) disponíveis de forma barata em Aliexpress e outros fornecedores. É impressionante porque:
Produz um discurso claro em inglês sem recorrer a fonemas;
Possui uma linha de saída / fone de ouvido e saídas de pequenos alto -falantes, ambas com áudio muito limpo;
É fácil interagir, através de serial assíncrono ou SPI (o último não tentado aqui);
Tem alguma flexibilidade em volume, tom e taxa de fala (mas não é dectalk);
Possui uma grande biblioteca de tons de alerta embutidos;
Não é caro estar por perto? $ 15.
Claro, existem desvantagens:
Toda a documentação até agora está em chinês;
Tem apenas uma voz feminina fraca com uma entrega ligeiramente robótica;
Você pode não receber o quadro que você pediu! Fui vendido esta placa como tendo um chip XFS5152 quando ele tem claramente um Syn6988.
É difícil recomendar um fornecedor, pois não posso garantir que eles estejam vendendo uma placa com um Syn6988. Verifique se a descrição do fornecedor diz Syn6988 (existem chips semelhantes Syn6288 e Syn6658 com diferentes recursos) e a placa possui um chip com uma tela de seda Syn6988 clara. Eu já vi algumas placas à venda que dizem Syn6658 na tela da serigrafia do PCB, mas têm um Syn6988 na imagem e descrição.
O Syn6988 é um dispositivo de 3,3 V para lógica e energia. Requer uma conexão UART de dois fios, além de um pino de entrada digital adicional para monitorar o status ocupado do TTS.
SYN6988 MicroPython Board Raspberry Pi Pico
========= =================== ===================
RDY Digital Input GPIO 2
RXD UART TXD GPIO 0 (UART 0 TX)
TXD UART RXD GPIO 1 (UART 0 RX)
GND Ground Any GND pin
3V3 3V3 supply 3V3(OUT)
O Syn6988 usa uma taxa de porta serial fixa definida pelo arranjo de resistores no bloco de seleção de velocidade serial. O meu está conectado por 9600 baud.
Para um pico de Raspberry Pi, essas conexões podem ser suportadas em código com:
ser = machine . UART ( 0 , baudrate = 9600 , bits = 8 , parity = None , stop = 1 )
busyPin = machine . Pin ( 2 , machine . Pin . IN , machine . Pin . PULL_UP )A saída de áudio é através do fone de ouvido / linha de linha ou por meio dos pinos do alto -falante. Esta saída não é amplificada. Eu posso dirigir um alto -falante oval muito pequeno a um volume confortável dos pinos do alto -falante, mas os grandes peshones podem ser muito silenciosos.
O quadro que tenho não é remotamente amigável à placa de ensaio. Resolvi isso pegando dois cabeçalhos de empilhamento de arduino de 6 pinos, dobrando os pinos para fora e de volta em ângulos retos e depois colando os dois cabeçalhos para trás. Isso fornece um bloco de cabeçalho que preenche a calha central em uma placa de ensaio, permitindo que a placa Syn6988 se sente centralmente.

Se a placa estiver conectada corretamente, o LED pronto para o vermelho será aceso quando o TTS não estiver falando. Esse LED será lançado quando o TTS estiver falando, e o pino RDY ficará baixo em breve (cerca de 0,1 a 0,7 s) após o início do discurso e subir alto quando o discurso terminar.
Se o código de inicialização acima for usado, o seguinte Micropython falará um "Hello" bastante silencioso do quadro:
import syn6988
s = syn6988 . SYN6988 ( ser , busyPin )
s . speak ( "[v1]hello" )Existem muito poucos métodos e propriedades para este módulo:
fale ( string ) - envia string para o TTS. A saída pode ser moldada com comandos de texto incorporados. Aceita texto unicode, incluindo caracteres chineses tradicionais. Faz um trabalho extremamente ruim de tentar idioma não inglês ou não chineso.
bloco = true | FALSO - Por padrão, a fala é emitida no modo de bloqueio : ou seja, o método speak() não retornará até que o TTS indique que está concluído. Se block = False for definido, speak() retornará imediatamente, mas o TTS ainda estará falando e a espera será deixada para o programador.
isbusy () - Se chamado no modo não bloqueador, isBusy() retorna true enquanto o TTS está falando. Isso pode ser usado para impedir a interrupção da fala. Se chamado no modo de bloqueio, sempre retornará falso.
O Syn6988 é controlado por comandos cercados por [] . Existem muitos deles, e eu não entendo todos eles. Eu coloquei alguns deles em test-syn6988.py com espere significados claros do que eles fazem. Em resumo:
[d] - Redefina o TTS para o modo padrão. Pode ser útil depois de chamar qualquer um dos sons de alerta.
[g0] - adivinhação automática de idiomas; [g1] - Preferência da língua chinesa; [g2] - Preferência em inglês. O inglês falado no modo chinês tem entonação estranha, enquanto os chineses falados no modo inglês podem não ser detectados corretamente.
[p*] - Pausa, por exemplo [p500] uma pausa por 500 ms.
[s*] - Taxa de fala: [s0] mais lento para [s10] mais rápido.
[t*] - Tom/Pitch: [t0] mais baixo para [t10] mais alto.
[x0] / [x1] - Interprete uma string começando com "som" como um dos tons, carrilhões e alarmes diferentes (?). Por exemplo, [x1]soundy[d] toca um carrilhão bastante agradável que eu uso demais. É importante usar [d] após ocorrer esse comando ou resultados inesperados. Uma referência da tabela de som está aqui: Syn-6988 Discurso com Micropython-vimos uma galinha…
[v*] - Volume: [v0] Silencioso, [v1] mais silencioso para [v10] mais alto.
O Syn6988 aceita uma ampla gama de codificações de entrada, nenhuma das quais é suportada pelo Micropython. No entanto, suporta UTF16-BE (dois bytes por char, sem nascimento, byte alto primeiro; por exemplo: "hello" => b'x00hx00ex00lx00lx00o' ), que pode ser facilmente fudado para trabalhar. Se nossos dados codificados UTF-16BE estão em data_bytes e definimos
tx_len = len ( data_bytes ) + 2O Syn6988 aceitará o seguinte fluxo de bytes sobre a porta serial e tentará falar:
0xFD, tx_len // 256, tx_len % 256, 0x01, 0x04, data_bytes
A sequência de dados não deve demorar muito: algo abaixo de 4096 caracteres, talvez. A placa pode levar até 700 ms para processar o texto e, portanto, fazemos uma pausa por esse tempo para garantir que o texto seja falado.
Stewart Russell - Scruss.com - aka @scruss @xoxo.zone
Mit. Se você melhorar isso, por favor, me avise para que eu possa melhorar isso.
O código UTF-8-> UTF-16BE funciona, mas parece que pode ser melhorado. Tem que ficar algo que eu posso entender, no entanto.
Há uma pequena chance de que o texto realmente longo seja ignorado, porque não estou esperando o tempo suficiente para que seja processado ao ler no modo de bloqueio.
Generalize esse código (se possível) para trabalhar com chipsets Syn6288, Syn6658 e XFS5152. Eu tenho vários deles por ordem.
Documentação de Yutone VoiceTx Syn6988 (somente em chinês): 语音合成芯 -Syn6988 中英文 TTS 语音芯 片.
Minhas tentativas iniciais de dirigir esta placa de Cpython: discurso de Python com o módulo Syn6988 - vimos uma galinha…. Isso produz som, mas na verdade estou dirigindo incorretamente. Ainda funciona, no entanto. Possui uma cópia translatada automaticamente da referência de programação, que é tudo o que tive que trabalhar.
O poema de Richard Brautigan , todos vigiados por máquinas de Grace Loving , "Read" por um chip Syn6988 TTS acionado por Micropython: todos vigiados por máquinas de graça amorosa | Soundcloud.