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相关推荐

  1. 构建简单的智能客服系统(二)——基于 UniMRCP 实现讯飞 ASR MRCP Server

    通过实现 UniMRCP 的 plugin,我们可以封装讯飞.百度.阿里等厂家的 ASR 接口,实现我们自己的 MRCP 服务器. 什是 MRCP 媒体资源控制协议(Media Resource Co ...

  2. App Inventor 2 语音交互机器人Robot,使用讯飞语音识别引擎

    应用介绍 App Inventor 2 语音识别及交互App.识别语言指令并控制机器人运动,主要用到语音识别器及文本朗读器组件,语音识别相关开发最佳入门.代码逻辑简单,App交互性及趣味性非常强~ 视 ...

  3. 讯飞tts语音引擎9.0_使用科大讯飞语音转文字的服务进行电话录音分析

    # 需求 合规性质检:1)设定规则,实现自动质检,自动打分:2)如VOC文本质检可与语音文字进行匹配,自动判断是否合格:3)新媒体文本可自动质检4)可识别异常录音(指定标准外):5)诉求记录与语音内容 ...

  4. 讯飞 tts 9.0 app_讯飞B1录音笔,到底值不值得买?

    原标题:讯飞B1录音笔,到底值不值得买? 讯飞B1录音笔,到底值不值得买? 2020-11-07 19:27:121点赞1收藏0评论 创作立场声明:利益相关,讯飞普通付费用户,从讯飞语记用到录音笔和讯 ...

  5. 勇艺达机器人上市_快讯!勇艺达正式入驻讯飞AI服务市场,以勇艺达机器人方案服务企业客户...

    原标题:快讯!勇艺达正式入驻讯飞AI服务市场,以勇艺达机器人方案服务企业客户 △深圳勇艺达机器人正式加入讯飞AI服务市场 日前,深圳勇艺达机器人有限公司正式入驻讯飞AI服务市场,与讯飞一起用勇艺达商用 ...

  6. android键盘还是讯飞输入,讯飞输入法BiuBiu键盘又添神仙操作 分类自定义排序来了...

    原标题:讯飞输入法BiuBiu键盘又添神仙操作 分类自定义排序来了 日前,讯飞输入法Android和iOS新版对BiuBiu键盘进行个性化升级,支持按自己喜好调节分类排序啦,它像一位懂你的A.I.助手 ...

  7. Node + 讯飞语音 定时播放天气预报音频

    前言 最近看了几篇文章,总觉得自己没发挥树莓派的作用,于是就琢磨着,哎,灵光一闪,整一个早晨叫醒服务,于是便有了本篇水文. 功能 每天早上八点钟,定时播放音频(音频内容为当天天气预报和空气质量),播放 ...

  8. 第十七届全国大学生智能汽车竞赛讯飞-家庭服务机器人挑战赛全国选拔赛规则

    §01 赛事简介 1.1 赛事背景   伴随着人工智能技术的不断发展与进步,如何让相关技术再有新的突破,从当前的局部智能,迈向更先进的通用智能,这是所有人工智能行业从业者的共同目标.人工智能技术的发展 ...

  9. 第十七届全国大学生智能汽车竞赛讯飞-家庭服务机器人挑战赛全国总决赛规则

    第十七届全国大学生智能汽车竞赛 讯飞-家庭服务机器人挑战赛 全国总决赛规则 一.赛项简介 1.1 赛事背景   伴随着人工智能技术的不断发展与进步,如何让相关技术再有新的突破,从当前的局部智能,迈向更 ...

  10. 刷新中文阅读理解水平,哈工大讯飞联合发布基于全词覆盖中文BERT预训练模型...

    作者 | HFL 来源 | 哈工大讯飞联合实验室(ID:rgznai100) 为了进一步促进中文自然语言处理的研究发展,哈工大讯飞联合实验室发布基于全词覆盖(Whole Word Masking)的中 ...

最新文章

  1. 图像/视频去噪算法资源集锦
  2. Onpaint和OnDraw的区别
  3. OMG!又一个频繁FullGC的案例
  4. 意大利_【解读】去意大利留学,一定要学意大利语吗?意大利语难吗?
  5. 一笔没有问题的数据 误操作成汇总和结算不一致的情况的处理方式
  6. Python中猜数字游戏
  7. 代码chaid_R或Python中的CHAID决策树
  8. 第三阶段应用层——1.3 数码相册—英文和汉字的点阵显示
  9. 大数据处理中心什么意思_什么是数据处理中心或数据中心
  10. mysql5.6 relay.info_Relay log 导致复制启动失败
  11. 车辆网相关政策和法律法规
  12. 打开word很慢(无网络时正常)
  13. PDF软件推荐——Sumatra PDF - imsoft.cnblogs
  14. python语言入门自学-Python入门
  15. Zabbix监控之监控项
  16. C/C++ 静态库(lib)的概念和使用方法
  17. Flex布局常用的一些属性及解释
  18. Java基础知识(基如eclipse)
  19. 数字电路 第四章 组合逻辑电路
  20. 统计力学练习: Ising模型的平均场解以及严格求解

热门文章

  1. CH(NH2)2PbI3(FAPbI3) 甲脒碘基钙钛矿 1451592-07-6
  2. c++一本通在线测评网站 1002:输出第二个整数
  3. JAVA羽毛球篮球运动场地预约管理系统毕业设计 开题报告
  4. 缓存框架 EhCache 使用 2
  5. 【阿里云生活物联网架构师专题 ⑥】ESP8266接入阿里生活飞燕平台国际版,实现亚马逊Alexa Echo音响语音控制;
  6. 2022-2027年中国电容器行业市场全景评估及发展战略规划报告
  7. arduino/mixly ESP now通信
  8. java表情包_大佬 java表情包 - 大佬 java微信表情包 - 大佬 javaQQ表情包 - 发表情 fabiaoqing.com...
  9. 清华大学计算机考研信息汇总
  10. 单片机流水单C语言程序,51单片机流水灯C语言源程序