語音播報功能的實現(xiàn)
TTS是Text To Speech的縮寫,即“從文本到語音”,是人機對話的一部分,讓機器能夠說話。
語音播報功能的實現(xiàn)方式
TTS語音模塊,比如XFS5152、SYN6288等
ISD4000系列語音錄放芯片分段輸出
可以按鍵、UART控制的mp3解碼芯片模塊
OTP(One Time Programable)語音芯片[定制]
其中TTS語音模塊使用起來最方便靈活,OTP語音芯片最簡單。
本文將介紹一下科大訊飛的XFS5152CE語音合成模塊。
XFS5152CE語音合成模塊
XFS5152CE是一款高集成度的語音合成芯片,可實現(xiàn)中文、英文語音合成;并集成了語音編碼、解碼功能,可支持用戶進行錄音和播放;除此之外,還創(chuàng)新性地集成了輕量級的語音識別功能,支持30個命令詞的識別。
內(nèi)置的30個語音識別命令詞
手冊說如果需要定制命令詞需要跟廠家聯(lián)系,我體驗了一下,識別的準(zhǔn)確率不是很高。
如果需要語音識別功能,可以使用LD3320模塊,參考網(wǎng)文:LD3320語音識別模塊:LDV7模塊使用詳解
如果需要錄音模塊,建議使用ISD系列錄音芯片,參考網(wǎng)文:簡單好用的ISD1820語音錄放芯片
為了使用方便,我們可以直接購買現(xiàn)成的XFS5152CE語音合成模塊。
通訊接口
XFS5152CE 芯片支持 UART 接口、I2C 接口、SPI 接口三種通訊方式,可通過 UART 接口、 I2C 或 SPI 接口接收上位機發(fā)送的命令和數(shù)據(jù),允許發(fā)送數(shù)據(jù)的最大長度為 4K字節(jié)。
用戶在使用語音編解碼功能時(通訊接口必須選擇 UART 接口,并且波特率設(shè)置為 115200bps),上位機發(fā)送啟動編解碼的命令給語音芯片,芯片內(nèi)部的語音編解碼模塊把采集到的音頻數(shù)據(jù)進行編碼并通過UART接口實時傳送給上位機,或者對上位機傳送來的音頻數(shù)據(jù)進行解碼并實時播放出來。
接線方式
PC上使用官方演示程序《科大訊飛語音合成芯片PC端演示程序》,使用串口通信進行測試的接線方式如下:
如果使用單片機與XFS5152CE語音合成模塊聯(lián)用,模塊的8腳和10腳與STM32的串口交叉連接(我使用的是串口2),7腳用于判斷語音模塊當(dāng)前的狀態(tài),原理圖如下所示:
注意:
關(guān)于功放引腳4腳和6腳:可以根據(jù)喇叭的功率來選擇相應(yīng)功率的功放,比如5W以內(nèi)喇叭可以選擇單聲道功放XPT8871、LTK5128,15W的喇叭可以選擇TDA7297等雙聲道功放;
關(guān)于語音識別:只有使用語音識別功能的時候才需要接咪頭(如:9767型咪頭),且只能識別芯片指定的30條命令詞;
通過模塊板子上的撥碼開關(guān)選擇波特率,如撥到"√XX√"表示9600,模塊的通訊比特率要跟上位機或者與之相連的單片機的比特率一致;
3.3V供電。
1. 串口初始化
參考網(wǎng)文:
STM32F103 串口的使用方法
uart2_init(115200);
通過撥碼開關(guān)設(shè)置波特率為:115200
2. 工作狀態(tài)指示輸出引腳初始化
/BSY引腳用于指示當(dāng)前的工作狀態(tài),低電平代表Ready狀態(tài),高電平代表Busy狀態(tài)。
用單片機的一個GPIO與之相連,可以讀取該IO的輸入狀態(tài),即可獲取當(dāng)前模塊處于的工作狀態(tài)。
#define U5152_BSY GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
void U5152_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
//U5152_BSY
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //設(shè)置成上拉輸入
GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化GPIOA0
}
3. 封裝播報語音函數(shù)
控制標(biāo)識需要按照語音合成命令的格式發(fā)送,控制標(biāo)記作為文本進行合成,即合成命令是“幀頭 + 數(shù)據(jù)區(qū)長度 + 合成命令字 + 文本編碼格式 + 控制標(biāo)記文本”的格式。
語音合成命令幀示例:
/***********************************************************
* 名 稱:YS-XFS5051 文本合成函數(shù)
* 功 能:發(fā)送合成文本到XFS5051芯片進行合成播放
* 入口參數(shù):*HZdata:文本指針變量
* 出口參數(shù):
* 說 明:本函數(shù)只用于文本合成,具備背景音樂選擇。默認(rèn)波特率9600bps。
* 調(diào)用方法:例:SYN_FrameInfo(“歡迎關(guān)注微信公眾號:程序員小哈”);
**********************************************************/
void XFS_FrameInfo(char *HZdata)
{
/****************需要發(fā)送的文本**********************************/
unsigned char Frame_Info[50]; //定義的文本長度 xdata
unsigned int HZ_Length;
HZ_Length =strlen(HZdata); //需要發(fā)送文本的長度
/*****************幀固定配置信息**************************************/
Frame_Info[0] = 0xFD ; //構(gòu)造幀頭FD
Frame_Info[1] = 0x00 ; //構(gòu)造數(shù)據(jù)區(qū)長度的高字節(jié)
Frame_Info[2] = HZ_Length+2; //構(gòu)造數(shù)據(jù)區(qū)長度的低字節(jié)
Frame_Info[3] = 0x01 ; //構(gòu)造命令字:合成播放命令
Frame_Info[4] = 0x01; //文本編碼格式:GBK
/*******************發(fā)送幀信息***************************************/
memcpy(&Frame_Info[5], HZdata, HZ_Length);
USART2_OUT(Frame_Info,5+HZ_Length); //發(fā)送幀配置
}
4. 播報當(dāng)前時間語音
while(U5152_BSY){}
sprintf((char*)dtbuf,"[v5][s5][m55]當(dāng)前時間為%02d時%02d分%02d秒",NowHour,NowMinute,NowSecond);
XFS_FrameInfo((char*)dtbuf) ;
delay_ms(10);
while(U5152_BSY){}
5. 文本控制標(biāo)記
XFS5152CE 芯片的語音合成功能支持多種文本控制標(biāo)記,可以滿足用戶對語音合成發(fā)音人、音量、語速、語調(diào)等的設(shè)置。文本控制標(biāo)記的格式一般是半角中括號(即“[]”)內(nèi)一個小寫字母、一個阿拉伯?dāng)?shù)字,如:[m3]為使用女聲的發(fā)音人小燕。
文本控制標(biāo)記舉例
sprintf((char*)dtbuf,"[v5][s5][m3]當(dāng)前時間為%02d時%02d分%02d秒 \r\n",NowHour,NowMinute,NowSecond);
[v5]:代表音量值,有效范圍為:0~10;
[s5]:為語速值,取值范圍為:0~10;
[m3]:選擇發(fā)音人為小燕(女聲)
總結(jié)
模塊優(yōu)點,文字轉(zhuǎn)語音很方便,很靈活
價格較貴,所以我們很多情況不需要功能這么強大的TTS語音模塊,有些場景,我們甚至沒有必要購買TTS語音模塊,比如語音開發(fā)中常見的費用催繳,撥通后播放:“尊敬的客戶,您本月的費用是:212元”,前面部分對所有客戶都一樣,錄一個語音文件就是了,而數(shù)字的合成是很簡單的,你只要錄制好10個數(shù)字語音,再加上十,百,千,萬,再加上金錢的單位“元”即可。
資料獲取
微信公眾號后臺回復(fù)“XFS5152CE語音合成模塊”,可以下載模塊相關(guān)資料。
推薦閱讀:
STM32F103 串口的使用方法
LD3320語音識別模塊:LDV7模塊使用詳解
簡單好用的ISD1820語音錄放芯片
喜歡請關(guān)注微信公眾號:程序員小哈
公眾號內(nèi)容面向在校大學(xué)生、電子愛好者、嵌入式工程師;
涉及電子制作、模塊使用、單片機技術(shù)、物聯(lián)網(wǎng)相關(guān)知識分享;
玩模塊,學(xué)硬件,帶你從0走到1
若覺得本次分享的文章對您有幫助,隨手點[在看]并轉(zhuǎn)發(fā)分享,也是對我的支持。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!