用釘釘小程序控制HaaS100播放語音示例
1、方案介紹
本文主要介紹如何基于HaaS100硬件平臺(tái)搭建“云端釘一體”(阿里云IoT平臺(tái) + HaaS100 + 釘釘小程序)的智能語音播放器(以下簡稱智能語音播放器)。該智能語音播放器包含如下功能:
小程序:加載/卸載HaaS100上的聲卡模塊。 小程序:TTS (Text to Speech),智能語音合成功能。 小程序:開始/停止錄音,錄音文件路徑/data/rec.pcm 小程序:音樂播放功能,例如音量調(diào)節(jié)/播放/暫停/上一首/下一首/播放列表等。 本地Shell: 音量調(diào)節(jié),本地音樂/ 網(wǎng)絡(luò)音樂播放(.mp3, .m4a等格式)等。 本地Shell: TTS (Text to Speech),智能語音合成功能。
2、硬件平臺(tái)搭建
智能語音播放器整體框架圖
智能語音播放器需要的硬件模塊包括: 硬件列表購買鏈接僅供參考??!我們不負(fù)責(zé)商家發(fā)貨的品質(zhì)保障等問題?。?/p>
名稱 | 數(shù)量 | 參考鏈接 |
HaaS100開發(fā)版 | 1 | |
microUSB數(shù)據(jù)線 | 1 | 普通microusb線即可 |
模擬MIC | 1 | |
喇叭 | 1 |
3、HaaS100端測(cè)軟件開發(fā)
智能語音播放器的軟件框架圖,
如上圖所示智能語音播放器軟件模塊包括:
audio_demo: 主要打通HaaS100和阿里云物聯(lián)網(wǎng)平臺(tái)連接、通信,物模型解析,播放器功能邏輯的實(shí)現(xiàn)。 uVoice組件:是AliOS Things上智能語音解決方案的核心組件,提供了本地音頻,URL音頻,TTS合成等基礎(chǔ)功能,音頻格式支持mp3, m4a, wav, opus等主流格式。 A2SA組件:是AliOS Things上音頻服務(wù)框架,兼容ALSA應(yīng)用接口訪問,支持音頻硬件驅(qū)動(dòng)抽象,多音頻驅(qū)動(dòng)加載/卸載,VFS接口支持等功能。多播放焦點(diǎn)管理,混音,softvol,重采樣等功能設(shè)計(jì)中。 麥克風(fēng)/喇叭驅(qū)動(dòng):HaaS100上已經(jīng)集成了模擬麥和Speaker的硬件驅(qū)動(dòng)。
HaaS100端測(cè)軟件開發(fā)包含以下3個(gè)步驟:
AliOS Things開發(fā)環(huán)境搭建 HaaS100智能語音播放器代碼下載、代碼編譯、燒錄
3.1、AliOS Things開發(fā)環(huán)境搭建
案例相關(guān)的代碼下載、編譯和固件燒錄均依賴AliOS Things配套的開發(fā)工具,所以首先需要參考《AliOS Things集成開發(fā)環(huán)境使用說明之搭建開發(fā)環(huán)境》,下載安裝。 待開發(fā)環(huán)境搭建完成后,可以按照以下步驟進(jìn)行示例的測(cè)試。
3.2、智能語音播放器代碼下載
該案例相關(guān)的源代碼下載可參考《AliOS Things集成開發(fā)環(huán)境使用說明之創(chuàng)建工程》。 其中,
選擇解決方案:“HaaS云端釘智能語音播放器”或者“audio_demo” 選擇開發(fā)板:HaaS100
3.3、打包測(cè)試音頻文件到文件系統(tǒng)(僅“4.1:播放器離線調(diào)試”需要)
因?yàn)?.1: 播放器離線調(diào)試章節(jié)需要測(cè)試播放本地文件系統(tǒng)中/data/6.wav 或者 /data/7.mp3音頻文件。所以需要提前準(zhǔn)備好這兩個(gè)音頻文件,并按下面2個(gè)步驟打包音頻文件到文件系統(tǒng)中。
cp ./6.wav ./hardware/chip/haas1000/prebuild/data/ # 拷貝當(dāng)前目錄下的6.wav文件到文件系統(tǒng)打包目錄./hardware/chip/haas1000/prebuild/data/下。注意:6.wav文件需要自己準(zhǔn)備。
cp ./7.mp3 ./hardware/chip/haas1000/prebuild/data/ # 拷貝當(dāng)前目錄下的7.mp3文件到文件系統(tǒng)打包目錄./hardware/chip/haas1000/prebuild/data/下。注意:7.mp3文件需要自己準(zhǔn)備。
# 確認(rèn)./hardware/chip/haas1000/package.yaml文件中第177行至179行是打開的狀態(tài)。如下,
program_data_files:
- filename: release/write_flash_tool/ota_bin/littlefs.bin
address: 0xB32000
3.4、代碼編譯、燒錄
-- 固件編譯方法可參考《AliOS Things集成開發(fā)環(huán)境使用說明之編譯固件》。
-- 固件燒錄方法可參考《AliOS Things集成開發(fā)環(huán)境使用說明之燒錄固件》。
4、功能調(diào)試
智能語音播放器支持,
本地Shell命令行調(diào)試模式:又分為離線模式和在線模式、云端釘一體調(diào)試模式
其中離線調(diào)試模式支持從本地文件系統(tǒng)中播放音頻,無需給HaaS100配網(wǎng),可用于快速驗(yàn)證HaaS100的錄音、播放的基本功能是否正常。在線調(diào)試模式要求HaaS100網(wǎng)絡(luò)在線,支持網(wǎng)絡(luò)音頻的播放以及阿里巴巴達(dá)摩院TTS語音合成功能。
4.1、播放器離線調(diào)試
HaaS100固件燒錄成功之后可以在串口中敲入“help”命令查看所有支持的CLI調(diào)試命令,其中和智能語音播放器相關(guān)的常用命令和使用方法如下,
# 查看當(dāng)前固件支持的所有Shell命令
help
# 加載HaaS100聲卡驅(qū)動(dòng)
sound_install_driver
# 循環(huán)播放.wav音頻10次
sound_wav /data/7.wav 10
# 播放.mp3(只支持1次)
play fs:/data/6.mp3
# 開始錄音、播放循環(huán)測(cè)試
sound_loopback start
# 結(jié)束錄音、播放循環(huán)測(cè)試
sound_loopback stop
# 讀取當(dāng)前播放音量(0~100)
sound_getvol
# 設(shè)置當(dāng)前播放音量為90 (0~100)
sound_setvol 90
4.2、播放器在線調(diào)試
當(dāng)上述離線音頻播放測(cè)試通過之后,證明HaaS100的錄音、播放器的硬件和軟件環(huán)境都是OK的了,接下來就可以嘗試連接阿里云IoT平臺(tái)進(jìn)行在線音頻播放器調(diào)試。請(qǐng)按下述步驟操作,
4.2.1 WI-FI 配網(wǎng)
HaaS100支持Shell命令行給WIFI配網(wǎng),方法如下,
# 串口輸入配網(wǎng)命令
netmgr -t wifi -c {ssid} {password}
如果配網(wǎng)信息和四元組(ProductKey、ProductSecret、DeviceName和DeviceSecret)信息都正確的情況下,HaaS100和阿里云IoT平臺(tái)連接成功后有如下HardwareError ping-pong日志打印。
如果,有些開發(fā)者發(fā)現(xiàn)自己的HaaS100板子WIFI連接路由器困難,那么可以嘗試以下方法排查。
首先參考3.2章節(jié)更新最新固件代碼,然后通過Shell命令獲取WIFI MAC地址,方法如下 aos_mac WIFI 如果WIFI MAC是全0,那么需要更新MAC地址。HaaS VIP釘群中咨詢@谷飲,獲取唯一的WIFI MAC地址。 最后更新獲取到的WIFI MAC,方法如下 aos_mac WIFI XX:XX:XX:XX:XX:XX
4.2.2 播放在線音樂
當(dāng)HaaS100配網(wǎng)成功且可以訪問外網(wǎng)之后,可以嘗試在串口Shell中使用“play”命令播放在線音樂了,
# 播放在線音樂url, 例如
play https://test-music-url.com
# 其中上面的測(cè)試音頻url是無效的,因?yàn)樯婕暗綕撛诘囊魳钒鏅?quán)問題,需要開發(fā)者自己提供可以播放的音樂url。
4.2.3 TTS語音合成
在我們的uvoice組件中集成了阿里巴巴的“智能語音交互”的部分功能,您可以嘗試免費(fèi)試用版的“語音合成”功能,需要商用的用戶也可以選擇付費(fèi)開通商用版。阿里云智能語音合成功能提供了Java/ C++/ Restful等多種SDK,開發(fā)者也可以自己下載SDK適配。
用戶首先登錄“智能語音交互”主頁,并根據(jù)引導(dǎo)創(chuàng)建一個(gè)包含“語音合成”功能的項(xiàng)目。項(xiàng)目創(chuàng)建完成后,項(xiàng)目主頁中會(huì)生成該項(xiàng)目的“Appkey”和“AccessToken”兩個(gè)重要信息。
創(chuàng)建智能語音交互項(xiàng)目和獲取AppKey
獲取智能語音交互AccessToken
在HaaS100 SDK的components/service/uvoice/test/test_tts.c中,我們需要填寫正確的AppKey和AccessToken信息才可以使用阿里巴巴“智能語音交互 - 語音合成”功能。值得注意的是,AccessToken是動(dòng)態(tài)刷新的,周期是每個(gè)用戶賬戶可配置的,默認(rèn)是2天變化一次。因此在功能開發(fā)階段,需要周期性的更新固件中的AccessToken,否則可能出現(xiàn)語音合成功能訪問失敗的問題。如果是產(chǎn)品量產(chǎn)階段,可以基于阿里云端一體的安全通道周期更新設(shè)備端AccessToken。
uvoice組件中修改AppKey和AccessToken代碼位置
配置好AppKey和AccessToken之后,參考上述編譯和燒錄,按以下步驟可以本地測(cè)試TTS語音合成功能。
# TTS合成,生成的語音保存在/data/tts.mp3文件中
tts "今天上海天氣晴轉(zhuǎn)多云、氣溫26攝氏度" /data/tts.mp3
4.3 云端釘一體調(diào)試
智能語音播放器的云端釘一體調(diào)試模式包含:阿里云IoT平臺(tái)配置,以及釘釘小程序開發(fā)兩大部分。
4.3.1 阿里云IoT平臺(tái)配置
阿里云物聯(lián)網(wǎng)平臺(tái)創(chuàng)建產(chǎn)品、設(shè)備的詳細(xì)過程可以參考文章《阿里云物聯(lián)網(wǎng)平臺(tái)快速入門實(shí)踐》
4.3.1.1 創(chuàng)建智能語音播放器產(chǎn)品
“云端釘一體的智能語音播放器”物模型設(shè)計(jì)可以參考:“智能語音播放器物模型”(待發(fā)布)。在開發(fā)者創(chuàng)建自己產(chǎn)品時(shí),可以選擇導(dǎo)入我們提供的“智能語音播放器物模型”來生成一個(gè)臨時(shí)產(chǎn)品,從而快速的驗(yàn)證云端釘一體的智能語音播放器方案,請(qǐng)參考下圖步驟。
4.3.1.2 修改HaaS100設(shè)備證書(ProductKey、DeviceName、DeviceSecret) 信息
用戶可以在" 阿里云物聯(lián)網(wǎng)平臺(tái)獲取設(shè)備證書(ProductKey、DeviceName、DeviceSecret) 信息頁面: 備注:修改完設(shè)備證書(ProductKey、DeviceName、DeviceSecret) 信息之后,別忘記參考2.3章節(jié)重新編譯、燒錄HaaS100固件。 文章《30分鐘上手HaaS小程序開發(fā)》, 文中介紹了小程序開發(fā)工具IDE、HaaS釘釘小程序示例代碼獲取、釘釘小程序申請(qǐng)、小程序真機(jī)調(diào)試等基礎(chǔ)內(nèi)容。開發(fā)者可以根據(jù)這篇文章快速上手一個(gè)自己的小程序應(yīng)用開發(fā)。 下載的“HaaS釘釘小程序示例代碼”中包含了“HaaS智能語音播放器”示例源碼(開源披露流程中,敬請(qǐng)期待)。HaaS語音播放器中創(chuàng)建了2個(gè)page,分別是HaasAudioPlayer和playList。 HaasAudioPlayer頁面功能有:加載/卸載HaaS100聲卡,打開/關(guān)閉錄音,TTS語音合成入口,當(dāng)前播放音樂的基礎(chǔ)信息(歌曲名、歌手名、專輯圖片),播放模式選擇,音效選擇,音量控制,播放控制(播放、暫停、上一首、下一首)以及播放列表入口。 playList頁面:自動(dòng)從./mock/data.json中導(dǎo)入用戶與設(shè)置好的播放列表信息。 要成功使用HaaS智能語音播放器小程序,開發(fā)者需要正確輸入用戶以下用戶信息, accessKeyId accessKeySecret 這是釘釘小程序訪問用戶“阿里云物聯(lián)網(wǎng)平臺(tái)”賬戶的密鑰信息,修改代碼路徑是./pages/app.js。
密鑰信息修改位置參考 DeviceName ProductKey 這是釘釘小程序需要控制的用戶物聯(lián)網(wǎng)平臺(tái)中的某個(gè)HaaS100設(shè)備。修改代碼路徑是./pages/HaasAudioPlayer/HaasAudioPlayer.js。
HaaS設(shè)備的密鑰信息修改位置參考 開發(fā)者可以自己修改歌曲播放列表,配置文件位于./mock/data.json。每首歌曲信息包含: id:歌曲在播放列表中的id copyrightId:歌曲版權(quán)信息,可忽略 picS:歌曲在播放頁面中顯示的圖片信息 songName:歌曲名 singerName:歌手名 url:歌曲鏈接,可以是本地文件系統(tǒng)中的歌曲文件,例如fs:/data/6.mp3,也可以是瀏覽器可以直接播放的網(wǎng)絡(luò)歌曲鏈接。 本文提供了“本地”和“云端釘一體”兩種調(diào)試語音播放器的方式,本地的方式可以快速驗(yàn)證硬件和端測(cè)軟件的基礎(chǔ)功能是否OK,云端釘一體的方式讓用戶在任何一款手機(jī)、平板設(shè)備上都可以通過支付寶或者釘釘小程序遠(yuǎn)程控制HaaS100音樂播放器,更具有可玩性。祝您體驗(yàn)HaaS云端釘一體智能語音播放器方案愉快。/* TODO: 替換為自己設(shè)備的設(shè)備證書(ProductKey、DeviceName、DeviceSecret) */
char *product_key = 用戶創(chuàng)建的產(chǎn)品類型的Key(唯一ID)
char *device_name = 該產(chǎn)品類型下的某個(gè)具體設(shè)備名字(某個(gè)產(chǎn)品類型下可以有很多量產(chǎn)設(shè)備)
char *device_secret = 該產(chǎn)品類型下的名字為DeviceName設(shè)備的密鑰(和DeviceName一一對(duì)應(yīng))
4.3.2 釘釘小程序設(shè)計(jì)
4.3.2.1 accessKey信息
4.3.2.2 產(chǎn)品信息
4.3.2.3 修改播放列表
5、總結(jié)