首页 新闻 工控搜 论坛 厂商论坛 产品 方案 厂商 人才 文摘 下载 展览
中华工控网首页
  P L C | 变频器与传动 | 传感器 | 现场检测仪表 | 工控软件 | 人机界面 | 运动控制
  D C S | 工业以太网 | 现场总线 | 显示调节仪表 | 数据采集 | 数传测控 | 工业安全
  电 源 | 嵌入式系统 | PC based | 机柜箱体壳体 | 低压电器 | 机器视觉
乐鑫语音之文字转语音(TTS)
深圳市启明智显科技有限公司
收藏本文     查看收藏

今天,我们来研究乐鑫的语音助手框架ESP-Skainet其中的中文语音合成的例程。

编译原例程

  1. 首先需要clone例程

git clone --recursive https://github.com/espressif/esp-skainet.git

该工程内部自带一个idf,是运行的最佳版本,不过你任然可以使用自己的idf。

  1. 进入例程中

cd  esp-skainet/examples/chinese_tts

  1. 理论上设置好了芯片型号为esp32s3后自动调用sdkconfig.defaults.esp32s3配置文件。 但是实际上好像没有,所以这里加一个步骤确保能使用上默认配置。

cp sdkconfig.defaults.esp32s3 sdkconfig.defaults

  1. 设置芯片为esp32s3

idf.py set-target esp32s3

  1. 进入menuconfig

idf.py menuconfig

修改Audio Media Hal -> Audio Hardware board 改成ESP32-S3-Korvo-1

  1. 编译烧录程序

idf.py flash monitor -p /dev/ttyUSB0

运行原例程

运行后,可以看到如下打印

欢迎使用乐鑫语音合成
I (266) tts_parser: unicode:0x6b22 -> huan1
I (266) tts_parser: unicode:0x8fce -> ying2
I (276) tts_parser: unicode:0x4f7f -> shi3
I (276) tts_parser: unicode:0x7528 -> yong4
I (286) tts_parser: unicode:0x4e50 -> le4
I (286) tts_parser: unicode:0x946b -> xin1
I (296) tts_parser: unicode:0x8bed -> yu3
I (296) tts_parser: unicode:0x97f3 -> yin1
I (306) tts_parser: unicode:0x5408 -> he2
I (306) tts_parser: unicode:0x6210 -> cheng2

请输入短语:

简化原例程并分析

原例程大致分为两个功能,第一个功能是阅读“乐鑫语音合成”这句话,还有一个功能是朗读串口输入的文字。 第二部分经常会有bug,所以咱们简化例程,重心分析第一个功能。简化例程如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#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.h"

int 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音频来解决。另一方面如果是有限的词汇,也可以用语音拼接的方式,把相应的音频存到文件系统中,通过映射播放指定的内容并拼凑成一段完整的语句。例如:“支付宝收款”、“元”、“个”、“十”、“百”、“千”、“万”这几段文字的语音就基本可以通过拼凑音频达到支付宝语音播报功能。


 

状 态: 离线

公司简介
产品目录

公司名称: 深圳市启明智显科技有限公司
联 系 人: 杨杨
电  话: 0755-22670222
传  真:
地  址: 南山区国际创新谷6栋A座8楼
邮  编: 518000
主  页:
 
 
该厂商相关技术文摘:
启明智显分享|如何通过matter协议实现灯亮灭控制
启明云端邀您免费申领ESP32-C2样品
启明智显分享|盘点86智能开关面板一季度行业头号玩家们都发布了啥
启明智显解决方案|基于ESP32-S386智能开关面板\温控器,低成本解决方案
启明智显分享| 2.4寸旋钮串口屏在家用健身器材上的应用
启明智显分享| ESP32学习笔记参考--LED PWM 控制器与MCPWM的配置
启明智显低成本4.3寸串口屏解决案~两轮电动力仪表DEMO
启明智显分享|4.3寸串口屏应用于两轮车仪表及充电桩
更多文摘...
立即发送询问信息在线联系该技术文摘厂商:
用户名: 密码: 免费注册为中华工控网会员
请留下您的有效联系方式,以方便我们及时与您联络

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 不良信息举报
工控网客服热线:0755-86369299
版权所有 中华工控网 Copyright©2022 Gkong.com, All Rights Reserved