ไลบรารี Micropython สำหรับ 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 เป็นหนึ่งในหลายโมดูล synthesizer / text-to-speech (TTS) ที่มีอยู่ในราคาไม่แพงบน Aliexpress และผู้ขายรายอื่น มันน่าประทับใจเพราะ:
มันสร้างคำพูดภาษาอังกฤษที่ชัดเจนโดยไม่ต้องหันไปใช้หน่วยเสียง
มันมีแจ็คสาย / หูฟังและเอาต์พุตลำโพงขนาดเล็กทั้งสองมีเสียงที่สะอาดมาก
มันง่ายที่จะเชื่อมต่อไม่ว่าจะผ่านอนุกรมอะซิงโครนัสหรือ SPI (หลังไม่ได้พยายามที่นี่);
มันมีความยืดหยุ่นในระดับเสียงระดับเสียงและอัตราการพูด (แต่มันไม่ใช่ dectalk);
มันมีห้องสมุดขนาดใหญ่ของเสียงเตือนในตัว
มันไม่แพงอยู่รอบ ๆ ?? $ 15.
แน่นอนว่ามีข้อเสีย:
เอกสารทั้งหมด จนถึงตอนนี้ เป็นภาษาจีน
มันมีเสียงผู้หญิงที่มีความเข้มข้นเพียงหนึ่งเสียงที่มีการคลอดหุ่นยนต์เล็กน้อย
คุณอาจไม่ได้รับบอร์ดที่คุณสั่ง! ฉันขายบอร์ดนี้ว่ามีชิป XFS5152 เมื่อมันมี SYN6988 อย่างชัดเจน
เป็นการยากที่จะแนะนำผู้ขายเนื่องจากฉันไม่สามารถรับประกันได้ว่าพวกเขากำลังขายบอร์ดที่มี SYN6988 อยู่ ตรวจสอบว่าคำอธิบายของผู้ขายบอกว่า SYN6988 (มีชิปที่คล้ายกัน SYN6288 และ SYN6658 ที่มีความสามารถที่แตกต่างกัน) และบอร์ดมีชิปที่มี SYN6988 SYN6988 ที่ชัดเจน ฉันเคยเห็นบอร์ดสองสามใบที่บอกว่า SYN6658 บน PCB Silkscreen แต่มี SYN6988 ในภาพและคำอธิบาย
SYN6988 เป็นอุปกรณ์ 3.3 V สำหรับทั้งตรรกะและพลังงาน มันต้องใช้การเชื่อมต่อ 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 baud
สำหรับ 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 )เอาต์พุตเสียงผ่านหูฟัง / สายแจ็คหรือผ่านหมุดลำโพง เอาต์พุตนี้ไม่ได้รับการแก้ไข ฉันสามารถขับลำโพงรูปไข่ขนาดเล็กมากในปริมาณที่สะดวกสบายจากหมุดลำโพง แต่ heaphones ขนาดใหญ่อาจเงียบมาก
บอร์ดที่ฉันมีไม่ได้เป็นมิตรกับกระดานจากระยะไกล ฉันแก้ไขได้ด้วยการเอาส่วนหัวของ Arduino 6-pin สองตัวแล้วงอหมุดออกมาและกลับเข้าไปในมุมที่ถูกต้องจากนั้นติดกาวส่วนหัวทั้งสองกลับไปด้านหลัง สิ่งนี้ให้บล็อกส่วนหัวที่เชื่อมโยงรางกลางในเขียงหั่นขนมทำให้บอร์ด Syn6988 นั่งอยู่ใจกลางเมือง

หากบอร์ดเชื่อมต่ออย่างถูกต้อง LED พร้อมสีแดงจะสว่างขึ้นเมื่อ TTS ไม่ได้พูด LED นี้จะออกไปเมื่อ TTS กำลังพูดและ PIN RDY จะลดลงในไม่ช้า (ประมาณ 0.1 ถึง 0.7 s) หลังจากการพูดเริ่มต้นและสูงขึ้นเมื่อพูดเสร็จ
หากใช้รหัสเริ่มต้นด้านบน micropython ต่อไปนี้จะพูด "สวัสดี" ที่ค่อนข้างเงียบจากบอร์ด:
import syn6988
s = syn6988 . SYN6988 ( ser , busyPin )
s . speak ( "[v1]hello" )มีวิธีการและคุณสมบัติน้อยมากสำหรับโมดูลนี้:
พูด ( สตริง ) - ส่ง สตริง ไปยัง 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*] - โทน/พิทช์: [t0] ต่ำสุด [t10] สูงสุด
[x0] / [x1] - ตีความสตริงที่ขึ้นต้นด้วย "เสียง" เป็นหนึ่งในหลายร้อย (?) โทนเสียงระฆังและสัญญาณเตือนที่แตกต่างกัน ตัวอย่างเช่น [x1]soundy[d] เล่นเป็นเสียงระฆังที่ค่อนข้างน่าพอใจซึ่งฉันใช้มากเกินไป สิ่งสำคัญคือการใช้ [d] หลังจากคำสั่งนี้หรือผลลัพธ์ที่ไม่คาดคิดจะเกิดขึ้น การอ้างอิงตารางเสียงอยู่ที่นี่: คำพูด syn-6988 กับ micropython-เราเห็นไก่ ...
[v*] - ปริมาตร: [v0] เงียบ [v1] เงียบที่สุดถึง [v10] ดังที่สุด
SYN6988 ยอมรับการเข้ารหัสอินพุตที่หลากหลายซึ่งไม่มีการสนับสนุนโดย micropython อย่างไรก็ตามมันสนับสนุน utf16-be (สองไบต์ต่อถ่านไม่มี bom, ไบต์สูงก่อน; เช่น: "hello" => 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 มิลลิวินาทีในการประมวลผลข้อความและด้วยเหตุนี้เราจึงหยุดชั่วคราวเพื่อให้แน่ใจว่าข้อความถูกพูดทั้งหมด
Stewart Russell - scruss.com - aka @scruss @xoxo.zone
MIT หากคุณปรับปรุงสิ่งนี้โปรดแจ้งให้เราทราบเพื่อที่ฉันจะได้ทำให้สิ่งนี้ดีขึ้น
รหัส UTF-8-> UTF-16BE ใช้งานได้ แต่รู้สึกว่ามันสามารถปรับปรุงได้ มันต้องอยู่ในสิ่งที่ฉันเข้าใจได้
มีโอกาสเล็กน้อยที่ข้อความยาวจริง ๆ จะถูกข้ามไปเพราะฉันไม่รอนานพอที่จะประมวลผลเมื่ออ่านในโหมดการปิดกั้น
สรุปรหัสนี้ (ถ้าเป็นไปได้) เพื่อทำงานกับชิปเซ็ต SYN6288, SYN6658 และ XFS5152 ฉันมีหลายสิ่งเหล่านี้ตามลำดับ
Yutone Voicetx SYN6988 เอกสาร (เป็นภาษาจีนเท่านั้น): 语音合成芯 -Syn6988 中英文 TTS 语音芯
ความพยายามครั้งแรกของฉันในการขับบอร์ดนี้จาก Cpython: คำพูดจาก Python ด้วยโมดูล Syn6988 - เราเห็นไก่…. สิ่งนี้ทำให้เกิดเสียง แต่ฉันขับรถผิดจริง ยังคงใช้งานได้แม้ว่า มีสำเนาอ้างอิงการเขียนโปรแกรมอัตโนมัติซึ่งเป็นทั้งหมดที่ฉันต้องทำงาน
บทกวีของ Richard Brautigan ทุกอย่างจับตามองโดย Machines of Loving Grace , "อ่าน" โดยชิป TTS Syn6988 ที่ขับเคลื่อนโดย Micropython: ทุกคนเฝ้าดูเครื่องจักรแห่งความรัก SoundCloud