Микропитона библиотека для Yutone Voicetx Syn6988 Текст в речевой модуль.
или демонстрационная загрузка: syn6988-micropython-demo.mp3
который «читает» следующий текст:
[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]

SYN6988 является одним из нескольких речевых синтезатора / модулей текста в речь (TTS), доступных недорого, для Aliexpress и других поставщиков. Это впечатляет, потому что:
Он производит чистую английскую речь, не прибегая к фонемам;
У него есть линейный разъем для наушников и небольшие выходы динамиков, оба с очень чистым аудио;
Это легко взаимодействовать, либо через асинхронное серийное, либо SPI (последний не пытался здесь);
Он обладает некоторой гибкостью в объеме, высоте и скорости речи (но это не Dectalk);
Он имеет встроенную большую библиотеку созревания;
Это не дорого, находясь рядом? $ 15.
Конечно, есть недостатки:
Вся документация до сих пор на китайском языке;
У него есть только один слабого женского голоса с слегка роботизированной доставкой;
Вы не можете получить заказанную доску! Я был продан этой платой как чип XFS5152, когда она явно имеет SYN6988.
Трудно рекомендовать продавца, так как я не могу гарантировать, что они продают доску с Syn6988. Убедитесь, что в описании поставщика говорится, что SYN6988 (есть аналогичные чипы SYN6288 и SYN6658 с различными возможностями), а у платы есть чип с чистым шелкостным экраном SYN6988 . Я видел несколько досок на продажу, в которых говорится, что Syn6658 на шелкостной экране печатной платы, но имел Syn6988 в изображении и описании.
SYN6988 - это устройство 3,3 В для логики и мощности. Это требует двухпроходного подключения UART плюс дополнительный цифровой входной вывод для мониторинга состояния заняты 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)
SYN6988 использует фиксированную скорость последовательного порта, определенную расположением резисторов в блоке серийного выбора скорости. Мой жестко проведен для 9600 бод.
Для Raspberry Pi Pico эти соединения могут быть поддержаны в коде:
ser = machine . UART ( 0 , baudrate = 9600 , bits = 8 , parity = None , stop = 1 )
busyPin = machine . Pin ( 2 , machine . Pin . IN , machine . Pin . PULL_UP )Аудио вывод проходит либо через разъем для наушников / линии, либо через булавки динамика. Этот вывод не понижен. Я могу водить очень маленький овальный динамик на удобном объеме от булавок динамика, но большие кучи могут быть очень тихими.
Доска, которую я имею, не является дистанционной макетой. Я решил, что, взяв два 6-контактных колодца Arduino Sacking, сгибая булавки и обратно под прямым углом, а затем приклеивая два заголовки назад к спине. Это дает заголовок, который соединяет центральную желобу в макете, что позволяет плате Syn6988 сидеть централизованно.

Если плата подключена правильно, красный светодиод будет освещен, когда TTS не говорит. Этот светодиод выйдет, когда TTS будет говорить, и RDY PIN -код будет вскоре вскоре (примерно от 0,1 до 0,7 с) после начала речи, и выйдет высоко, когда речь будет закончена.
Если используется приведенный выше код инициализации, следующий микропитон будет говорить довольно тихо «привет» с платы:
import syn6988
s = syn6988 . SYN6988 ( ser , busyPin )
s . speak ( "[v1]hello" )В этом модуле очень мало методов и свойств:
Говорите ( String ) - отправляет строку в TTS. Вывод может быть сформирован встроенными текстовыми командами. Принимает текст Unicode, включая традиционных китайских иероглиф. Делает чрезвычайно плохую работу по попытке не-английского или не китайского языка.
Block = true | False - По умолчанию речь испускается в режиме блокировки : то есть метод speak() не вернется до тех пор, пока TTS не указал, что он не будет закончен. Если block = False установлен, speak() немедленно вернется, но TTS все равно будет говорить, а ожидание остается на усмотрение программиста.
isbusy () - Если вы называются в неблокирующем режиме, isBusy() возвращает истину, пока TTS говорит. Это можно использовать для предотвращения прерывания речи. При вызове в режиме блокировки всегда будет возвращать ложь.
SYN6988 контролируется командами, окруженными [] . Их много, и я не понимаю их всех. Я поместил несколько из них в test-syn6988.py с я надеюсь, что ясные значения того, что они делают. Вкратце:
[d] - сбросить TTS в стандартный режим. Может быть полезен после вызова любого из предупреждающих звуков.
[g0] - автоматическое угадание языка; [g1] - предпочтения китайского языка; [g2] - предпочтение английскому языку. Английский, на котором говорится в китайском режиме, имеет странную интонацию, в то время как китайский режим, говорящий в английском языке, может быть неправильно обнаружен.
[p*] - пауза, например, [p500] пауза в течение 500 мс.
[s*] - Скорость речи: [s0] самый медленный до [s10] Самый быстрый.
[t*] - Tone/Pitch: [t0] Самый низкий до [t10] Высокий.
[x0] / [x1] - интерпретируйте строку, начиная с «звука» как один из нескольких сотен (?) Различных тонов, звонков и сигналов тревоги. Например, [x1]soundy[d] играет довольно приятный звонок, который я очень чрезмерно использую. Важно использовать [d] после того, как эта команда или неожиданные результаты произойдут. Ссылка на звуковую таблицу здесь: SYN-6988 Речь с микропитоном-мы видели курицу…
[v*] - том: [v0] тихо, [v1] Самый тихий к [v10]
SYN6988 принимает широкий диапазон входных кодировки, ни один из которых не поддерживается MicropyThon. Он, однако, поддерживает UTF16-BE (два байта на чар, без бом, высокий байт первым; например: «Привет» => b'x00hx00ex00lx00lx00o' ), которые могут быть довольно легко замолчать для работы. Если наши кодированные данные UTF-16BE находятся в data_bytes , и мы определяем
tx_len = len ( data_bytes ) + 2SYN6988 примет следующий байтовый поток через последовательный порт и попытается говорить на нем:
0xFD, tx_len // 256, tx_len % 256, 0x01, 0x04, data_bytes
Строка данных не должна быть слишком длинной: возможно, что -то до 4096 символов. Доска может занять до 700 мс для обработки текста, и, следовательно, мы останавливаемся на это долго, чтобы убедиться, что все текст.
Стюарт Рассел - Scruss.com - aka @scruss @xoxo.zone
Грань Если вы улучшите это, пожалуйста, дайте мне знать, чтобы я мог сделать это лучше.
Код UTF-8-> UTF-16BE работает, но кажется, что его можно улучшить. Это должно остаться то, что я могу понять, хотя.
Есть небольшая вероятность того, что действительно длинный текст будет пропущен, потому что я не жду достаточно долго, чтобы его обработали при чтении в режиме блокировки.
Ободрите этот код (если возможно) для работы с чипсетами SYN6288, SYN6658 и XFS5152. У меня есть несколько из них по порядку.
Yutone Voicetx Syn6988 документация (только в китайском языке): 语音合成芯 片 -Syn6988 中英文 tts 语音芯 片.
Мои ранние попытки прогнать эту доску из CPYTHON: речь из Python с модулем SYN6988 - мы видели курицу…. Это создает звук, но я на самом деле заставляю его неправильно. Все еще работает, хотя. Имеет автоматическую трансляционную копию ссылки на программирование, с которой мне пришлось работать.
Стихотворение Ричарда Браутигана, все следя за машинами любящей благодати , «читают» с помощью чипа Syn6988 TTS, управляемого Micropython: все следят за машинами Loven Grace | SoundCloud.