智能电话机器人--基于 UniMRCP 实现讯飞 TTS MRCP Server
MRCP plugin
以下内容请参考《基于 UniMRCP 实现讯飞 ASR MRCP Server》:
- UniMRCP 的编译、安装运行
- UniMRCP plugin 的加载、调用流程
- UniMRCP plugin 的新建
- 讯飞 SDK 的导入
调用讯飞 API 实现 plugin
引用头文件
1 2 3 4 5 6 7 8 9 |
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h>#include "qtts.h" #include "msp_cmn.h" #include "msp_errors.h" #include "mpf_buffer.h" |
channel 新增变量
新增 buffer 用于存放 TTS 转化后的语音:
1 2 3 4 |
struct xfyun_synth_channel_t { ...mpf_buffer_t *audio_buffer; } |
讯飞 login
因为编写 ASR plugin 的时候我们已经调用过,这里可以省略。
语音合成
跟 ASR 不同,TTS 的请求一下子就发送过来,没有一个长时间处理语音流的过程。所以我们把 session 的创建销毁直接放在一个处理过程中即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
static apt_bool_t xfyun_synth_text_to_speech(const char* src_text, const char* params, mpf_buffer_t *buffer) {int ret = -1;const char* sessionID = NULL;int synth_status = MSP_TTS_FLAG_STILL_HAVE_DATA;unsigned int audio_len = 0;sessionID = QTTSSessionBegin(params, &ret);if (MSP_SUCCESS != ret){apt_log(APT_LOG_MARK, APT_PRIO_WARNING,"[xfyun] QTTSSessionBegin failed, error code: %d.", ret);return FALSE;}ret = QTTSTextPut(sessionID, src_text, (unsigned int)strlen(src_text), NULL);if (MSP_SUCCESS != ret){apt_log(APT_LOG_MARK, APT_PRIO_WARNING,"[xfyun] QTTSTextPut failed, error code: %d.",ret);QTTSSessionEnd(sessionID, "TextPutError");return FALSE;}apt_log(APT_LOG_MARK, APT_PRIO_WARNING,"[xfyun] 正在合成 ...");while (1) {/* 获取合成音频 */const void* data = QTTSAudioGet(sessionID, &audio_len, &synth_status, &ret);if (MSP_SUCCESS != ret)break;if (NULL != data){mpf_buffer_audio_write(buffer, data, audio_len);}if (MSP_TTS_FLAG_DATA_END == synth_status)break;usleep(150*1000); //防止频繁占用CPU}if (MSP_SUCCESS != ret){apt_log(APT_LOG_MARK, APT_PRIO_WARNING,"[xfyun] QTTSAudioGet failed, error code: %d.",ret);QTTSSessionEnd(sessionID, "AudioGetError");return FALSE;}/* 合成完毕 */ret = QTTSSessionEnd(sessionID, "Normal");if (MSP_SUCCESS != ret){apt_log(APT_LOG_MARK, APT_PRIO_WARNING,"[xfyun] QTTSSessionEnd failed, error code: %d.",ret);return FALSE;}return TRUE; } |
xfyun_synth_channel_request_dispatch
处理 SYNTHESIZER_SPEAK 消息时调用转换接口。转换完成后,调用如下接口触发媒体流事件:
1 |
mpf_buffer_event_write(synth_channel->audio_buffer, MEDIA_FRAME_TYPE_EVENT); |
传递语音流
xfyun_synth_stream_read
中读取 audio_buffer 中的语音流发送给客户端:
1 2 3 4 5 6 |
static apt_bool_t xfyun_synth_stream_read(mpf_audio_stream_t *stream, mpf_frame_t *frame) { ...mpf_buffer_frame_read(synth_channel->audio_buffer,frame); ... } |
修改配置文件
重新编译安装后,我们还需要修改配置文件,使用我们自己的 engine。编辑conf/unimrcpserver.xml
文件,启用我们自己的 engine:
1 2 |
<engine id="Demo-Synth-1" name="demosynth" enable="false"/> <engine id="XFyun-Synth-1" name="xfyunsynth" enable="true"/> |
运行后就可以看到 xfyunsynth 被加载了。
源码
GitHub:MRCP-Plugin-Demo,该 Demo 只是实现基本流程,还有很多可以完善的地方,如处理 synth 请求的参数。
智能电话机器人--基于 UniMRCP 实现讯飞 TTS MRCP Server相关推荐
- 构建简单的智能客服系统(二)——基于 UniMRCP 实现讯飞 ASR MRCP Server
通过实现 UniMRCP 的 plugin,我们可以封装讯飞.百度.阿里等厂家的 ASR 接口,实现我们自己的 MRCP 服务器. 什是 MRCP 媒体资源控制协议(Media Resource Co ...
- App Inventor 2 语音交互机器人Robot,使用讯飞语音识别引擎
应用介绍 App Inventor 2 语音识别及交互App.识别语言指令并控制机器人运动,主要用到语音识别器及文本朗读器组件,语音识别相关开发最佳入门.代码逻辑简单,App交互性及趣味性非常强~ 视 ...
- 讯飞tts语音引擎9.0_使用科大讯飞语音转文字的服务进行电话录音分析
# 需求 合规性质检:1)设定规则,实现自动质检,自动打分:2)如VOC文本质检可与语音文字进行匹配,自动判断是否合格:3)新媒体文本可自动质检4)可识别异常录音(指定标准外):5)诉求记录与语音内容 ...
- 讯飞 tts 9.0 app_讯飞B1录音笔,到底值不值得买?
原标题:讯飞B1录音笔,到底值不值得买? 讯飞B1录音笔,到底值不值得买? 2020-11-07 19:27:121点赞1收藏0评论 创作立场声明:利益相关,讯飞普通付费用户,从讯飞语记用到录音笔和讯 ...
- 勇艺达机器人上市_快讯!勇艺达正式入驻讯飞AI服务市场,以勇艺达机器人方案服务企业客户...
原标题:快讯!勇艺达正式入驻讯飞AI服务市场,以勇艺达机器人方案服务企业客户 △深圳勇艺达机器人正式加入讯飞AI服务市场 日前,深圳勇艺达机器人有限公司正式入驻讯飞AI服务市场,与讯飞一起用勇艺达商用 ...
- android键盘还是讯飞输入,讯飞输入法BiuBiu键盘又添神仙操作 分类自定义排序来了...
原标题:讯飞输入法BiuBiu键盘又添神仙操作 分类自定义排序来了 日前,讯飞输入法Android和iOS新版对BiuBiu键盘进行个性化升级,支持按自己喜好调节分类排序啦,它像一位懂你的A.I.助手 ...
- Node + 讯飞语音 定时播放天气预报音频
前言 最近看了几篇文章,总觉得自己没发挥树莓派的作用,于是就琢磨着,哎,灵光一闪,整一个早晨叫醒服务,于是便有了本篇水文. 功能 每天早上八点钟,定时播放音频(音频内容为当天天气预报和空气质量),播放 ...
- 第十七届全国大学生智能汽车竞赛讯飞-家庭服务机器人挑战赛全国选拔赛规则
§01 赛事简介 1.1 赛事背景 伴随着人工智能技术的不断发展与进步,如何让相关技术再有新的突破,从当前的局部智能,迈向更先进的通用智能,这是所有人工智能行业从业者的共同目标.人工智能技术的发展 ...
- 第十七届全国大学生智能汽车竞赛讯飞-家庭服务机器人挑战赛全国总决赛规则
第十七届全国大学生智能汽车竞赛 讯飞-家庭服务机器人挑战赛 全国总决赛规则 一.赛项简介 1.1 赛事背景 伴随着人工智能技术的不断发展与进步,如何让相关技术再有新的突破,从当前的局部智能,迈向更 ...
- 刷新中文阅读理解水平,哈工大讯飞联合发布基于全词覆盖中文BERT预训练模型...
作者 | HFL 来源 | 哈工大讯飞联合实验室(ID:rgznai100) 为了进一步促进中文自然语言处理的研究发展,哈工大讯飞联合实验室发布基于全词覆盖(Whole Word Masking)的中 ...
最新文章
- 图像/视频去噪算法资源集锦
- Onpaint和OnDraw的区别
- OMG!又一个频繁FullGC的案例
- 意大利_【解读】去意大利留学,一定要学意大利语吗?意大利语难吗?
- 一笔没有问题的数据 误操作成汇总和结算不一致的情况的处理方式
- Python中猜数字游戏
- 代码chaid_R或Python中的CHAID决策树
- 第三阶段应用层——1.3 数码相册—英文和汉字的点阵显示
- 大数据处理中心什么意思_什么是数据处理中心或数据中心
- mysql5.6 relay.info_Relay log 导致复制启动失败
- 车辆网相关政策和法律法规
- 打开word很慢(无网络时正常)
- PDF软件推荐——Sumatra PDF - imsoft.cnblogs
- python语言入门自学-Python入门
- Zabbix监控之监控项
- C/C++ 静态库(lib)的概念和使用方法
- Flex布局常用的一些属性及解释
- Java基础知识(基如eclipse)
- 数字电路 第四章 组合逻辑电路
- 统计力学练习: Ising模型的平均场解以及严格求解
热门文章
- CH(NH2)2PbI3(FAPbI3) 甲脒碘基钙钛矿 1451592-07-6
- c++一本通在线测评网站 1002:输出第二个整数
- JAVA羽毛球篮球运动场地预约管理系统毕业设计 开题报告
- 缓存框架 EhCache 使用 2
- 【阿里云生活物联网架构师专题 ⑥】ESP8266接入阿里生活飞燕平台国际版,实现亚马逊Alexa Echo音响语音控制;
- 2022-2027年中国电容器行业市场全景评估及发展战略规划报告
- arduino/mixly ESP now通信
- java表情包_大佬 java表情包 - 大佬 java微信表情包 - 大佬 javaQQ表情包 - 发表情 fabiaoqing.com...
- 清华大学计算机考研信息汇总
- 单片机流水单C语言程序,51单片机流水灯C语言源程序