Biblioteca de Micrypthon para el módulo de texto y módulo de habla a voz de Yutone VoicetX.
o Demo Audio Descargar: Syn6988-Micropython-Demo.mp3
que "lee" el siguiente 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]

El SYN6988 es uno de varios módulos de sintetizador de voz / texto a voz (TTS) disponibles a bajo costo en Aliexpress y otros proveedores. Es impresionante porque:
Produce un discurso inglés claro sin recurrir a fonemas;
Tiene una línea / toma de auriculares y salidas de altavoces pequeñas, ambas con audio muy limpio;
Es fácil interactuar, ya sea a través de una serie asíncrona o SPI (este último no intenta aquí);
Tiene cierta flexibilidad en el volumen, el tono y la tasa de habla (pero no es Dectalk);
Tiene una gran biblioteca de tonos de alerta incorporados;
No es costoso, ¿estar cerca? $ 15.
Por supuesto, hay inconvenientes:
Toda la documentación hasta ahora está en chino;
Tiene solo una voz femenina débilmente con una entrega ligeramente robótica;
¡Es posible que no obtenga el tablero que ordenó! Me vendieron este tablero por tener un chip XFS5152 cuando claramente tiene un syn6988.
Es difícil recomendar un proveedor, ya que no puedo garantizar que estén vendiendo un tablero con un SYN6988. Compruebe que la descripción del proveedor dice Syn6988 (hay chips similares SYN6288 y SYN6658 con diferentes capacidades) y la placa tiene un chip con una silscreen clara Syn6988 . He visto algunos tableros a la venta que dicen SYN6658 en la silkscreen de PCB, pero tienen un SYN6988 en la imagen y la descripción.
El SYN6988 es un dispositivo de 3.3 V para lógica y potencia. Requiere una conexión UART de dos hilos más un pin de entrada digital adicional para monitorear el estado ocupado del 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)
El SYN6988 utiliza una tasa de puerto serie fija definida por la disposición de las resistencias en el bloque de selección de velocidad en serie. El mío está cableado para 9600 baudios.
Para un Pico Raspberry Pi, estas conexiones pueden ser compatibles con el código con:
ser = machine . UART ( 0 , baudrate = 9600 , bits = 8 , parity = None , stop = 1 )
busyPin = machine . Pin ( 2 , machine . Pin . IN , machine . Pin . PULL_UP )La salida de audio es a través del conector para auriculares / línea o a través de los pines del altavoz. Esta salida no está amplificada. Puedo conducir un altavoz ovalado muy pequeño a un volumen cómodo desde los alfileres del altavoz, pero los grandes arases pueden ser muy tranquilos.
El tablero que tengo no es remotamente amigable para la placa. Lo resolví tomando dos encabezados apilando los pilotos de 6 pines, doblando los alfileres hacia afuera y hacia atrás en ángulo recto, luego pegando los dos encabezados consecutivos. Esto proporciona un bloque de encabezado que une el canal central en una placa de pan, lo que permite que la placa SYN6988 se sienta centralmente.

Si la placa está conectada correctamente, el LED listo rojo se encenderá cuando el TTS no esté hablando. Este LED se apagará cuando el TTS esté hablando, y el PIN RDY se reducirá en breve (aproximadamente 0.1 a 0.7 s) después de que comience el discurso, y se elevará cuando el discurso termine.
Si se usa el código de inicialización anterior, el siguiente Micrypthon hablará un "hola" bastante tranquilo desde el tablero:
import syn6988
s = syn6988 . SYN6988 ( ser , busyPin )
s . speak ( "[v1]hello" )Hay muy pocos métodos y propiedades para este módulo:
speak ( string ) - envía cadena al TTS. La salida se puede moldear con comandos de texto incrustados. Acepta texto Unicode, incluidos los caracteres tradicionales chinos. Hace un trabajo extremadamente pobre al intentar un lenguaje no inglés o no chino.
bloque = verdadero | Falso : por defecto, el discurso se emite en modo de bloqueo : es decir, el método speak() no volverá hasta que el TTS haya indicado que está terminado. Si block = False está configurado, speak() regresará de inmediato, pero el TTS seguirá hablando y la espera se deja al programador.
ISBUSY (): si se llama en modo no bloqueado, isBusy() devuelve verdadero mientras el TTS está hablando. Esto se puede usar para evitar la interrupción del habla. Si se le llama al modo de bloqueo, siempre devolverá falso.
El SYN6988 está controlado por comandos rodeados por [] . Hay muchos de estos, y no los entiendo a todos. He puesto algunos de ellos en test-syn6988.py con los significados claros de lo que hacen. En resumen:
[d] - Restablezca los TTS al modo estándar. Puede ser útil después de llamar a cualquiera de los sonidos de alerta.
[g0] - Adivinación de lenguaje automático; [g1] - Preferencia del idioma chino; [g2] - Preferencia en inglés. El inglés hablado en modo chino tiene una entonación extraña, mientras que los chinos hablados en modo inglés pueden no detectarse correctamente.
[p*] - Pausa, por ejemplo [p500] hace una pausa para 500 ms.
[s*] - Velocidad del habla: [s0] más lento para [s10] más rápido.
[t*] - tono/tono: [t0] más bajo a [t10] más alto.
[x0] / [x1] - Interpreta una cadena que comienza con "sonido" como uno de varios cientos (?) Diferentes tonos, campanas y alarmas. Por ejemplo, [x1]soundy[d] reproduce una timbre bastante agradable que uso en exceso. Es importante usar [d] después de que ocurra este comando o resultados inesperados. Una referencia de tabla de sonido está aquí: Syn-6988 Discurso con Micropython-Vimos un pollo ...
[v*] - Volumen: [v0] silencioso, [v1] más tranquilo a [v10] más fuerte.
El SYN6988 acepta una amplia gama de codificaciones de entrada, ninguna de las cuales es compatible con Micrypthon. Sin embargo, es compatible con UTF16-be (dos bytes por char, no Bom, High Byte First; por ejemplo: "Hola" => b'x00hx00ex00lx00lx00o' ) que se puede ajustar con bastante facilidad al trabajo. Si nuestros datos codificados UTF-16BE están en data_bytes y definimos
tx_len = len ( data_bytes ) + 2El SYN6988 aceptará el siguiente flujo de bytes sobre el puerto serie e intentará hablarlo:
0xFD, tx_len // 256, tx_len % 256, 0x01, 0x04, data_bytes
La cadena de datos no debería ser demasiado larga: algo de menos de 4096 caracteres, tal vez. La Junta puede tomar hasta 700 ms para procesar el texto y, por lo tanto, nos detenemos durante tanto tiempo para asegurarnos de que todo el texto se hable.
Stewart Russell - Scruss.com - también conocido como @scruss @xoxo.zone
Mit. Sin embargo, si mejora esto, hágamelo saber para que pueda mejorar esto.
El código UTF-8-> UTF-16BE funciona, pero parece que podría mejorarse. Sin embargo, tiene que permanecer algo que pueda entender.
Hay una pequeña posibilidad de que se salte el texto realmente largo porque no estoy esperando lo suficiente para que se procese al leer en modo de bloqueo.
Generalizar este código (si es posible) para que funcione con chipsets Syn6288, Syn6658 y XFS5152. Tengo varios de estos en orden.
Yutone Voicetx Syn6988 Documentación (solo en chino): 语音合成芯 片 -Syn6988 中英文 TTS 语音芯 片.
Mis primeros intentos de conducir este tablero desde Cpython: Discurso de Python con el módulo Syn6988: vimos un pollo ... Esto produce sonido, pero en realidad lo estoy conduciendo erróneamente. Todavía funciona, sin embargo. Tiene una copia automatizada de la referencia de programación, de la que es todo de donde he tenido que trabajar.
El poema de Richard Brautigan está vigilado por Machines of Loving Grace , "Leer" por un chip Syn6988 TTS impulsado por Micrypthon: todos vigilados por Machines of Loving Grace | Soundcloud.