Perpustakaan Micropython untuk Yutone Voicetx Syn6988 Teks ke Modul Bicara.
atau Demo Audio Unduh: Syn6988-Micropython-Demo.mp3
Yang "membaca" teks berikut:
[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 adalah salah satu dari beberapa modul Synthesizer / Text-to-Speech (TTS) yang tersedia secara murah di AliExpress dan vendor lainnya. Itu mengesankan karena:
Ini menghasilkan ucapan bahasa Inggris yang jelas tanpa menggunakan fonem;
Ini memiliki jack line out / headphone dan output speaker kecil, keduanya menampilkan audio yang sangat bersih;
Sangat mudah untuk berinteraksi, baik melalui serial asinkron atau SPI (yang terakhir tidak dicoba di sini);
Ini memiliki beberapa fleksibilitas dalam volume, pitch dan laju bicara (tapi tidak ada dectalk);
Ini memiliki perpustakaan besar nada peringatan bawaan;
itu tidak mahal, ada di sekitar ?? $ 15.
Tentu saja, ada kerugian:
Semua dokumentasi sejauh ini dalam bahasa Cina;
Ini hanya memiliki satu suara wanita beraksen samar dengan persalinan yang sedikit robot;
Anda mungkin tidak mendapatkan papan yang Anda pesan! Saya dijual papan ini sebagai chip XFS5152 ketika jelas memiliki syn6988.
Sulit untuk merekomendasikan vendor, karena saya tidak dapat menjamin mereka menjual papan dengan syn6988 di atasnya. Periksa apakah deskripsi vendor mengatakan syn6988 (ada chip serupa syn6288 dan syn6658 dengan kemampuan yang berbeda) dan papan memiliki chip dengan silkscreen syn6988 yang jelas. Saya telah melihat beberapa papan untuk dijual yang mengatakan syn6658 di pcb silkscreen, tetapi memiliki syn6988 dalam gambar dan deskripsi.
Syn6988 adalah perangkat 3,3 V untuk logika dan daya. Dibutuhkan koneksi UART dua kawat plus pin input digital tambahan untuk memantau status sibuk 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 menggunakan laju port serial tetap yang ditentukan oleh pengaturan resistor di blok pemilihan kecepatan serial. Milik saya terprogram untuk 9600 baud.
Untuk raspberry pi pico, koneksi ini mungkin didukung dalam kode dengan:
ser = machine . UART ( 0 , baudrate = 9600 , bits = 8 , parity = None , stop = 1 )
busyPin = machine . Pin ( 2 , machine . Pin . IN , machine . Pin . PULL_UP )Output audio baik melalui jack headphone / line out atau melalui pin speaker. Output ini tidak diamplifikasi. Saya dapat mengendarai speaker oval yang sangat kecil dengan volume yang nyaman dari pin speaker, tetapi heaphone besar bisa sangat tenang.
Papan yang saya miliki tidak ramah papan-papan. Saya memecahkannya dengan mengambil dua header penumpukan 6-pin Arduino, menekuk pin dan kembali ke sudut kanan, lalu menempelkan kedua header ke belakang ke belakang. Ini memberikan blok header yang menjembatani palung tengah di papan tempat memotong roti, memungkinkan papan Syn6988 untuk duduk terpusat.

Jika papan terhubung dengan benar, LED siap merah akan menyala ketika TTS tidak berbicara. LED ini akan keluar ketika TTS berbicara, dan pin RDY akan segera rendah (sekitar 0,1 hingga 0,7 detik) setelah pidato dimulai, dan pergi tinggi ketika pidato selesai.
Jika kode inisialisasi di atas digunakan, Micropython berikut akan berbicara dengan "halo" yang agak tenang dari papan:
import syn6988
s = syn6988 . SYN6988 ( ser , busyPin )
s . speak ( "[v1]hello" )Ada sangat sedikit metode dan sifat untuk modul ini:
Bicara ( string ) - Mengirim string ke TTS. Output dapat dibentuk dengan perintah teks tertanam. Menerima teks Unicode termasuk karakter Cina tradisional. Membuat pekerjaan yang sangat buruk dalam mencoba bahasa non-Inggris atau non-Cina.
blok = true | Salah - Secara default, ucapan dipancarkan dalam mode pemblokiran : yaitu, metode speak() tidak akan kembali sampai TTS telah mengindikasikan selesai. Jika block = False diatur, speak() akan segera kembali, tetapi TTS masih akan berbicara dan menunggu diserahkan kepada programmer.
isBusy () - jika dipanggil dalam mode non -blocking, isBusy() kembali benar saat TTS berbicara. Ini dapat digunakan untuk mencegah ucapan interupsi. Jika dipanggil dalam mode pemblokiran, akan selalu mengembalikan false.
Syn6988 dikendalikan oleh perintah yang dikelilingi oleh [] . Ada banyak dari ini, dan saya tidak mengerti semuanya. Saya telah menempatkan beberapa dari mereka dalam test-syn6988.py dengan saya berharap makna yang jelas tentang apa yang mereka lakukan. Secara singkat:
[d] - Setel ulang TTS ke Mode Standar. Dapat berguna setelah memanggil salah satu suara peringatan.
[g0] - Menebak bahasa otomatis; [g1] - Preferensi bahasa Cina; [g2] - Preferensi Bahasa Inggris. Bahasa Inggris yang diucapkan dalam mode Cina memiliki intonasi yang aneh, sementara bahasa Cina yang diucapkan dalam mode bahasa Inggris mungkin tidak terdeteksi dengan benar.
[p*] - Jeda, misalnya [p500] berhenti selama 500 ms.
[s*] - Tingkat bicara: [s0] paling lambat ke [s10] tercepat.
[t*] - nada/pitch: [t0] terendah ke [t10] tertinggi.
[x0] / [x1] - Menafsirkan string yang dimulai dengan "suara" sebagai salah satu dari beberapa ratus (?) Nada, lonceng, dan alarm yang berbeda. Misalnya [x1]soundy[d] memainkan lonceng yang agak menyenangkan yang sangat saya gunakan secara berlebihan. Penting untuk menggunakan [d] setelah perintah ini atau hasil yang tidak terduga akan terjadi. Referensi tabel suara ada di sini: pidato syn-6988 dengan micropython-kami melihat ayam…
[v*] - Volume: [v0] diam, [v1] paling tenang ke [v10] paling keras.
Syn6988 menerima berbagai pengkodean input, tidak ada yang didukung oleh Micropython. Namun, ia mendukung utf16-be (dua byte per char, tidak ada bom, byte tinggi pertama; misalnya: "halo" => b'x00hx00ex00lx00lx00o' ) yang dapat dengan mudah dikuatkan untuk bekerja. Jika data yang dikodekan UTF-16BE kami ada di data_bytes dan kami mendefinisikan
tx_len = len ( data_bytes ) + 2Syn6988 akan menerima aliran byte berikut di atas port serial dan mencoba berbicara:
0xFD, tx_len // 256, tx_len % 256, 0x01, 0x04, data_bytes
String data seharusnya tidak terlalu lama: sesuatu di bawah 4096 karakter, mungkin. Papan dapat memakan waktu hingga 700 ms untuk memproses teks, dan karenanya kami berhenti lama untuk memastikan semua teks diucapkan.
Stewart Russell - Scruss.com - alias @scruss @xoxo.zone
Mit. Jika Anda memperbaiki ini, tolong beri tahu saya agar saya bisa membuat ini lebih baik.
Kode UTF-8-> UTF-16BE berfungsi tetapi terasa seperti itu bisa ditingkatkan. Itu harus tetap ada sesuatu yang bisa saya mengerti.
Ada kemungkinan kecil bahwa teks yang sangat panjang akan dilewati karena saya tidak menunggu cukup lama untuk diproses saat membaca dalam mode pemblokiran.
Generalisasi kode ini (jika memungkinkan) untuk bekerja dengan chipset Syn6288, Syn6658 dan XFS5152. Saya memiliki beberapa di antaranya sesuai pesanan.
Yutone Voicetx Syn6988 Dokumentasi (hanya dalam bahasa Cina): 语音合成芯 片 -Syn6988 中英文 tts 语音芯 片.
Upaya awal saya untuk mengendarai papan ini dari CPYTHON: Pidato dari Python dengan modul Syn6988 - kami melihat ayam…. Ini menghasilkan suara, tapi saya benar -benar mengendarainya secara salah. Namun, masih berfungsi. Memiliki salinan referensi pemrograman yang diterjemahkan secara otomatis, yang harus saya kerjakan.
Puisi Richard Brautigan semuanya diawasi oleh mesin -mesin yang penuh kasih , "baca" oleh chip tts syn6988 yang digerakkan oleh micropython: semua diawasi oleh mesin kasih karunia yang penuh kasih | Soundcloud.