1@page uvoice uvoice
2
3[更正文档](https://gitee.com/alios-things/uvoice/edit/master/README.md)      [贡献说明](https://help.aliyun.com/document_detail/302301.html)
4
5# 概述
6uVoice是AliOS Things的音频组件,提供了RTOS系统上端到云全链路的语音能力,包括音频硬件管理、音频增强算法、播放器、录音等基本音频功能,也结合阿里的智能语音云端服务,提供了TTS、语音控制、语音对话等能智能语音功能。同时,uVoice也是一个资源占用极少,性能较高的音频组件,适合为低资源、低算力的嵌入式MCU提供音频能力。
7组件支持以下功能:
8- 录音
9- 播放(Flash/Memory/FS/HTTP/HTTPS/HLS)
10- 播放控制(暂停/继续/切换/快进/快退/播放列表)
11- 音频格式解码(MP3、AAC等)
12- 音频格式编码
13- 阿里云TTS
14
15## 版权信息
16> Apache license v2.0
17
18## 目录结构
19```tree
20.
21├── aos.mk
22├── application
23│   └── alicloudtts
24│       ├── alicloudtts.c
25│       ├── alicloudtts.h
26│       ├── alicloudtts_intf.h
27│       ├── include
28│       │   └── uvoice_tts.h
29│       └── tts.c
30├── audio
31│   ├── audio_aec.c
32│   ├── audio_aec.h
33│   ├── audio_common.c
34│   ├── audio_common.h
35│   ├── audio_mixer.c
36│   ├── audio_mixer.h
37│   ├── audio_process.c
38│   ├── audio_process.h
39│   ├── audio_stream.c
40│   ├── audio_stream.h
41│   ├── audio_trigger.c
42│   ├── audio_trigger.h
43│   ├── audio_vad.c
44│   ├── audio_vad.h
45│   ├── hal
46│   │   ├── haas100
47│   │   │   └── uvoice_pcm.c  # haas100
48│   │   └── linux
49│   │       └── uvoice_pcm.c
50│   └── process
51│       ├── proc_aec.c
52│       ├── proc_agc.c
53│       ├── proc_ns.c
54│       ├── proc_resample.c
55│       └── proc_vad.c
56├── build
57│   └── mk_makefile
58├── CMakeLists.txt
59├── codec
60│   ├── amr_decoder.c
61│   ├── amr_encoder.c
62│   ├── amrwb_decoder.c
63│   ├── amrwb_encoder.c
64│   ├── ogg_decoder.c
65│   ├── opensource
66│   │   ├── pvaac                    # aac解码器
67│   │   │   ├── aos.mk
68│   │   │   ├── get_pv_aac.py
69│   │   │   ├── oscl
70│   │   │   │   ├── oscl_base.h
71│   │   │   │   ├── oscl_dll.h
72│   │   │   │   ├── oscl_exception.h
73│   │   │   │   └── oscl_mem.h
74│   │   └── pvmp3                     # mp3解码器
75│   │       ├── aos.mk
76│   │       ├── CMakeLists.txt
77│   │       ├── get_pvmp3.py
78│   │       ├── Makefile
79│   │       ├── oscl_base.h
80│   │       └── oscl_mem.h
81│   ├── opus_decoder.c
82│   ├── opus_encoder.c
83│   ├── pvaac_decoder.c
84│   ├── pvmp3_decoder.c
85│   ├── spx_decoder.c
86│   └── spx_encoder.c
87├── common
88│   ├── base64.c
89│   ├── event.c
90│   ├── message.c
91│   ├── ringbuffer.c
92│   └── urlencode.c
93├── Config.in
94├── connect
95│   ├── uvoice_ws.c
96│   └── uvoice_ws.h
97├── example
98│   └── uvoice_example.c             # 示例代码
99├── include                          # 对外头文件
100│   ├── uvoice_event.h
101│   ├── uvoice_init.h
102│   ├── uvoice_mlist.h
103│   ├── uvoice_player.h
104│   ├── uvoice_recorder.h
105│   ├── uvoice_test.h
106│   └── uvoice_types.h
107├── internal                         # 内部头文件
108│   ├── uvoice_alios.h
109│   ├── uvoice_amp.h
110│   ├── uvoice_audio.h
111│   ├── uvoice_codec.h
112│   ├── uvoice_common.h
113│   ├── uvoice_config.h
114│   ├── uvoice_format.h
115│   ├── uvoice_linux.h
116│   ├── uvoice_list.h
117│   ├── uvoice_message.h
118│   ├── uvoice_os.h
119│   ├── uvoice_pcm.h
120│   ├── uvoice_play.h
121│   ├── uvoice_record.h
122│   ├── uvoice_resampler.h
123│   ├── uvoice_ringbuffer.h
124│   ├── uvoice_stream.h
125│   └── uvoice_wave.h
126├── media
127│   ├── uvoice_codec.c
128│   ├── uvoice_fade.c
129│   ├── uvoice_format.c
130│   ├── uvoice_mlist.c
131│   ├── uvoice_player.c
132│   ├── uvoice_recorder.c
133│   ├── uvoice_stream.c
134│   └── uvoice_wave.c
135├── package.yaml
136├── README.md
137├── stream
138│   ├── uvoice_cache.c
139│   ├── uvoice_cache.h
140│   ├── uvoice_download.c
141│   ├── uvoice_download.h
142│   ├── uvoice_file.c
143│   ├── uvoice_hls.c
144│   ├── uvoice_hls.h
145│   ├── uvoice_http.c
146│   ├── uvoice_http.h
147│   ├── uvoice_partition.c
148│   └── uvoice_ssl.c
149├── test
150│   ├── test_main.c
151│   ├── test_player.c
152│   ├── test_recorder.c
153│   ├── test_swid.c
154│   └── test_tts.c
155├── tools
156│   └── gen_voice.py
157└── uvoice.c
158```
159
160## 依赖组件
161* a2sa
162* ulog
163* mbedtls
164
165# 常用配置
166系统中相关配置已有默认值,如需修改配置,统一在yaml中**def_config**节点修改,具体如下:
167> 支持播放功能开关
168```yaml
169  UVOICE_PLAYER_ENABLE: 1
170```
171> 支持录音功能开关
172```yaml
173UVOICE_RECORDER_ENABLE: 1
174```
175> 支持播放列表功能开关
176```yaml
177UVOICE_MLIST_ENABLE: 1
178```
179> 支持播放文件功能开关
180```yaml
181UVOICE_FILE_ENABLE: 1
182```
183> 支持播放HTTP功能开关
184```yaml
185UVOICE_HTTP_ENABLE: 1
186```
187> 支持播放HTTPS功能开关
188```yaml
189UVOICE_HTTPS_ENABLE: 1
190```
191> 支持播放HTTPS功能开关
192```yaml
193UVOICE_HTTPS_ENABLE: 1
194```
195> 支持播放网络音频时自动下载功能开关
196```yaml
197UVOICE_DOWNLOAD_ENABLE: 1
198```
199> 支持播放HLS流媒体功能开关
200```yaml
201UVOICE_HLS_ENABLE: 1
202```
203> 支持MP3解码功能开关
204```yaml
205DECODER_PV_MP3_ENABLE: 1
206```
207> 支持AAC(M4A)解码功能开关
208```yaml
209DECODER_PV_M4A_ENABLE: 1
210```
211> 支持阿里云TTS功能开关
212```yaml
213ALICLOUD_TTS_SUPPORT: 1
214```
215
216
217# API说明
218
219- 参考 [uvoice_init_api](https://g.alicdn.com/alios-things-3.3/doc/group__uvoice__init__api.html)
220- 参考 [uvoice_types_api](https://g.alicdn.com/alios-things-3.3/doc/group__uvoice__types__api.html)
221- 参考 [uvoice_player_api](https://g.alicdn.com/alios-things-3.3/doc/group__uvoice__player__api.html)
222- 参考 [uvoice_recorder_api](https://g.alicdn.com/alios-things-3.3/doc/group__uvoice__recoder__api.html)
223- 参考 [uvoice_mlist_api](https://g.alicdn.com/alios-things-3.3/doc/group__uvoice__mlist__api.html)
224- 参考 [uvoice_event_api](https://g.alicdn.com/alios-things-3.3/doc/group__uvoice__event__api.html)
225- 参考 [uvoice_test_api](https://g.alicdn.com/alios-things-3.3/doc/group__uvoice__test__api.html)
226
227# 使用示例
228
229组件使用示例相关的代码下载、编译和固件烧录均依赖AliOS Things配套的开发工具,所以首先需要参考[《AliOS Things集成开发环境使用说明之搭建开发环境》](https://help.aliyun.com/document_detail/302378.html),下载安装。
230待开发环境搭建完成后,可以按照以下步骤进行示例的测试。
231
232## 步骤1 创建或打开工程
233
234**打开已有工程**
235
236如果用于测试的案例工程已存在,可参考[《AliOS Things集成开发环境使用说明之打开工程》](https://help.aliyun.com/document_detail/302381.html)打开已有工程。
237
238**创建新的工程**
239
240组件的示例代码可以通过编译链接到AliOS Things的任意案例(solution)来运行,这里选择helloworld_demo案例。helloworld_demo案例相关的源代码下载可参考[《AliOS Things集成开发环境使用说明之创建工程》](https://help.aliyun.com/document_detail/302379.html)241
242## 步骤2 添加组件
243
244案例下载完成后,需要在helloworld_demo组件的package.yaml中添加对组件的依赖:
245
246> solution中helloworld_demo的package.yaml中添加
247```yaml
248depends:
249  - uvoice: master # helloworld_demo中引入uvoice组件
250```
251
252## 步骤3 下载组件
253
254在已安装了  的开发环境工具栏中,选择Terminal -> New Terminal启动终端,并且默认工作路径为当前工程的workspace,此时在终端命令行中输入:
255
256```shell
257
258aos install uvoice
259
260```
261
262上述命令执行成功后,组件源码则被下载到了./components/uvoice路径中。
263
264## 步骤4 添加示例
265
266> uvoice组件的package.yaml中添加[example示例代码](https://gitee.com/alios-things/uvoice/tree/master/example)267
268```yaml
269source_file:
270  - "example/uvoice_example.c" # add uvoice_example.c
271```
272
273## 步骤6 烧录固件
274
275helloworld_demo案例的固件生成后,可参考[《AliOS Things集成开发环境使用说明之烧录固件》](https://help.aliyun.com/document_detail/302383.html)来烧录固件。
276
277## 步骤7 打开串口
278
279固件烧录完成后,可以通过串口查看示例的运行结果,打开串口的具体方法可参考[《AliOS Things集成开发环境使用说明之查看日志》](https://help.aliyun.com/document_detail/302382.html)280
281当串口终端打开成功后,可在串口中输入help来查看已添加的测试命令。
282
283## 步骤8 测试示例
284
285> uvoice示例代码初始化
286```sh
287uvoice_example
288```
289> uvoice播放文件系统MP3文件功能测试
290```sh
291play "fs:/data/test.mp3"      # 这里文件名替换成实际放在littlefs文件系统中的MP3文件
292```
293> uvoice播放文件系统m4a文件功能测试
294```sh
295play "fs:/data/test.m4a"      # 这里文件名替换成实际放在littlefs文件系统中的M4A文件
296```
297> uvoice播放网络音频功能测试
298```sh
299play "http:xxxxxxxx/test.mp3"      # 这里文件名替换成实际http链接
300```
301```sh
302play "https:xxxxxxxxs/test.mp3"      # 这里文件名替换成实际https链接
303```
304> uvoice录音功能测试
305```sh
306record 16000 1 16 1024 0 fs:/data/recording.wav
307```
308
309**关键日志**
310> CLI日志:
311```sh
312uvoice example initialization succeeded !
313```
314
315# 注意事项
316> 解码器下载
317```sh
318要支持MP3播放,编译前,需要到codec/opensource/pvmp3目录下执行get_pvmp3.py
319要支持AAC/M4A播放,编译前,需要到codec/opensource/pvaac目录下执行get_pvaac.py
320```
321> 支持播放列表功能
322```sh
323要支持播放列表功能,需要有SD卡,并使能fatfs文件系统
324```
325> 支持https
326```sh
327要支持https播放功能,需要将mbedtls的MBEDTLS_CONFIG_TLS_MAX_CONTENT_LEN配置为16k
328```
329