1@page audio_demo 用钉钉小程序控制HaaS100播放语音示例
2
3[更正文档](https://gitee.com/alios-things/audio_demo/edit/master/README.md)      [贡献说明](https://help.aliyun.com/document_detail/302301.html)
4
5# 1、方案介绍
6本文主要介绍如何基于HaaS100硬件平台搭建“云端钉一体”(阿里云IoT平台 + HaaS100 + 钉钉小程序)的智能语音播放器(以下简称智能语音播放器)。该智能语音播放器包含如下功能:
7
8> * 小程序:加载/卸载HaaS100上的声卡模块。
9> * 小程序:TTS (Text to Speech),智能语音合成功能。
10> * 小程序:开始/停止录音,录音文件路径/data/rec.pcm
11> * 小程序:音乐播放功能,例如音量调节/播放/暂停/上一首/下一首/播放列表等。
12> * 本地Shell: 音量调节,本地音乐/ 网络音乐播放(.mp3, .m4a等格式)等。
13> * 本地Shell: TTS (Text to Speech),智能语音合成功能。
14
15# 2、硬件平台搭建
16**智能语音播放器整体框架图**
17
18<div align=left display=flex>
19    <img src="https://img.alicdn.com/imgextra/i1/O1CN018hkdjA1fipAcArks7_!!6000000004041-2-tps-2130-1468.png"  style="max-width:800px;" />
20</div>
21
22智能语音播放器需要的硬件模块包括:
23**硬件列表**
24购买链接仅供参考!!我们不负责商家发货的品质保障等问题!!
25
26| 名称        |   数量   |  参考链接  |
27| ------  | :-----:  | :----:  |
28| HaaS100开发版 | 1 |   [HaaS100购买链接](https://detail.tmall.com/item.htm?spm=a220m.1000858.1000725.2.38a23a98TnoFxv&id=627354125244&user_id=4160407286&cat_id=2&is_b=1&rn=bb0ed71a917987289b7d66f1803f4efc)     |
29| microUSB数据线        |   1   |   普通microusb线即可   |
30| 模拟MIC        |    1    |  [模拟MIC参考链接](https://item.taobao.com/item.htm?spm=a230r.1.14.74.43c6552bgcYFUD&id=571778051363&ns=1&abbucket=8#detail)  |
31| 喇叭        |   1   |   [喇叭参考链接](https://item.taobao.com/item.htm?spm=a230r.1.14.232.2ec351cbaSvK0N&id=621164763171&ns=1&abbucket=3#detail)   |
32
33# 3、HaaS100端测软件开发
34**智能语音播放器的软件框架图**,
35
36<div align=left display=flex>
37    <img src="https://img.alicdn.com/imgextra/i3/O1CN01r7XygD1SJ5uyd0Nys_!!6000000002225-2-tps-902-682.png"  style="max-width:800px;" />
38</div>
39
40如上图所示智能语音播放器软件模块包括:
41> * audio_demo: 主要打通HaaS100和阿里云物联网平台连接、通信,物模型解析,播放器功能逻辑的实现。
42> * uVoice组件:是AliOS Things上智能语音解决方案的核心组件,提供了本地音频,URL音频,TTS合成等基础功能,音频格式支持mp3, m4a, wav, opus等主流格式。
43> * A2SA组件:是AliOS Things上音频服务框架,兼容ALSA应用接口访问,支持音频硬件驱动抽象,多音频驱动加载/卸载,VFS接口支持等功能。多播放焦点管理,混音,softvol,重采样等功能设计中。
44> * 麦克风/喇叭驱动:HaaS100上已经集成了模拟麦和Speaker的硬件驱动。
45
46HaaS100端测软件开发包含以下3个步骤:
47> * AliOS Things开发环境搭建
48> * HaaS100智能语音播放器代码下载
49> * 代码编译、烧录
50
51## 3.1、AliOS Things开发环境搭建
52案例相关的代码下载、编译和固件烧录均依赖AliOS Things配套的开发工具,所以首先需要参考[《AliOS Things集成开发环境使用说明之搭建开发环境》](https://help.aliyun.com/document_detail/302378.html),下载安装。
53待开发环境搭建完成后,可以按照以下步骤进行示例的测试。
54
55## 3.2、智能语音播放器代码下载
56该案例相关的源代码下载可参考[《AliOS Things集成开发环境使用说明之创建工程》](https://help.aliyun.com/document_detail/302379.html)57其中,
58> 选择解决方案: “HaaS云端钉智能语音播放器”或者“audio_demo”
59> 选择开发板: HaaS100
60
61## 3.3、打包测试音频文件到文件系统(仅“4.1:播放器离线调试”需要)
62因为4.1: 播放器离线调试章节需要测试播放本地文件系统中/data/6.wav 或者 /data/7.mp3音频文件。所以需要提前准备好这两个音频文件,并按下面2个步骤打包音频文件到文件系统中。
63```shell
64cp ./6.wav ./hardware/chip/haas1000/prebuild/data/  # 拷贝当前目录下的6.wav文件到文件系统打包目录./hardware/chip/haas1000/prebuild/data/下。注意:6.wav文件需要自己准备。
65cp ./7.mp3 ./hardware/chip/haas1000/prebuild/data/  # 拷贝当前目录下的7.mp3文件到文件系统打包目录./hardware/chip/haas1000/prebuild/data/下。注意:7.mp3文件需要自己准备。
66```
67
68```yaml
69# 确认./hardware/chip/haas1000/package.yaml文件中第177行至179行是打开的状态。如下,
70program_data_files:
71   - filename: release/write_flash_tool/ota_bin/littlefs.bin
72     address: 0xB32000
73```
74
75## 3.4、代码编译、烧录
76-- 固件编译方法可参考[《AliOS Things集成开发环境使用说明之编译固件》](https://help.aliyun.com/document_detail/302384.html)77
78-- 固件烧录方法可参考[《AliOS Things集成开发环境使用说明之烧录固件》](https://help.aliyun.com/document_detail/302383.html)79
80# 4、功能调试
81智能语音播放器支持,
82> * 本地Shell命令行调试模式:又分为离线模式和在线模式
83> * 云端钉一体调试模式
84
85其中离线调试模式支持从本地文件系统中播放音频,无需给HaaS100配网,可用于快速验证HaaS100的录音、播放的基本功能是否正常。在线调试模式要求HaaS100网络在线,支持网络音频的播放以及阿里巴巴达摩院TTS语音合成功能。
86
87## 4.1、播放器离线调试
88HaaS100固件烧录成功之后可以在串口中敲入“help”命令查看所有支持的CLI调试命令,其中和智能语音播放器相关的常用命令和使用方法如下,
89```shell
90# 查看当前固件支持的所有Shell命令
91help
92
93# 加载HaaS100声卡驱动
94sound_install_driver
95
96# 循环播放.wav音频10次
97sound_wav /data/7.wav 10
98
99# 播放.mp3(只支持1次)
100play fs:/data/6.mp3
101
102# 开始录音、播放循环测试
103sound_loopback start
104
105# 结束录音、播放循环测试
106sound_loopback stop
107
108# 读取当前播放音量(0~100)
109sound_getvol
110
111# 设置当前播放音量为90 (0~100)
112sound_setvol 90
113```
114
115## 4.2、播放器在线调试
116当上述离线音频播放测试通过之后,证明HaaS100的录音、播放器的硬件和软件环境都是OK的了,接下来就可以尝试连接阿里云IoT平台进行在线音频播放器调试。请按下述步骤操作,
117
118## 4.2.1 WI-FI 配网
119HaaS100支持Shell命令行给WIFI配网,方法如下,
120```shell
121# 串口输入配网命令
122netmgr -t wifi -c {ssid} {password}
123```
124如果配网信息和四元组信息都正确的情况下,HaaS100和阿里云IoT平台连接成功后有如下HardwareError ping-pong日志打印。
125
126<div align=left display=flex>
127    <img src="https://img.alicdn.com/imgextra/i3/O1CN01y4cvYs1baLND8fY7R_!!6000000003481-2-tps-955-546.png"  style="max-width:800px;" />
128</div>
129
130如果,有些开发者发现自己的HaaS100板子WIFI连接路由器困难,那么可以尝试以下方法排查。
131> * 首先参考3.2章节更新最新固件代码
132> * 然后通过Shell命令获取WIFI MAC地址,方法如下
133> * aos_mac WIFI
134> * 如果WIFI MAC是全0,那么需要更新MAC地址。HaaS VIP钉群中咨询@谷饮,获取唯一的WIFI MAC地址。
135> * 最后更新获取到的WIFI MAC,方法如下
136> * aos_mac WIFI XX:XX:XX:XX:XX:XX
137
138## 4.2.2 播放在线音乐
139当HaaS100配网成功且可以访问外网之后,可以尝试在串口Shell中使用“play”命令播放在线音乐了,
140```shell
141# 播放在线音乐url, 例如
142play https://test-music-url.com
143
144# 其中上面的测试音频url是无效的,因为涉及到潜在的音乐版权问题,需要开发者自己提供可以播放的音乐url。
145```
146
147## 4.2.3 TTS语音合成
148在我们的uvoice组件中集成了阿里巴巴的“[智能语音交互](https://nls-portal.console.aliyun.com/overview)”的部分功能,您可以尝试免费试用版的“语音合成”功能,需要商用的用户也可以选择付费开通商用版。阿里云智能语音合成功能提供了[Java/ C++/ Restful](https://help.aliyun.com/document_detail/84435.html?spm=a2c4g.11186623.6.609.30837c70z3hUCK)等多种SDK,开发者也可以自己下载SDK适配。
149
150用户首先登陆“[智能语音交互](https://nls-portal.console.aliyun.com/overview)”主页,并根据引导创建一个包含“语音合成”功能的项目。项目创建完成后,项目主页中会生成该项目的“Appkey”和“AccessToken”两个重要信息。
151
152**创建智能语音交互项目和获取AppKey**
153
154<div align=left display=flex>
155    <img src="https://img.alicdn.com/imgextra/i3/O1CN01BrEHmM254gTETXgHt_!!6000000007473-2-tps-1914-763.png"  style="max-width:800px;" />
156</div>
157
158**获取智能语音交互AccessToken**
159
160<div align=left display=flex>
161    <img src="https://img.alicdn.com/imgextra/i3/O1CN017yFPVh1tgRjqtfWJX_!!6000000005931-2-tps-1911-422.png"  style="max-width:800px;" />
162</div>
163
164在HaaS100 SDK的components/service/uvoice/test/test_tts.c中,我们需要填写正确的AppKey和AccessToken信息才可以使用阿里巴巴“智能语音交互 - 语音合成”功能。值得注意的是,AccessToken是动态刷新的,周期是每个用户账户可配置的,默认是2天变化一次。因此在功能开发阶段,需要周期性的更新固件中的AccessToken,否则可能出现语音合成功能访问失败的问题。如果是产品量产阶段,可以基于阿里云端一体的安全通道周期更新设备端AccessToken。
165
166**uvoice组件中修改AppKey和AccessToken代码位置**
167
168<div align=left display=flex>
169    <img src="https://img.alicdn.com/imgextra/i3/O1CN014Nynrb1GsZCiTJuqT_!!6000000000678-2-tps-839-444.png"  style="max-width:800px;" />
170</div>
171
172配置好AppKey和AccessToken之后,参考上述编译和烧录,按以下步骤可以本地测试TTS语音合成功能。
173```shell
174# TTS合成,生成的语音保存在/data/tts.mp3文件中
175tts "今天上海天气晴转多云、气温26摄氏度" /data/tts.mp3
176```
177
178## 4.3 云端钉一体调试
179智能语音播放器的云端钉一体调试模式包含:阿里云IoT平台配置,以及钉钉小程序开发两大部分。
180
181## 4.3.1 阿里云IoT平台配置
182阿里云物联网平台创建产品、设备的详细过程可以参考文章《[阿里云物联网平台快速入门实践](https://blog.csdn.net/HaaSTech/article/details/111190159)183
184### 4.3.1.1 创建智能语音播放器产品
185“云端钉一体的智能语音播放器”物模型设计可以参考:“智能语音播放器物模型”(待发布)。在开发者创建自己产品时,可以选择导入我们提供的“智能语音播放器物模型”来生成一个临时产品,从而快速的验证云端钉一体的智能语音播放器方案,请参考下图步骤。
186
187<div align=left display=flex>
188    <img src="https://img.alicdn.com/imgextra/i4/O1CN01CudBAj26Zes9vPKnC_!!6000000007676-2-tps-1916-720.png"  style="max-width:800px;" />
189</div>
190
191### 4.3.1.2 修改HaaS100三元组信息
192用户可以在"[阿里云物联网平台](https://iot.console.aliyun.com/product)"中创建的产品信息中可以获取到三元组信息,只有正确配置了HaaS100固件中的三元组信息,HaaS100语音播放器才能正确连接用户自己账号的阿里云物联网平台。修改四元组的位置在文件./solutions/audio_demo/data_model_basic_demo.c的demo_main()中,代码示例如下,
193
194```c
195/* TODO: 替换为自己设备的三元组 */
196char *product_key = 用户创建的产品类型的Key(唯一ID)
197char *device_name = 该产品类型下的某个具体设备名字(某个产品类型下可以有很多量产设备)
198char *device_secret = 该产品类型下的名字为DeviceName设备的密钥(和DeviceName一一对应)
199
200```
201
202阿里云物联网平台获取三元组信息页面:
203
204<div align=left display=flex>
205    <img src="https://img.alicdn.com/imgextra/i3/O1CN01VpR3zn1uFiEa9uGtP_!!6000000006008-2-tps-1822-829.png"  style="max-width:800px;" />
206</div>
207
208**备注**:修改完三元组信息之后,别忘记参考2.3章节重新编译、烧录HaaS100固件。
209
210## 4.3.2 钉钉小程序设计
211文章《[30分钟上手HaaS小程序开发](https://blog.csdn.net/HaaSTech/article/details/110850634)》, 文中介绍了小程序开发工具IDE、HaaS钉钉小程序示例代码获取、钉钉小程序申请、小程序真机调试等基础内容。开发者可以根据这篇文章快速上手一个自己的小程序应用开发。
212
213下载的“HaaS钉钉小程序示例代码”中包含了“HaaS智能语音播放器”示例源码(开源披露流程中,敬请期待)。HaaS语音播放器中创建了2个page,分别是HaasAudioPlayer和playList。
214> * HaasAudioPlayer页面功能有:加载/卸载HaaS100声卡,打开/关闭录音,TTS语音合成入口,当前播放音乐的基础信息(歌曲名、歌手名、专辑图片),播放模式选择,音效选择,音量控制,播放控制(播放、暂停、上一首、下一首)以及播放列表入口。
215> * playList页面:自动从./mock/data.json中导入用户与设置好的播放列表信息。
216
217要成功使用HaaS智能语音播放器小程序,开发者需要正确输入用户以下用户信息,
218## 4.3.2.1 accessKey信息
219> * accessKeyId
220> * accessKeySecret
221
222这是钉钉小程序访问用户“阿里云物联网平台”账户的密钥信息,修改代码路径是./pages/app.js223**密钥信息修改位置参考**
224
225<div align=left display=flex>
226    <img src="https://img.alicdn.com/imgextra/i2/O1CN01ocLqjB1lyIFEjtKpB_!!6000000004887-2-tps-795-174.png"  style="max-width:800px;" />
227</div>
228
229## 4.3.2.2 产品信息
230> * DeviceName
231> * ProductKey
232
233这是钉钉小程序需要控制的用户物联网平台中的某个HaaS100设备。修改代码路径是./pages/HaasAudioPlayer/HaasAudioPlayer.js234**HaaS设备的密钥信息修改位置参考**
235
236<div align=left display=flex>
237    <img src="https://img.alicdn.com/imgextra/i4/O1CN01NB8Xqa1PCHAtWeFFB_!!6000000001804-2-tps-840-130.png"  style="max-width:800px;" />
238</div>
239
240## 4.3.2.3 修改播放列表
241开发者可以自己修改歌曲播放列表,配置文件位于./mock/data.json。每首歌曲信息包含:
242> * id: 歌曲在播放列表中的id
243> * copyrightId:歌曲版权信息,可忽略
244> * picS: 歌曲在播放页面中显示的图片信息
245> * songName: 歌曲名
246> * singerName: 歌手名
247> * url: 歌曲链接,可以是本地文件系统中的歌曲文件,例如fs:/data/6.mp3,也可以是浏览器可以直接播放的网络歌曲链接。
248
249# 5、总结
250本文提供了“本地”和“云端钉一体”两种调试语音播放器的方式,本地的方式可以快速验证硬件和端测软件的基础功能是否OK,云端钉一体的方式让用户在任何一款手机、平板设备上都可以通过支付宝或者钉钉小程序远程控制HaaS100音乐播放器,更具有可玩性。祝您体验HaaS云端钉一体智能语音播放器方案愉快。
251