一.方案背景描述
隨著科技的飛速發(fā)展,人工智能和語音識別技術(shù)在各個領(lǐng)域都得到了廣泛應(yīng)用。其中,文本轉(zhuǎn)語音(TTS)技術(shù)以其獨特的優(yōu)勢,在收款機語音播報收銀領(lǐng)域發(fā)揮著越來越重要的作用。本文將深入探討TTS技術(shù)在收款機播報收銀中的具體應(yīng)用,包括技術(shù)概述、播報需求、應(yīng)用優(yōu)勢、內(nèi)容定制、用戶體驗提升以及未來的發(fā)展趨勢與展望。
1.TTS技術(shù)概述
TTS,即文本轉(zhuǎn)語音技術(shù),是一種能夠?qū)?a class="article-link" target="_blank" href="/tag/%E8%AE%A1%E7%AE%97%E6%9C%BA/">計算機中的文本信息轉(zhuǎn)化為可聽懂的語音輸出的技術(shù)。它基于先進的語音合成算法,結(jié)合自然語言處理技術(shù)和語音學(xué)知識,能夠生成流暢自然的語音。在收款機播報收銀中,TTS技術(shù)能夠?qū)⒔灰仔畔崟r轉(zhuǎn)化為語音,方便顧客了解交易詳情。
2.收款機播報需求
在商場、超市等零售場所,收款機播報收銀的需求日益凸顯。通過語音播報,顧客可以無需查看屏幕即可了解交易金額、找零等信息,大大提高了購物體驗和效率。同時,對于視力不佳或不便查看屏幕的顧客來說,語音播報更是提供了極大的便利。
3.TTS應(yīng)用優(yōu)勢
TTS技術(shù)在收款機播報收銀中的應(yīng)用具有以下優(yōu)勢:首先,實時性強,能夠?qū)崟r將交易信息轉(zhuǎn)化為語音輸出;其次,準(zhǔn)確度高,能夠確保播報內(nèi)容的準(zhǔn)確性;再次,靈活性好,可以根據(jù)實際需求定制播報內(nèi)容;最后,用戶體驗佳,通過語音播報提高了顧客購物的便捷性和舒適性。
4.播報內(nèi)容定制
在TTS應(yīng)用中,播報內(nèi)容的定制是關(guān)鍵一環(huán)。收款機可以根據(jù)實際需求和場景設(shè)置不同的播報內(nèi)容,包括交易金額、支付方式、找零情況、優(yōu)惠信息等。同時,還可以根據(jù)顧客的偏好和需求進行個性化定制,提高播報內(nèi)容的針對性和實用性。
5.用戶體驗提升
通過應(yīng)用TTS技術(shù),收款機播報收銀可以顯著提升用戶體驗。顧客在購物過程中無需分心查看屏幕或詢問收銀員,就能獲取到完整的交易信息。此外,語音播報還可以配合其他交互方式,如語音識別、觸摸屏等,提供更加便捷、智能的購物體驗。
TTS(Text To Speech,從文本到語音)技術(shù)作為人機對話的一部分,近年來隨著人工智能的發(fā)展得到了顯著的進步。TTS技術(shù)的應(yīng)用范圍廣泛,包括電子郵件的閱讀、IVR系統(tǒng)的語音提示等,并在各個行業(yè)中發(fā)揮著重要作用。關(guān)于TTS技術(shù)的發(fā)展前景,有以下幾個方面的趨勢:
更高的自然度和真實感:隨著深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)技術(shù)的不斷進步,TTS系統(tǒng)能夠?qū)W習(xí)自然語言中的各種聲音和音調(diào),生成的語音將更接近人類的語音特征,從而提高語音的自然度和真實感。
個性化定制:TTS系統(tǒng)有望通過學(xué)習(xí)用戶的語音、音調(diào)、口音等特征,生成更符合用戶需求的語音。這將使得語音合成技術(shù)更加貼近用戶的個性化需求,從而提高用戶體驗。
多語言支持:隨著跨語言翻譯和多語言交流的需求不斷增加,TTS系統(tǒng)將需要支持更多的語言和口音。這將推動TTS技術(shù)在多語言場景下的應(yīng)用和發(fā)展。
多樣化的語音風(fēng)格和情感表達:TTS系統(tǒng)將進一步提供多樣化的語音風(fēng)格和情感表達能力。用戶可以根據(jù)個人喜好和需求選擇不同的語音風(fēng)格,如年齡、性別、口音等。
廣泛的應(yīng)用領(lǐng)域:除了傳統(tǒng)的應(yīng)用領(lǐng)域,TTS技術(shù)還將進一步應(yīng)用于虛擬人物、機器人等場景中,為這些領(lǐng)域帶來更加真實的語音交互體驗。
綜上所述,TTS技術(shù)的發(fā)展前景十分廣闊,未來將在提高語音質(zhì)量和自然度、個性化定制、多語言支持以及多樣化應(yīng)用等方面取得更多的突破和創(chuàng)新。這將為用戶帶來更加便捷、高效和真實的語音交互體驗,推動人機交互技術(shù)的發(fā)展。
綜上所述,TTS技術(shù)在收款機播報收銀中具有重要的應(yīng)用價值和發(fā)展前景。通過不斷優(yōu)化和完善技術(shù),我們可以期待它在未來為零售行業(yè)帶來更多的創(chuàng)新和變革。本方案采用WT3000T芯片增加語音功能。不但可用耳朵聽語音播報收款的情況等(依用戶需求設(shè)置),而且可以播放音樂或英語口語美文。解決了在不同播報要求下語音占用大量資源空間的問題??梢詫崿F(xiàn)低成本低功耗的文本轉(zhuǎn)語音,支持中英文兩種功能,實現(xiàn)播報語音自由配置無需通過升級方式替換語音,給方案商提供性價比非常高的解決方案。
WT3000T8是一款功能強大的高品質(zhì)語音芯片,采用了高性能32位處理器、最高頻率可達240MHz。WT3000T8高集成度的語音合成芯片,可實現(xiàn)中文、英文字母語音合成;并集成了語音編碼、解碼功能,可支持用戶進行語音合成和語音播放,具有低成本、低功耗、高可靠性、通用性強等特點,現(xiàn)有WT3000T8-32N ?QFN32(體積小4*4MM)的封裝芯片。帶有地址播放、插播、單曲循環(huán)、所有曲目循環(huán)、隨機播放等功能。31級音量可調(diào)、最大可以支持外掛128Mbit的Flash。
深圳唯創(chuàng)知音電子有限公司,位于廣東省深圳市寶安區(qū),1999年成立于廣州。歷經(jīng)20多年的發(fā)展,公司已成為集研發(fā)、生產(chǎn)、銷售和服務(wù)于一體的,專注于語音技術(shù)研究、語音產(chǎn)品方案設(shè)計及控制等軟、硬件設(shè)計的國家高新技術(shù)企業(yè)。在北京、廣州、武漢、上海等地?fù)碛卸嗉易庸荆瑯?gòu)筑了面向全國的經(jīng)營和服務(wù)網(wǎng)絡(luò),涵蓋家電、醫(yī)療器械、安防報警、汽車電子、多媒體、通信、電話錄音、工業(yè)自動化控制、玩具及互動消費類產(chǎn)品等領(lǐng)域,公司的集成芯片和模塊主要有:播放類、錄音類、MP3類、藍牙WiFi類、語音識別類。唯創(chuàng)知音已經(jīng)形成標(biāo)準(zhǔn)的品質(zhì)保障流程和高效的服務(wù)體系。芯片資料可向公司官網(wǎng)或客服索取相關(guān)資料,如果有訂制需求,也可向客服咨詢,可提供更多的技術(shù)服務(wù)。
公司成品線主要產(chǎn)品涵蓋有工地安全、電梯安全(語音廣告)、森林防火安全提示、垃圾分類提示、娛樂、店鋪迎賓等業(yè)務(wù)領(lǐng)域,涉及政府、工業(yè)、文教、交通、能源和企業(yè)等行業(yè)應(yīng)用。
二.方案系統(tǒng)組成
2.1系統(tǒng)主要功能
??控制方式:UART(或者SPI),默認(rèn)波特率9600;
??上電默認(rèn)不播放;具備BUSY狀態(tài)指示,上電默認(rèn)BUSY播放時為低電平,不播放時為高電平(可發(fā)碼修改默認(rèn)配置);
??音頻輸出方式,樣品默認(rèn)DAC輸出;
??支持語音高品質(zhì)音頻格式,(8kbps~320kbps)聲音優(yōu)美,.MP3、.WAV格式;
??支持指令隨機播放,無縫循環(huán)播放功能等;
??最大可以支持128Mbit的Flash;
??音量可調(diào),音量等級31級;
??大功率IO驅(qū)動能力,最高可直接驅(qū)動32mA;
??支持任意中文文本、英文字母的合成,并且支持中文與英文字母混讀,英文字母暫不支持使用標(biāo)記實現(xiàn)變速變調(diào);
芯片支持任意中文、英文字母的合成,可以采用GB 2312編碼方式。每次合成的文本量最多可達2K字節(jié)。
芯片對文本進行分析,對常見的數(shù)字、號碼、時間、日期、度量衡符號等格式的文本,芯片能夠根據(jù)內(nèi)置的文本匹配規(guī)則進行正確的識別和處理。
??支持多種控制命令
如合成文本、停止合成、暫停合成、恢復(fù)合成、狀態(tài)查詢、進入休眠模式、喚醒等。 控制器通過通訊接口發(fā)送控制命令可以對芯片進行相應(yīng)的控制。芯片的控制命令非常簡單易用,例如:芯片可通過參考對應(yīng)的指令說明即可實現(xiàn)播放提示音和中文文本合播放成,還可以通過標(biāo)記文本實現(xiàn)對合成的參數(shù)設(shè)置。
??支持多種方式查詢芯片的工作狀態(tài)
包括:查詢狀態(tài)管腳電平、通過讀芯片自動返回的工作狀態(tài)字、發(fā)送查詢命令獲得芯片工作狀態(tài)的回傳數(shù)據(jù)。
??單芯片使用(使用內(nèi)置容量)時內(nèi)置語音需出廠前寫入。
2.2系統(tǒng)結(jié)構(gòu)框圖
2.3主要芯片介紹
程序及模塊選型簡介
系列 | 功能代碼 | 通信方式 | 模塊選型 | 音頻輸出 | 功能說明 |
WT3000T系列 | T001 | UART(9600) | M01 | DAC | 僅支持內(nèi)置Flash播放,可存放30秒固定語音 |
2.4 引腳描述
芯片封裝管腳圖
PIN-NO. | 名稱 | 功能說明 |
0 | GND | 芯片底部地(必須接地) |
1 | VMID | 連接一個1uF外部電容到地 |
2 | DACL | DAC左聲道音頻輸出 |
3 | DACR | DAC右聲道音頻輸出 |
4 | NC | 保留此引腳懸空 |
5 | P27 | IO口 |
6 | P26 | IO口 |
7 | P25 | IO口 |
8 | P24 | IO口 |
9 | P21 | IO口 |
10 | VCC | 電源輸入 |
11 | VREG | 接一個1uF電容到地 |
12 | P19 | IO口 |
13 | P18 | IO口 |
14 | P17 | IO口 |
15 | P16 | IO口 |
16 | VCM | 參考電壓輸出,接一個0.1uF外部電容到地 |
17 | XIN | 無 |
18 | XOUT | 無 |
19 | P37/SPI_DO | SPI Flash數(shù)據(jù)輸出 |
20 | P36/SPI_CLK | SPI Flash時鐘 |
21 | P35/SPI_DI | SPI Flash數(shù)據(jù)輸入 |
22 | P34/SPI_CS | SPI Flash片選 |
23 | ICEDAT/RX1 | UART_RX,語音芯片數(shù)據(jù)接收 |
24 | ICECLK/TX1 | UART_TX,語音芯片數(shù)據(jù)發(fā)送 |
25 | UART_RX | IO口 |
26 | UART_TX | IO口 |
27 | P01 | Busy顯示 |
28 | P00 | IO口 |
29 | P39 | IO口 |
30 | NC | 保留此引腳懸空 |
31 | VOUT | 芯片內(nèi)部IO電源3.3V輸出,必須接106電容到地 |
32 | AGND | 模擬地 |
2.5 WT3000T M01模塊
管腳描述
接口 | 名稱 | 功能說明 |
1 | 5V | 電源輸入(2.6-5V) |
2 | GND | 電源地 |
3 | TX | UART_TX,通信端口 |
4 | RX | UART_RX,通信端口 |
5 | MIC+ | 未啟用 |
6 | MIC- | 未啟用 |
7 | SPK- | 模塊內(nèi)部功放左聲道輸出 |
8 | SPK+ | 模塊內(nèi)部功放右聲道輸出 |
注:MIC接口、天線、晶振部分為兼容其他型號及后續(xù)產(chǎn)品迭代升級預(yù)留使用,使用TTS功能時無需考慮這部分,使用串口、喇叭接口即可滿足調(diào)試。
?三、協(xié)議命令格式
芯片內(nèi)置標(biāo)準(zhǔn)UART異步串口接口,默認(rèn)波特率9600,屬于3.3V TTL電平接口。通訊數(shù)據(jù)格式是:起始位:1位;數(shù)據(jù)位:8位;奇偶位:無;停止位:1位。使用電腦串口調(diào)試助手,需要正確設(shè)置串口的參數(shù),設(shè)置如圖:
指令發(fā)碼格式
起始碼 | 幀長度 | 流水號 | 應(yīng)答標(biāo)志 | 數(shù)據(jù)幀來源 | N個命令信息 | 累加和校驗 | 結(jié)束碼 |
7E | 見下文 | 見下文 | 見下文 | 見下文 | 見下文 | 見下文 | EF |
指令返回碼格式
起始碼 | 幀長度 | 流水號 | 應(yīng)答標(biāo)志 | 數(shù)據(jù)幀來源 | N個命令信息 | 累加和校驗 | 結(jié)束碼 |
7E | 見下文 | 見下文 | 見下文 | 見下文 | 見下文 | 見下文 | EF |
注:執(zhí)行完每條寫命令之后,按照通信協(xié)議格式返回該命令相對應(yīng)的結(jié)果碼。
幀長度:2字節(jié),指幀長度+流水號+應(yīng)答標(biāo)志+數(shù)據(jù)幀來源+N個命令信息+累加和校驗和的長度,幀長度高位在前低位在后;
流水號:1字節(jié),每次一幀數(shù)據(jù)自動加1,避免接收重復(fù)的數(shù)據(jù),相同流水號的數(shù)據(jù)為重復(fù)數(shù)據(jù)應(yīng)做丟棄;
應(yīng)答標(biāo)志:1字節(jié),固定填00;
數(shù)據(jù)幀來源:1字節(jié),02為TTS芯片端,03為MCU芯片端;
N個命令信息:由N個命令信息組成,1個命令信息內(nèi)容為2字節(jié)命令+1字節(jié)數(shù)據(jù)長度+N字節(jié)數(shù)據(jù),單個命令信息最大支持255個字節(jié)數(shù)據(jù),但支持同時傳遞多個相同的命令攜帶不同信息(返回碼的此處信息與發(fā)碼的略微有區(qū)別,詳情見《WT3000Tx語音合成指令表》介紹);
累加和校驗:是指幀長度+流水號+應(yīng)答標(biāo)志+數(shù)據(jù)幀來源+N個命令信息和的低字節(jié)。
3.1 GB 2312編碼簡介
GB 2312碼是中華人民共和國國家標(biāo)準(zhǔn)漢字信息交換用編碼,全稱《信息交換用漢字編碼字符集 基本集》,標(biāo)準(zhǔn)號為GB 2312-80(GB是“國標(biāo)”二字的漢語拼音縮寫),由中華人民共和國國家標(biāo)準(zhǔn)總局發(fā)布,1981年5月1日實施。習(xí)慣上稱國標(biāo)碼、GB碼,或區(qū)位碼。它是一個簡化字漢字的編碼,通行于中國大陸地區(qū)。新加坡等地也使用這一編碼。GB 2312-80收錄簡化漢字及一般符號、序號、數(shù)字、拉丁字母、日文假名、希臘字母、俄文字母、漢語拼音符號、漢語注音字母,共7445個圖形字符。其中漢字以外的圖形字符682個,漢字6763個。GB 2312-80規(guī)定,“對任意一個圖形字符都采用兩個字節(jié)(Byte)表示。每個字節(jié)均采用GB 1988-80及GB 2311-80中的七位編碼表示。兩個字節(jié)中前面的字節(jié)為第一字節(jié),后面的字節(jié)為第二字節(jié)?!绷?xí)慣上稱第一字節(jié)為“高字節(jié)”,第二字節(jié)為“低字節(jié)”。
識別類型 | 識別編碼范圍 | 備注 |
半角ASCII符號區(qū) | 0x00——0x7F | |
全角符號區(qū) | 0xA1A0——0xA3FE | |
漢字區(qū) | 0xB0A1——0xF7FE | 共6768個漢字 |
3.2 UTF8編碼簡介
UTF-8(8位元,UniversalCharacterSet/UnicodeTransformationFormat)是針對Unicode的一種可變長度字符編碼。它可以用來表示Unicode標(biāo)準(zhǔn)中的任何字符,而且其編碼中的第一個字節(jié)仍與ASCII相容,使得原來處理ASCII字符的軟件無須或只進行少部分修改后,便可繼續(xù)使用。因此,它逐漸成為電子郵件、網(wǎng)頁及其他存儲或傳送文字的應(yīng)用中,優(yōu)先采用的編碼。
UTF-8是一種變長字節(jié)編碼方式。對于某一個字符的UTF-8編碼,如果只有一個字節(jié)則其最高二進制位為0;如果是多字節(jié),其第一個字節(jié)從最高位開始,連續(xù)的二進制位值為的個數(shù)決定了其編碼的位數(shù),其余各字節(jié)均以10開頭。
UTF-8最多可用到6個字節(jié)。
1字節(jié) 0xxxxxxx
2字節(jié) 110xxxxx 10xxxxxx
3字節(jié) 1110xxxx 10xxxxxx 10xxxxxx
4字節(jié) 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字節(jié) 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字節(jié) 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
識別類型 | 識別編碼范圍 | 備注 |
全角符號區(qū) | 單字節(jié)UTF8字符中的“對應(yīng)Unicode的0x00區(qū)的內(nèi)容”
雙字節(jié)UTF8字符中的“對應(yīng)Unicode的部分00區(qū)和全部03區(qū)的符號” |
|
漢字區(qū) | 三字節(jié)UTF8字符中的“對應(yīng)Unicode的:20區(qū)以上的符號+漢字” | 共20902個漢字 |
?四、語音合成功能使用方法
4.1 簡單調(diào)用方式
簡單調(diào)用是指用戶不用關(guān)心芯片當(dāng)前的工作狀態(tài),只需要發(fā)送文本到芯片合成為語音輸出。
在簡單調(diào)用情況下,上位機只要與芯片之間建立起UART通信方式,即可發(fā)送合成命令來實現(xiàn)文本的合成,上位機不需要判斷芯片的回傳數(shù)據(jù)或狀態(tài)引腳的輸出。
注意:如前一幀文本還沒有合成完,就再次發(fā)送文本到芯片會中斷前次合成,而執(zhí)行新的合成。
4.2 標(biāo)準(zhǔn)調(diào)用方式
若上位機需要確保上次文本被完整合成之后,再發(fā)送合成命令幀合成下一段文本,則需要通過回傳確定芯片的工作狀態(tài)。具體方法舉例如下:應(yīng)用中需要合成的文本為5k字節(jié),超過了WT3000T8芯片一個命令幀所能容納的最大文本長度(文本最多支持2016個字節(jié)),這時需要分多次給WT3000T8芯片發(fā)送文本信息。程序過程如下:
1、上位機先給WT3000T8芯片發(fā)送一個文本合成命令幀,攜帶不超過2016個字節(jié)的文本;
2、上位機等待WT3000T8芯片自動返回的回傳信息,直到收到回傳數(shù)據(jù),說明前面的
文本已合成完畢;或使用查詢芯片的狀態(tài)引腳、發(fā)送查詢命令的方法,確認(rèn)上一幀文本合成完畢。
3、上位機向芯片再次發(fā)送一個文本合成命令幀,發(fā)送出剩下的文本,重復(fù)123流程直至所有數(shù)據(jù)發(fā)完。
4.3查詢芯片工作狀態(tài)的方法
通過硬件和軟件兩種方式查詢WT3000T8芯片的工作狀態(tài)。
硬件方式:通過查詢輸出引腳BUSY的電平,來判斷芯片的工作狀態(tài)。當(dāng)BUSY處于低電平時,表明芯片正在合成文本;當(dāng)BUSY處于高電平時,表明芯片處于空閑狀態(tài)。
軟件方式:通過發(fā)送狀態(tài)查詢命令幀來查詢芯片的工作狀態(tài)。當(dāng)收到上位機發(fā)送的狀態(tài)查詢命令幀后,芯片會自動向上位機發(fā)送當(dāng)前芯片狀態(tài)的回傳。上位機根據(jù)芯片狀態(tài)的回傳數(shù)據(jù)來判斷當(dāng)前芯片是處于空閑狀態(tài)還是文本合成狀態(tài)。
4.4固定語音功能
WT3000T-T001預(yù)留了30秒存放固定語音,對批量采購的客戶可提供提示音添加、定制的服務(wù)。
注意:如有添加提示音的需求,需要提交與商務(wù)人員溝通,提供音頻和填寫相應(yīng)的資料。
固定語音的特性:
固定語音支持MP3格式,最大支持WAV格式,如果追求更加好的音質(zhì)和音色所帶來的更好的體驗,固定語音可以滿足客戶的這些高需求。相比于WT3000T-T001系列,WT3000T-T002系列芯片可以提供更大的flash空間來存放這些固定語音。
WT3000T-T002系列可提供最高32MBit的語音空間,最多可以放置近100首MP3固定語音。
WT3000T-T002提供以下在ETC使用場景的高品質(zhì)的內(nèi)置語音示例:
1 | 靜音 ? |
2 | 前方 ? |
3 | 米 ? |
4 | 公里 ? |
5 | 車道 ? |
6 | 有車輛發(fā)生故障 ? |
7 | 慢行注意安全 |
8 | 發(fā)生事故 |
9 | 道路設(shè)施故障 |
10 | 有停駛車輛 |
11 | 有車輛行駛緩慢 |
12 | 請注意保持車距 |
13 | 有車輛逆行 |
14 | 車道行駛緩慢 |
15 | 車道擁堵 |
16 | 有車輛超速行駛 |
17 | 變道時請注意安全 |
18 | 有緊急車輛行駛 |
19 | 請注意避讓應(yīng)急車道 |
20 | 有大貨車行駛 |
21 | 請注意行車安全 |
22 | 車輛發(fā)生火災(zāi) |
23 | 請繞道行駛 |
24 | 路面發(fā)生火災(zāi) |
25 | 路邊發(fā)生火災(zāi) |
26 | 隧道內(nèi)發(fā)生火災(zāi) |
27 | 道路設(shè)施發(fā)生火災(zāi) |
28 | 發(fā)生地質(zhì)災(zāi)害 |
29 | 發(fā)生水災(zāi) |
30 | 有暴雨天氣 |
31 | 有冰雹天氣 |
32 | 有雷電天氣 |
33 | 有大風(fēng)天氣 |
34 | 有大霧天氣 |
35 | 有高溫天氣 |
36 | 有干旱天氣 |
37 | 有暴雪天氣 |
38 | 有寒潮天氣 |
39 | 有霜凍天氣 |
40 | 有霧霾天氣 |
41 | 有沙塵暴天氣 |
42 | 有團霧天氣 |
43 | 有橫風(fēng)天氣 |
44 | 有物體散落 |
45 | 有液體灑落 |
46 | 有機油泄露 |
47 | 道路有障礙物 |
48 | 注意避讓道路行人 |
49 | 注意避讓道路動物 |
50 | 道路有積水 |
51 | 道路濕滑 |
52 | 道路結(jié)冰 ? ? |
53 | 道路塌陷 ? |
54 | 道路起伏 ? ? |
55 | 道路施工 ? |
56 | 注意慢行或繞道行駛 ? |
57 | 道路斷路施工 ? |
58 | 有文體商業(yè)活動 ? |
59 | 有外交政務(wù)活動 ? |
60 | 發(fā)生燃?xì)馐鹿?? |
61 | 請停止行駛 ? |
62 | 發(fā)生化學(xué)污染 ? |
63 | 發(fā)生爆炸事故 ? |
64 | 發(fā)生電力事故 ? |
65 | 發(fā)生暴力事件 |
66 | 交通集中堵塞 |
67 | 交易金額 |
68 | 標(biāo)簽拆卸 |
69 | 已預(yù)激活 |
70 | 是否激活 |
71 | 標(biāo)簽已激活 |
72 | 電量不足 |
73 | 讀卡錯誤 |
74 | ESAM鎖定 |
75 | ESAM出錯 |
76 | 操作失敗 |
77 | 聯(lián)系運營商 |
78 | 請插卡 |
79 | 請記賬 |
80 | M1卡 |
81 | 喚醒 |
82 | 藍牙已打開 |
83 | 藍牙出錯 |
84 | 交易成功 |
85 | 余額 |
86 | 版本 |
87 | 0 |
88 | 1 |
89 | 2 |
90 | 3 |
91 | 4 |
92 | 5 |
93 | 6 |
94 | 7 |
95 | 8 |
96 | 9 |
97 | 元 |
98 | 點 |
99 | V |
100 | 一聲短“滴” |
101 | 一聲長“滴” |
102 | 萬 |
103 | 千 |
104 | 百 |
105 | 拾 |
106 | 請充電 |
4.5 測試軟件
WT3000T-T001提供了一款好用的方便的上位機軟件來進行快速測試和演示。
上位機演示軟件操作界面
1.?用串口調(diào)試工具連接好WT3000T-T001模塊,插到電腦上,雙擊打開演示軟件。
上位機演示軟件圖標(biāo)
2.?設(shè)置好波特率9600,然后點擊打開串口使模塊和上位機連接成功。
3.?主播選擇:可以選擇不同的主播音色,支持男聲女聲。
4.?語速:可以調(diào)節(jié)合成語音的語速速度。
5.?語調(diào):可以使主播的音色變得清澈透亮或者雄渾厚重。
6.?音量:調(diào)節(jié)合成的音量大小。
只需要在文本框中以打字的方式輸入想要播出的文本內(nèi)容,點擊生成,再點擊發(fā)送就可以聽到模塊播出剛剛輸入的文本內(nèi)容了。
另外,在發(fā)送數(shù)據(jù)和接收數(shù)據(jù)一欄里還能直接復(fù)制生成的串口16進制數(shù)據(jù)到程序代碼中直接使用,快速驗證問題。
?五、串口控制示例代碼
5.1 函數(shù)聲明,結(jié)構(gòu)體聲明
#include <stdio.h>
#include <stdlib.h>
void uart_recive(const unsigned char *packet, unsigned short size);
void keyid_confirm(unsigned short common_id,unsigned char source,void *data);
unsigned char check_data(const unsigned char *packet, unsigned short size);
void uart_send(void);
#define h_16(h,l) (((h)<<8)|l)
struct hex16_format
{
unsigned char head; //包頭
unsigned char len_h; //
unsigned char len_l; //len_h len_l包總長度
unsigned char listnum; //流水號
unsigned char flag; //包序&應(yīng)答標(biāo)志
unsigned char source; //數(shù)據(jù)來源
unsigned char payload[0]; //數(shù)據(jù)開始
};
struct keyid_format {
unsigned char id_h; //KEYID 高字節(jié)
unsigned char id_l; //KEYID 低字節(jié)
unsigned char length; //KEYID 數(shù)據(jù)長度
unsigned char data[0]; ////KEYID 數(shù)據(jù)
};
函數(shù)聲明,接收結(jié)構(gòu)體聲明
//主函數(shù)
int main(int argc, char **argv)
{
unsigned char uart_rx_test[] = {0x7E ,0x00 ,0x0F ,0x01 ,0x00 ,0x03 ,0x03 ,0xE8 ,0x06 ,0x31 ,0x32 ,0x33 ,0x34 ,0x35 ,0x36 ,0x39 ,0xEF};//播放123456
uart_recive(uart_rx_test,sizeof(uart_rx_test));//接收數(shù)據(jù)
return 0;
}
main函數(shù)
5.2?串口接收數(shù)據(jù)處理
//packet:串口接收到的一包數(shù)據(jù)
//size:串口這一報數(shù)據(jù)的長度
void uart_recive(const unsigned char *packet, unsigned short size) ///一包數(shù)據(jù)接收處理及 應(yīng)答輸出
{
struct hex16_format *p1 = (struct hex16_format *)packet;
unsigned char ret=0;
//檢測這一包數(shù)據(jù)是否可用
ret=check_data(packet,size);
if(ret)
{
printf("debug:check_data err=%d
",ret);
return;
}
printf("check_data OK!
");
//數(shù)據(jù)可用,開始解析KEYID
unsigned int keyid_address=6;
//循環(huán)掃描所有keyID
while((keyid_address+3)<(size-2))
{
? ? ? ? struct?keyid_format?*cmd?=?(struct?keyid_format? ?? *)(&packet[keyid_address]);//packet[6]剛好u16對齊,不然會內(nèi)存對齊異常導(dǎo)致出問題
unsigned short common_id=0;
common_id=((cmd->id_h)<<8)|cmd->id_l;
//如果讀取到了末尾則退出掃描
if(cmd->length+3+keyid_address>size-2)
{
? ? ? ? ? ? printf("while ? ?end=%d,keyid_address=%d,size=%d
",cmd->length,keyid_address,size);
break;
}
printf("ID=0x%04X,LEN=%d,DATA=%s
",common_id,cmd->length,cmd->data);
//根據(jù)ID進行分類處理
keyid_confirm(common_id,p1->source,cmd);
//KEYID地址往下準(zhǔn)備讀取下一個KEYID
keyid_address += cmd->length+3;
}
}
接收串口數(shù)據(jù)處理數(shù)據(jù)
unsigned char check_data(const unsigned char *packet, unsigned short size) ///數(shù)據(jù)校驗:1數(shù)據(jù)頭異常 2數(shù)據(jù)結(jié)尾異常 3總長度異常 4校驗異常
{
struct hex16_format *p0 = (struct hex16_format *)packet;
unsigned char err=0;
unsigned short pack_len=0;
//獲取幀長度
pack_len=h_16(p0->len_h,p0->len_l);//((p0->len_h)<<8)|p0->len_l;
printf("head=%02X len=%d size - 2=%d
",packet[0],pack_len,size - 2);//log_info("head=%02X len=%d size=%d",p0->head,p0->len,size);
//數(shù)據(jù)頭如果不是0x7e就錯誤
if(packet[0]!=0x7e)
err=1;
//數(shù)據(jù)結(jié)尾不是0xef就錯誤
else if(packet[size-1]!=0xef)
err=2;
//獲取的幀長度不等于數(shù)據(jù)長度就錯誤
else if((pack_len!=0)&&(pack_len!=(size-2)))
err=3;
else ///SUM校驗計算
{
unsigned short i=0;
unsigned char sum=0;
for(i=1;i<size-2;i++)
{
sum+=packet[i];
}
if(sum!=packet[size-2])//校驗不正確就錯誤
{
err=4;
printf("sum=0x%02X,packet[%d]=0x%02X
",sum,size-2,packet[size-2]);
}
}
return err;
}
校驗接收到的串口這一包數(shù)據(jù)
void keyid_confirm(unsigned short common_id,unsigned char source,void *data)
{
struct keyid_format *cmd = data;
printf("Chip common_id=%d
",common_id);
switch (common_id)
{
case 0x03e8/* TTS語音合成KEYID */:
/* code */
user_deal();//用戶接收處理
break;
default:
break;
}
}
接收的KEYID分類處理?
?5.3?根據(jù)串口協(xié)議發(fā)送數(shù)據(jù)
#define USER_KEY_ID 1000
struct user_format {
unsigned char head;
unsigned char len_h;
unsigned char len_l;
unsigned char flows; //流水號
unsigned char sta; //
unsigned char soure; //來源
unsigned char id_h; //KEYID高字節(jié)
unsigned char id_l; //KEYID低字節(jié)
unsigned char len; //KEYID數(shù)據(jù)長度
unsigned char status; //KEYID數(shù)據(jù)
unsigned char sum;
unsigned char end;
};
結(jié)構(gòu)體聲明
void uart_send(void)
{
printf("uart_send:");
static unsigned char flows = 0;
struct user_format user_key = {0};
//===============================================================//
//包頭
user_key.head = 0x7e;
//一包數(shù)據(jù)長度
user_key.len_h = (sizeof(struct user_format) - 2) >> 8;
user_key.len_l = (sizeof(struct user_format) - 2);
//流水號
user_key.flows = flows;
//來源
user_key.soure = 0x03;
//回復(fù)KEYID和數(shù)據(jù)
user_key.id_h = (unsigned char) (USER_KEY_ID >> 8);
user_key.id_l = (unsigned char) (USER_KEY_ID);
user_key.len = 0x01;
user_key.status = 0x01;
//校驗和
for(int i = 1; i < sizeof(struct user_format)-2 ; i++)
{
user_key.sum += ((unsigned char *)(&user_key))[i];
}
user_key.end = 0xef;//結(jié)尾
//==============================================================//
flows++;//流水號
//模擬發(fā)送
for(int j = 0; j < sizeof(struct user_format) ; j++)
{
printf("%4x",((unsigned char *)(&user_key))[j]);
}
printf("
");
}
串口發(fā)送示例