今天,我们来研究乐鑫的语音助手框架esp-skainet其中的中文语音合成的例程。
编译原例程 1.首先需要clone例程
git clone --recursive https://github.com/espressif/esp-skainet.git 该工程内部自带一个idf,是运行的最佳版本,不过你任然可以使用自己的idf。
2.进入例程中
cd esp-skainet/examples/chinese_tts
3.理论上设置好了芯片型号为esp32s3后自动调用sdkconfig.defaults.esp32s3配置文件。 但是实际上好像没有,所以这里加一个步骤确保能使用上默认配置。
cp sdkconfig.defaults.esp32s3 sdkconfig.defaults
4.设置芯片为esp32s3
idf.py set-target esp32s3
5.进入menuconfig
idf.py menuconfig 修改audio media hal -> audio hardware board 改成esp32-s3-korvo-1
6.编译烧录程序
idf.py flash monitor -p /dev/ttyusb0 运行原例程 运行后,可以看到如下打印
欢迎使用乐鑫语音合成i (266) tts_parser: unicode:0x6b22 -> huan1i (266) tts_parser: unicode:0x8fce -> ying2i (276) tts_parser: unicode:0x4f7f -> shi3i (276) tts_parser: unicode:0x7528 -> yong4i (286) tts_parser: unicode:0x4e50 -> le4i (286) tts_parser: unicode:0x946b -> xin1i (296) tts_parser: unicode:0x8bed -> yu3i (296) tts_parser: unicode:0x97f3 -> yin1i (306) tts_parser: unicode:0x5408 -> he2i (306) tts_parser: unicode:0x6210 -> cheng2请输入短语: 简化原例程并分析 原例程大致分为两个功能,第一个功能是阅读“乐鑫语音合成”这句话,还有一个功能是朗读串口输入的文字。
第二部分经常会有bug,所以咱们简化例程,重心分析第一个功能。简化例程如下:
#include #include #include #include freertos/freertos.h#include freertos/task.h#include esp_system.h#include esp_tts.h#include esp_tts_voice_xiaole.h#include esp_board_init.hint app_main(){ esp_error_check(esp_board_init(audio_hal_16k_samples, 1, 16)); // 初始化codec芯片,配置好采样率、声道数、采样大小 esp_tts_voice_t *voice = (esp_tts_voice_t *)&esp_tts_voice_xiaole; // 配置tts的声音配置文件,来自libvoice_set_xiaole esp_tts_handle_t *tts_handle = esp_tts_create(voice); // 创建tts对象 char *prompt1 = 你好我是启明云端; // 需要转换的文字 if (esp_tts_parse_chinese(tts_handle, prompt1)) // 文字解析成拼音 { int len[1] = {0}; do { short *pcm_data = esp_tts_stream_play(tts_handle, len, 3); // 拼音转换成pcm音频 esp_audio_play(pcm_data, len[0] * 2, portmax_delay); //播放音频 } while (len[0] > 0); } esp_tts_stream_reset(tts_handle); // 重置 tts 流并清除 tts 实例的所有缓存 return 0;} 这里音频的tts来自静态库libvoice_set_xiaole中,目前也只有这一个音色可供使用,其余的tts相关函数则是属于静态库libesp_tts_chinese。
总结 tts过度封装化,一定程度上注定它的使用难度不高。但是依据已跑完的例程来看,音频任然有发音声音的问题,对于现在的一些成熟的tts方案,乐鑫的这个tts还有一定的差距,这个缺点可能导致无法应用于商业化项目中。项目中如果涉及到语音转文字的内容,一方面可以通过云平台的提供的api能力发送文字收取pcm音频来解决。另一方面如果是有限的词汇,也可以用语音拼接的方式,把相应的音频存到文件系统中,通过映射播放指定的内容并拼凑成一段完整的语句。例如:“支付宝收款”、“元”、“个”、“十”、“百”、“千”、“万”这几段文字的语音就基本可以通过拼凑音频达到支付宝语音播报功能。
单片机电子电路基础知识
华为余泉:2016年是NB-IoT产业发展关键年
导热硅脂什么品牌好?选购时要注意什么?
禾赛首次在ADAS业务领域斩获国际顶级OEM量产定点
私人发行的数字货币和央行发行的货币有什么不同
乐鑫语音助手框架ESP-Skainet的中文语音合成例程
无人驾驶飞行的士真的就要来了 空客已经签下测试合同
芯力特SIT1043Q CAN FD收发器振铃抑制功能实现原理及实际应用
射频(RF)阻抗匹配:计算和仿真
苹果iOS11.3正式版发布_iOS11.3正式版只为新iPad而来
单片机与PC机的通信原理及电路的设计研究分析
魅族白老:MX6的拍照分分钟超越三星S7edge!
阿里正寻求约50亿美元贷款 这些上市公司靠共享单车崛起
新小型力传感器在各领域的应用
用AI预测地震、洪水、飓风和火山喷发 现在已经成为了可能
长虹等离子面板产能将升至300万片
禾赛科技激光雷达获哪吒汽车项目定点,新车型将于2025年上半年落地
泰矽微荣膺上榜2023年中国IC风云榜
使用NVIDIA SDK 11.1对DirectX 12进行编码
骁龙855和845差距大吗