基于ESP32的文本到語(yǔ)音(TTS)轉(zhuǎn)換web服務(wù)器
掃描二維碼
隨時(shí)隨地手機(jī)看文章
文本轉(zhuǎn)語(yǔ)音(TTS)技術(shù)已被廣泛應(yīng)用于語(yǔ)音助手、廣播、自動(dòng)取款機(jī)等領(lǐng)域。它也被用來幫助兒童學(xué)習(xí)說話和盲人交流。今天我們將使用ESP32來構(gòu)建一個(gè)TTS(文本到語(yǔ)音)引擎,它可以將任何數(shù)字轉(zhuǎn)換為語(yǔ)音。號(hào)碼將從網(wǎng)頁(yè)輸入,語(yǔ)音將從ESP32附帶的揚(yáng)聲器生成。也可以查看其他基于ESP32的物聯(lián)網(wǎng)項(xiàng)目。
所需的組件
?ESP32單片機(jī)
?一個(gè)演講者
?一種放大電路
?穩(wěn)壓電源
?連接電線
線路圖
我們可以通過將揚(yáng)聲器連接到ESP32直接驅(qū)動(dòng)揚(yáng)聲器,但聲音會(huì)有很多噪音。因此,這里使用放大器電路來獲得清晰響亮的聲音。這里使用的是基于LM386的放大電路,其電路圖如下:
這個(gè)電路圖取自這個(gè)鏈接LM386基于音頻放大器電路,通過這個(gè)鏈接了解更多關(guān)于這個(gè)放大器的功能。
連接揚(yáng)聲器到ESP32
完成上述放大電路后,將ESP32連接到放大電路上,如下圖所示。ESP32的數(shù)字引腳25連接到10K電阻,ESP32的地連接到放大電路的地。
ESP32文本到語(yǔ)音的編程
使用ESP32將文本轉(zhuǎn)換為語(yǔ)音的編程部分很簡(jiǎn)單。完整的代碼和演示視頻在本教程的最后給出。
首先,我們必須安裝一個(gè)名為Talkie的庫(kù),它可以從這里下載。然后通過Sketch->Include Library-> add . zip Library將其添加到Arduino IDE中。
然后通過包含所有必需的庫(kù)開始編寫代碼?!癢ifi.h”、“WifiClient.h”用于創(chuàng)建客戶端,通過Wi-Fi連接到ISP。WebServer.h用于創(chuàng)建web服務(wù)器,espmdn .h用于本地mDNS請(qǐng)求。
接下來為Talkie定義對(duì)象語(yǔ)音。
在下一部分中,我們將定義數(shù)字(即1、2、3等)。你也可以添加更多的單詞/音素,通過記錄每個(gè)聲音并將其轉(zhuǎn)換為十六進(jìn)制代碼。有各種軟件可用于將它們轉(zhuǎn)換為十六進(jìn)制,如二進(jìn)制查看器。
現(xiàn)在定義一個(gè)函數(shù),它可以輸出-999,999到999,999之間的任何數(shù)字。這個(gè)函數(shù)可以在Talkie庫(kù)中找到。這個(gè)函數(shù)使用簡(jiǎn)單的邏輯。首先,它會(huì)檢查數(shù)字是否為負(fù),如果是負(fù)的,它會(huì)在說出單詞之前加上一個(gè)“-”。如果它是零,那么它說的是零。
然后它檢查這個(gè)數(shù)字是否大于或等于千,這樣它就可以在輸入之前附加“千”。然后,它通過將數(shù)字除以1000來檢查余數(shù),以告訴1000之后的數(shù)字。同樣的邏輯用于百位數(shù)或三位數(shù)。
現(xiàn)在設(shè)置Wi-Fi。在代碼中輸入替換Wi-Fi的名稱和密碼。因?yàn)槲覀兪褂玫氖荋TTP協(xié)議,所以我們?cè)趕erver()函數(shù)中輸入80。因?yàn)?0是HTTP的默認(rèn)端口號(hào)。
現(xiàn)在定義一個(gè)數(shù)組htmlResponse來獲取來自網(wǎng)頁(yè)的輸入。
接下來定義一個(gè)函數(shù)handleRoot()來創(chuàng)建一個(gè)html頁(yè)面。snprintf()函數(shù)用于生成其中編碼的html頁(yè)面?,F(xiàn)在,通過將htmlResponse數(shù)組及其大小傳遞給它,開始對(duì)html頁(yè)面進(jìn)行編碼。首先給標(biāo)題命名為“文本到語(yǔ)音”。然后在HTML中創(chuàng)建文本框和按鈕。
接下來編寫JavaScript代碼。首先為我們正在獲取的輸入定義一個(gè)變量Number,然后將文本框中輸入的值賦給Number。最后將網(wǎng)頁(yè)發(fā)送到服務(wù)器。
在下一部分中定義一個(gè)函數(shù)handleSave()。這里我們把字符串轉(zhuǎn)換成整型,因?yàn)槲覀兊玫降妮斎胧且粋€(gè)字符串,為了把它說出來,我們必須把它作為整型來使用。
現(xiàn)在在setup()函數(shù)中,首先,我們將數(shù)字引腳25定義為輸出并保持高電平。然后使用Wifi.begin()函數(shù)初始化Wi-Fi,并打印一些狀態(tài)信息。然后在接下來的幾行中,我們通過調(diào)用handleRoot()函數(shù)啟動(dòng)服務(wù)器,并通過調(diào)用handleSave()函數(shù)從web頁(yè)面獲取輸入,最后打印消息“HTTP服務(wù)器已啟動(dòng)”。
文本到語(yǔ)音轉(zhuǎn)換使用ESP32通過網(wǎng)頁(yè)
最后使用Arduino IDE將代碼上傳到ESP32并運(yùn)行。打開串口監(jiān)視器,復(fù)制串口監(jiān)視器顯示的IP地址,如下圖所示。
網(wǎng)頁(yè)看起來是這樣的:
輸入任意號(hào)碼,點(diǎn)擊“說話”按鈕,系統(tǒng)就會(huì)說出該號(hào)碼。
這就是ESP32如何將文本轉(zhuǎn)換為語(yǔ)音,這個(gè)網(wǎng)頁(yè)可以在世界任何地方通過轉(zhuǎn)發(fā)Wi-Fi路由器的端口打開。
本文編譯自iotdesignpro