iT邦幫忙

2024 iThome 鐵人賽

DAY 20
1
Python

使用 WiFiBoy Python 玩學機來學物聯網應用 系列 第 20

20. 文字轉語音模塊

  • 分享至 

  • xImage
  •  

這次的編寫鐵人賽文章的過程,一位會友跟我介紹了這個文字轉語音的模組,並傳來令人驚豔的展示影片:

心想:

  1. Raspberry Pi Pico 能用,那麼玩學機一定也能用。
  2. 幾十塊錢的模組就能做到這樣的功能,那工廠休息、用餐,訪客外找等廣播訊息就能結合 WiFiBoy 來處理了。

因此我們就來反找文中的影片是利用哪個 MicroPython 的模組與使用哪一個文字轉語音的模組來實現。

如何找到 MicroPython 的第三驅動程式與模組

我們是利用這個關鍵字 Awesome MicroPython 搜尋,找到這個內容豐富的套件整理網站:

Awesome MicroPython

然後在分類 Text-to-Speech 這個位置,找到了一個名叫 micropython-SYN6988 的專案,點選進去,發現專案的介紹影片就是朋友傳來的這張。

我們來先來讀讀專案裡的說明,研究這個晶片到底要怎麼使用:

說明檔裡面有附一張硬體說明的照片:

作者是這樣陳述的:

SYN6988 是幾種語音合成器/文本轉語音器之一 (TTS) 模組在全球速賣通和其他市場上價格低廉 供應商。這令人印象深刻,因為:

* 它產生清晰的英語語音,而不求助於音素;
* 它有一個線路輸出/耳機插孔和小揚聲器輸出,兩者都是 具有非常乾淨的音訊;
* 它很容易通過異步串行或 SPI(此處未嘗試後者);
* 它在音量、音調和語速上有一定的靈活性;
* 它內置了一個大型的警報音庫;
* 它不貴,約為 🇨🇦 15 美元。

接腳圖:

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)

玩學機要怎麼接上這個文字轉語音的模組?

根據 MicroPython 的官方文件:

https://docs.micropython.org/en/latest/esp32/quickref.html

我們不能使用 UART0 ,因為 MicroPython RPEL 的環境已經先佔用了。

我們從接腳圖著手

SYN6988        MicroPython Board     WiFiBoy Python 玩學機
=========      ===================   ===================   
    RDY            Digital Input       GPIO 2 
	RXD            UART TXD            GPIO 5 (UART 2 TX)
	TXD            UART RXD            GPIO21 (UART 2 RX)
	GND            Ground              GND(WBIO 2)
	3V3            3V3 supply          3V3(OUT) (WBIO 3)

WiFiBoy 實際接線圖

SYN6988 接線圖

SYN6988 語音模組手冊

SYN6988 中英文語音合成晶片是 宇音天下 公司 2020 年推出的產品。官網連結為 http://www.voicetx.com/product/detail.html?id=11,憑藉著模組價格優勢(約兩百元台幣左右),很受市場歡迎。像是醫院叫號、智慧停車、工廠廣播的應用場景都可看到這個產品。

技術文檔連結

控制標記說明

因為這模組是文字轉語音的晶片,可接受傳入GBK 或是 Unicode 字串,就能產生相對應的中英文語音。但因為不同語言的聲調、中英文與數字混合時有不同的發音、語調與語速。因此,要讓系統發音能夠接近真人,就需要針對傳入的字串做一些標記處理。開發者文件最重要的部份也是這個章節。一般使用者知道如何控制傳入的字串,就能很輕鬆地使用 WiFiBoy Python 玩學機為自己家裡或是公司,做一個資訊語音裝置,甚至要它幫您讀報也可以。

重要的幾個參數有:

  • 控制語速: [S*],預設 [S5],語速值: 0 ~ 10。數值越小,語速越慢。
  • 音量調節: [V*],預設 [V5],音量值: 0 ~ 10。數值越小,聲音約小。
  • 提示音樂: [X*],預設 [X1],0 代表不使用提示音,1 代表使用提示音。
  • 中文發音風格 : [F*],預設 [F1],0 一字一頓,1 平順念出。
  • 中文讀標點 : [B*],預設 [B0],0 不讀標點,1 讀標點。

英文語音相關設定

  • 語種設定 : [G*],預設 [G0],0 自動判斷,1 設定成中文, 2 設定成英文。
  • 英文0讀法: [o*],預設 [o0],0 讀成 zero,1 強制讀成英文 o 音。
  • 英文韻律加強: [K*],預設 [K0],0 韻律不停頓、1 韻律停頓加長 50 毫秒、每家一多停頓 50*數字 的長度。
  • 英文單詞發音方式: [H*],預設 [H0],0 自動判斷。

實例說明:

  1. [n2]有123公斤重。[d] 讀做「有一百二十三公斤重」。
  2. [v5]歡迎參加[v8]2024 ITHome鐵人賽[v2],WiFiBoy 歡迎您![d]

如何使用 MicroPython SYN6988 的驅動程式

micropython-SYN6988 專案整個下載,解壓縮專案檔,裡面有一個 syn6988.py,將這個 py 檔上傳到玩學機 Flash 的 lib 目錄下即可。

請參考我們的範例教學:

念手機號碼

import time
import machine
import lib.syn6988
# WiFiBoy 接腳
# GND   ---> GND
# 3V3   ---> 3V3
# IO2   ---> RDY  
# IO5   ---> TX
# IO21  ---> RX
### setup device
ser = machine.UART(
    2, baudrate=9600, bits=8, parity=None, stop=1, tx=5, rx=21
)

busyPin = machine.Pin(21, machine.Pin.IN, machine.Pin.PULL_UP)
s = lib.syn6988.SYN6988(ser, busyPin)

def speak_and_spell(r):
    # print then speak string r
    s.speak(r)
    return s

str = "0912-345678 來電"
speak_and_spell(str)

念時間日期

str2 = "[g1]2024-08-20 10:36:28"
speak_and_spell(str2)

系統提示音開頭,並加強語調

str3 = "[x1]sound112[m3][g1][v6][n2][i1][y1][f0][b1]2024 ITHome 鐵人賽完賽!"
speak_and_spell(str3)

中英文混唸

speak_and_spell(
    "[g2]Hello! WiFiBoy[g1]你好![g2]" )  # language selection with [g*]
speak_and_spell("I can speak in English, and also in Chinese:")
speak_and_spell("[g1]千里之行,始於足下。[g2]")
speak_and_spell(
    "which means: a journey of five hundred kilometres starts with the first step")

參考資料

  1. micropython-SYN6988
  2. MicroPython UART 文件
  3. SYN6988 開發者手冊

上一篇
19. 玩學機內建的音樂模組
下一篇
21. 兩台玩學機互傳訊息
系列文
使用 WiFiBoy Python 玩學機來學物聯網應用 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言