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