在线语音合成就是在联网的场景下将文字转换成声音,实现机器向人的声音交互。这个概念应该是比较好理解的,下面就结合官网的Android在线合成的Demo讲解一下合成的流程以及大家经常遇到的一些问题。

到官网SDK下载中心下载在线命令词识别SDK(这里以Android版本为例)后,可以发现压缩包里面的目录结构和听写的非常类似,这里告诉大家一个小秘密:

在官网下载Android的这三个选项下载的SDK包是一模一样的,为什么会这样呢?因为听写、在线合成、在线命令词三个功能在我们平台是放在一个SDK 包里的,版本也是做统一维护,SDK包里的demo自然也是集合了这个三个功能的演示功能(当然还包含一些其他功能,如语义理解、评测),如下图所示:

红框中的java文件从上到下依次是:命令词识别子demo、听写子demo、评测子Demo、Demo主入口界面、SpeechUtility初始化、 合成子Demo、语义理解子Demo。可能有人注意到,其中命令词识别子demo、听写子demo、合成子Demo都有对应本地功能,这些本地功能是有语 记APP提供的,而不是离线SDK提供的,所以如果你的手机上没有安装语记APP,你在demo里看到的这些本地功能是用不了的(报错语音组件未安装 21001),这部分想有更进一步的了解见帖子:

21001问题详解:http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=11724&fromuid=33982

下面看一下TtsDemo.java里面的调用流程,注意在这之前一定别忘了SpeechApp.java里面的SpeechUtility初始化。

**首先是初始化合成对象**

mTts = SpeechSynthesizer.createSynthesizer(TtsDemo.this, mTtsInitListener);

mTtsInitListener是初始化监听器,比较保险的做法是在初始化回调成功后再进行下面的操作。

**然后是设置相关合成参数**

// 清空参数
mTts.setParameter(SpeechConstant.PARAMS, null);
// 根据合成引擎设置相应参数
if(mEngineType.equals(SpeechConstant.TYPE_CLOUD)) {
mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
// 设置在线合成发音人
mTts.setParameter(SpeechConstant.VOICE_NAME, voicer);
if(!"neutral".equals(emot)){
// 当前仅发音人“小艾”支持设置情感
// “小艾”发音人需要付费使用,具体请联系:msp_support@iflytek.com
mTts.setParameter(SpeechConstant.EMOT, emot);
}
//设置合成语速
mTts.setParameter(SpeechConstant.SPEED, mSharedPreferences.getString("speed_preference", "50"));
//设置合成音调
mTts.setParameter(SpeechConstant.PITCH, mSharedPreferences.getString("pitch_preference", "50"));
//设置合成音量
mTts.setParameter(SpeechConstant.VOLUME, mSharedPreferences.getString("volume_preference", "50"));

//设置播放器音频流类型
mTts.setParameter(SpeechConstant.STREAM_TYPE, mSharedPreferences.getString("stream_preference", "3"));
// 设置播放合成音频打断音乐播放,默认为true
mTts.setParameter(SpeechConstant.KEY_REQUEST_FOCUS, "true");
// 设置音频保存路径,保存音频格式支持pcm、wav,设置路径为sd卡请注意WRITE_EXTERNAL_STORAGE权限
// 注:AUDIO_FORMAT参数语记需要更新版本才能生效
mTts.setParameter(SpeechConstant.AUDIO_FORMAT, "wav");
mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory()+"/msc/tts.wav");

相关参数的作用在注释中已经说的比较详细了。
**最后开始合成**
mTts.startSpeaking(text, mTtsListener);

其中text就是你需要合成的文本,mTtsListener是合成监听器,里面包含了合成进度、合成完成等等非常有用的回调。

**常见问题及解答:**

1、发音人参数可以设置成哪些发音人呢?

目前支持的在线发音人列表见下面的帖子
【官方】合成发音人在线、离线支持情况
http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=12012&fromuid=33982
(出处: 语音云社区)

2、一次可以合成多长的文本呢?我要合成文本超长了怎么办?

合成文本是有长度限制的,一次最长合成8192个字节的文本,你可能根据你的文本的编码格式换算出支持的最长字符数。如果你要合成的文本超长了,你可以将他按照长度限制进行切分,分多次合成后再依次进行音频数据的合并或者播放。

3、在线合成的音频数据是没有经过压缩的吗?会不会非常耗费流量?

和听写时音频数据的上传类似,合成是服务器返回的音频 数据是经过”speex编码“压缩过的,压缩比约为1:10,也就是时候服务端将合成的音频进行1:10的压缩,然后客户端SDK接收到音频后再解码成非 压缩的原始音频,那么按照16K采样率16位采样精度单声道的音频来计算,1秒钟的音频压缩后的大小大约为3K左右,并不是非常的大。另外上面提到的 speex编码并不是普通的speex编码,因此这两种方式压缩出来的音频也不能通用。

人工智能交互集成在线语音合成能力的Tips的更多相关文章

  1. Xamarin开发笔记—百度在线语音合成

    语音合成:也被称为文本转换技术(TTS),它是将计算机自己产生的.或外部输入的文字信息转变为可以听得懂的.流利的口语输出的技术. 技术选型:语音合成初步选择有两个,一是讯飞.二是百度. 因为使用的是X ...

  2. 初探机器学习之使用讯飞TTS服务实现在线语音合成

    最近在调研使用各个云平台提供的AI服务,有个语音合成的需求因此就使用了一下科大讯飞的TTS服务,也用.NET Core写了一个小示例,下面就是这个小示例及其相关背景知识的介绍. 一.什么是语音合成(T ...

  3. Python人工智能第一篇:语音合成和语音识别

    Python人工智能第一篇:语音合成和语音识别 ​ 此篇是人工智能应用的重点,只用现成的技术不做底层算法,也是让初级程序员快速进入人工智能行业的捷径.目前市面上主流的AI技术提供公司有很多,比如百度, ...

  4. 集成google翻译的小tips

    文章首发于github.io 2018-08-04 12:43:20 google翻译的强大,就像我们公司的slogan : "让语言无国界,让世人心相通" 友情提示: googl ...

  5. 使用URL在线语音合成

    近期一直在做手机的项目,用到了语音合成与识别的功能.就找了几个网址做了分析,这里只实现了内容的合成.并不包括语音识别. 首先看一下谷歌的语音合成地址: http://translate.google. ...

  6. 集成Android免费语音合成功能(在线、离线、离在线融合)

    集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(离线)集成Android免费语音合成功能(在线.离线.离在线融合),有这一篇文章就够了(离在线融合) 转眼间,大半年没 ...

  7. Android 讯飞语音之语音合成(在线有声朗读)

    原文:http://www.cnblogs.com/scetopcsa/p/3845427.html 在线语音合成的使用方法: 首先下载相关的sdk,这个网址里有多种版本,我选择的Android. h ...

  8. 推荐 C/C++ 人工智能 框架和库

    2018年10月22日 22:59:58 yangminggg 阅读数:2217   值得推荐的C/C++框架和库 C++资源大全 关于 C++ 框架.库和资源的一些汇总列表,内容包括:标准库.Web ...

  9. 讯飞语音JavaWeb语音合成解决方案

    在线语音合成 将文字信息转化为声音信息,给应用配上"嘴巴".我们提供了众多极具特色的发音人(音库)供您选择.其合成音在音色.自然度等方面的表现均接近甚至超过了人声.这种语音合成体验 ...

随机推荐

  1. 详解MVC设计模式

    1 MVC介绍 众所周知MVC不是设计模式,是一个比设计模式更大一点的模式,称作设计模式不合理,应该说MVC它是一种软件开发架构模式,它包含了很多的设计模式,最为密切是以下三种:Observer (观 ...

  2. js压缩图片base64长度

    var myCanvas=$('.img-container > img').cropper('getCroppedCanvas'); (function (base64){ var image ...

  3. java的4种代码块

    一.普通代码块 直接在一个方法中出现的{}就称为普通代码块,例子程序如下: public class CodeDemo01{ public static void main(String[] args ...

  4. Nginx基础知识之————RTMP模块中的中HLS专题(翻译文档)

    一.在Nginx配置文件的RTMP模块中配置hls hls_key_path /tmp/hlskeys; 提示错误信息: nginx: [emerg] the same path name " ...

  5. TestNG Study Note 1 - Eclipse 插件安装

    TestNG 插件在线安装 Help -> Install New Software -> Add -> Paste TestNG url to Add:  http://testn ...

  6. leveldb 学习。

    1)大概浏览了leveldb文档的介绍.本想逐步看代码,想想还是自己先实现一个看看如何改进. 2)完成了一个非常丑陋的初版,但是还是比初初版有进步. 3)key value的数据库,不允许有key重复 ...

  7. 最详细的Log4j使用教程

    日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录.在apache网站:jakarta.apache.org/log4j 可以免费下载到Log ...

  8. TCP/IP 三次握手-四次挥手

    TCP的建立需要三次握手,断开需要四次挥手. 首先三次握手: 首先,客户机向服务器发送请求报文,服务器回复ACK,并分配资源,而客户端接受到ACK后回复确认报文,并分配资源,此时三次握手完成. 四次挥 ...

  9. HBase 数据读写流程

    HBase 数据读写流程 2016-10-18 杜亦舒 读数据 HBase的表是按行拆分为一个个 region 块儿,这些块儿被放置在各个 regionserver 中 假设现在想在用户表中获取 ro ...

  10. redsocks 将socks代理转换成全局代理

    redsocks 需要手动下载编译.前置需求为libevent组件,当然gcc什么的肯定是必须的. 获取源码 git clone https://github.com/darkk/redsocks 安 ...