本文分享自中移OneOS微信公众号 《当万耦遇上chaoTTS》 ,作者:柏灵。 大家好,柏灵又又又来啦!!相信大家已经开始在寒冷的冬季种植鲜嫩的豌豆尖,火锅里烫上豌豆尖,从此打工人有了豌豆尖自由!(还没有种植的小伙伴,可以通过OneOS 基于端云融合能力 | “种植环境监测器”技术细节学习哦)小伙伴们真是棒棒哒。打工人,打工魂,打工才是人上人,吃饱喝足走一波,吃着火锅唱着歌。作为自嗨型灵魂歌手,柏灵拿出了真正的实力,chaoTTS! chaoTTS是个啥? chaoTTS组件 提供了丰富的文字转语音功能。执行逻辑是:通过httpclient组件把文字发送到云上AI,使用云上AI的语音合成功能,生成音频文件,并下载到模组,使用音频驱动播放。 chaoTTS组件 向用户层提供简洁易用的操作接口,实现了以下功能,方便用户使用组件相关功能。 • 接入云上AI功能 • 在线文字转语音功能 • 支持设置人声、语速、音调、音量、cuid值 • 支持设置下载的文件格式功能(默认为wav格式) • 提供了相应的shell命令和at指令,方便用户使用 前期准备 2.1 硬件支持 本次开发使用万耦创世L475开发板,它的主频最高80MHz,1024K FLASH ,128K SRAM。主要的外设资源,如各类接口,各类传感器等,都位于底板上。除了开发板之外,还需准备J-Link用于下载运行,以及准备一张SD card和一个耳机。 详情可参见OneOS官网对 万耦开发板 的详细介绍。 2.2 软件获取 OneOS是中国移动针对物联网领域推出的轻量级操作系统,具有可裁剪、跨平台、低功耗、高安全等特点,支持ARM Cortex-M/R/A、MIPS、RISC-V等主流CPU架构,兼容POSIX、CMSIS等标准接口,支持Micropython语言开发,提供图形化开发工具,能够有效提高开发效率并降低开发成本,帮助客户开发稳定可靠、安全易用的物联网应用。小伙伴们可以通过码云下载代码体验。链接如下: CMCC-OneOS OneOS-Cube 配置开发 3.1 OneOS-Cube配置 chaoTTS 组件依赖于云上AI、httpclient组件、OpenCC组件,以及audio驱动。因此,需要做以下准备: • menuconfig中开启httpclient组件、OpenCC组件和chaoTTS组件 • 这里以百度AI为例,用户注册 百度AI开发平台 ,并创建其语音识别应用 • 硬件支持音频播放,另外准备一张SD card,以及一个耳机 • 支持文件系统,支持创建、读、写、删除文件操作 使用menuconfig,开启httpclient组件、开启文件系统组件、OpenCC组件和chaoTTS组件。 Httpclient Enable Httpclient TLS encrypt Enable HTTPCLIENT sample (5000) HTTP SET RECV TIMEOUT MS Using working directory (2) The max number of mounted file system (2) The max number of file system type (16) The max number of opened files Enable JFFS2 Enable FatFs ... Enable tts aivoice Enable tts aivoice sample (/tts.wav) the tts audio file name (500) tts text max length (1024) tts buf and file size openCC Enable Character Conversion Function Enable sample chaoTTS的网络连接支持有线连接和无线连接两种方式。这里以WiFi模组ESP8266为例,配置如下: Enable ESP8266 module object auto create (uart1) ESP8266 interface device name (115200) ESP8266 interface device name (3000) The maximum length of AT command data accepted Enable ESP8266 module auto connect ... 3.2 注册百度AI 这里以百度AI平台为例。注册百度AI开发平台,创建语音识别应用。只需 三步 ,即可完成语音合成接口的调用,让您的应用“开口说话”。具体方法可参见 语音合成 。目的是为了获取到 API KEY 以及 Secret KEY ,用于接口调用连接百度AI平台。 编译、下载、运行 进入projects\stm32l475-cmcc-oneos目录,打开OneOS-Cube命令行,执行命令scons --ide=mdk5生成并更新keil项目工程文件,双击project.uvprojx,打开MDK工程,点击左上角的 Build 按钮,等待编译完成。当看到0 Error(s), 0 Warning(s)的输出时说明编译完成。 确保jlink已和万耦开发板,以及电脑相连接。此时点击左上角的 Download 按钮,将程序下载到开发板中。但看到Programming Done. Flash Load finished则表明程序已经烧写成功。 这时,小伙伴们就可以使用chaoTTS组件的功能啦。我们可以直接在自己的应用程序中调用接口,也可以使用我们提供的shell命令。 4.1 shell命令使用 联网:使用ifconfig查看是否网络连接成功 初始化:tts_aivoice_init tA5BrPmeq5xekai4dfy4bWKs nAXS4j14zKnRFArmRiGLnCQz2E8TyVmS 文字转语音:tts_aivoice_player 太冷了,在家种豌豆尖烫火锅撒 设置人声:tts_aivoice_per 4 演示视频: 点击跳转 注意 :tts_aivoice_init后面跟的是自己在百度AI获取到的 API KEY 以及 Secret KEY 。因为录制的是耳机声音,可能会比较小,需要小伙伴们调大音量。 常见问题 Q): 为何使用shell命令无法使用chaoTTS组件功能? A): 如果需要在shell下使用ttsAiVoice组件功能,请调大shell任务的栈大小,可以在shell下通过task命令查看shell的栈最大使用率来进行调节。 Q): 为何输入文本太长,获取到的音频只有前面的一部分? A): 如果chaoTTS组件配置中,配置的tts文本长度不够,会出现该情况。请使用menuconfig调大以上值。 Q): 为何总是无法使用chaoTTS组件功能? A): 请确认已开启网络功能,且已联网成功。 Q): 为何获取到的音频有杂音? A): 在有线网络或者模组本身播放音频,不应出现此情况。如果是MCU外接wifi模组或者4G模组,因为要使用molink组件,所以请调大AT命令接收数据buffer的最大长度。可以通过打开DLOG日志,查看AT命令接收数据buffer长度是否不够。 也需考虑,是否内存空间不足,可以使用mem命令查看。请保留 10k以上 的RAM空间给chaoTTS使用。 最后,通信模组通过串口发送给系统的数据将会首先缓存在串口数据缓冲区中,因此,如果串口缓冲区大小设置过小则会导致Molink无法正确的接收通信模组发送的数据,造成AT指令执行超时或数据接收不全等问题。在OneOS操作系统中串口缓存区的大小默认为64bytes,如果使用Molink组件则建议将串口缓冲区调大。 Serial Enable serial drivers (1024) Set RX buffer size (64) Set TX buffer size References 万耦开发板: https://os.iot.10086.cn/doc/hardware_support/oneos_dev_board.html CMCC-OneOS : https://gitee.com/cmcc-oneos OneOS-Cube : https://os.iot.10086.cn/download/ 百度AI开发平台: https://ai.baidu.com/ 语音合成: https://ai.baidu.com/ai-doc/SPEECH/jk38y8gno