Android系统从1.6版本开始就支持TTS(Text-To-Speech),即语音合成。但是android系统默认的TTS引擎:Pic TTS不支持中文。所以我们得安装自己的TTS引擎和语音包。

在项目中,一开始用的是手说TTS,免费版的,感觉声音很不僵硬,不自然,不连贯。付费版的还要钱激活,如果不激活,限制每次只能度5个字,而且比免费版也好不了多少。最后采用了讯飞语音TTS1.0,发音连贯自然,个人感觉很不错了,以后就用它。

介绍下使用方法:

1.首先下载讯飞的语音包apk,以及语音引擎apk,安装在手机上。

  链接:http://pan.baidu.com/s/1mgL7elU  提取码:oelh

2.进入系统设置-->语音输入输出设置-->勾选“讯飞语音合成" , 默认引擎“讯飞语音合成”, 语言“中文"。

        

调用android自带的TTS api,就可实现中文版语音合成。

package com.example.testxunfeitts;

import java.util.Locale;

import android.app.Activity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity { private EditText mEditText = null;
private Button readButton = null;
private Button saveButton = null;
private CheckBox mCheckBox = null;
private TextToSpeech mTextToSpeech=null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mEditText = (EditText)this.findViewById(R.id.edittext);
readButton = (Button)this.findViewById(R.id.rbutton);
saveButton = (Button)this.findViewById(R.id.sbutton);
mCheckBox = (CheckBox)this.findViewById(R.id.checkbox); //实例并初始化TTS对象
mTextToSpeech=new TextToSpeech(this, new TextToSpeech.OnInitListener() { @Override
public void onInit(int status) {
if (status==TextToSpeech.SUCCESS) {
//设置朗读语言
int supported=mTextToSpeech.setLanguage(Locale.US);
if ((supported!=TextToSpeech.LANG_AVAILABLE)&&(supported!=TextToSpeech.LANG_COUNTRY_AVAILABLE)) {
Toast.makeText(MainActivity.this, "不支持当前语言!", 1).show();
}
} }
}); //朗读监听按钮
readButton.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
//朗读EditText里的内容
mTextToSpeech.speak(mEditText.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);
}
}); //保存按钮监听
saveButton.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
//将EditText里的内容保存为语音文件
int r = mTextToSpeech.synthesizeToFile(mEditText.getText().toString(), null, "/mnt/sdcard/speak.wav");
if (r==TextToSpeech.SUCCESS) {
Toast.makeText(MainActivity.this, "保存成功!", 1).show();
}
}
}); //EditText内容变化监听
mEditText.addTextChangedListener(mTextWatcher);
} @Override
protected void onDestroy() {
super.onDestroy(); if (mTextToSpeech!=null) {
mTextToSpeech.shutdown();//关闭TTS
}
} private TextWatcher mTextWatcher = new TextWatcher(){ @Override
public void afterTextChanged(Editable s) {
//如果是边写边读
if(mCheckBox.isChecked()&&(s.length()!=0)){
//获得EditText的所有内容
String t = s.toString();
mTextToSpeech.speak(t.substring(s.length()-1), TextToSpeech.QUEUE_FLUSH, null);
}
} @Override
public void beforeTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub } @Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub }
};
}

中文语音合成(TTS)可以分为两类:

1.跟系统接口吻合的

跟系统接口吻合的,都是把TTS引擎跟语音包数据分开。像系统默认的Pico TTS,SVOX,科大讯飞等就是这样的。

优点:可以通过系统提供的接口去使用TTS功能,以便于做多国语言的扩展。

缺点:设置语音朗读的角色和设置语速的快慢就得通过系统的接口去设置。

2.不与系统接口吻合的

不与系统接口吻合的,都是会把引擎和语音包打包成一个apk,然后安装完之后,通过指定的接口去调用其所提供的中文语音合成功能。

除了这两类方法之外,还有一些是直接把TTS功能做成共享库so文件,然后通过NDK去调用TTS的功能。这一种就比较好,因为不需要额外的再安装TTS引擎跟语音包,并且可以直接在应用里面设置朗读人是男声还是女声,语速等。想旧版的科大讯飞就是以这种形式出现的,比较有代表的应用是“听说”或者"vBook"。

分析下市面上有名的中文语音合成TTS各自的差异:

一、跟系统接口吻合的。

1.讯飞语音TTS1.0

这个原来讯飞是没有这个与系统接口吻合的TTS的,原来是以动态库的形式的,最近才以这种apk的形式华丽登场,合成的效果清晰流畅,不生硬,英文也读得挺好的,听起来很舒服。

2.SVOX

这个也做得很强大,N多的语言支持,中文不仅支持普通话,还支持广东话!不过有一些感觉吐字不是很清晰,听感不是很好,不过还好,因为大部分是可以听得懂的,下载地址:http://www.coolapk.com/apk-4192-com.svox.classic.langpack.cmn_chn_fem/

3.三星TTS

支持韩文,中文跟英文,每一字吐字还比较清晰,但是连起来的时候,不是很顺畅。

安装apk,然后把SMT文件夹整个拷贝到SD卡的根目录

下载地址是:http://115.com/file/e7z2iliv

二、是以独立的apk形式存在的主要在下面的两种

1.捷通华声

捷通华声也是中文语音做得比较好的,跟科大讯飞有得一拼。它的调用方法是使用java的反射机制来使用已经安装的TTS类。

捷通华声TTS语音包下载地址:http://www.yingyong.so/app/3/1917.htm

2.手说TTS

手说也是独立安装的一个TTS引擎,目前好像只支持中文语言。它接口公开,语音质量还行。本人做过手说TTS的,感觉声音很不僵硬,不自然,连贯。

它的使用方法在例程里面有很详细的介绍,手说的主页:http://shoushuo.com/index.html

对于第一种作为切合系统接口的TTS中文引擎,安装之后,需要安装语言包,然后还得简单的设置一下才可以使用,方法如下:

设置-》语音输入与输出-》文字转语音设置,把对应的TTS引擎后面的勾,勾上,再在“默认引擎”里面设置你所需要的TTS,然后就可以聆听示例了。

而对于第二种,一般都会带有一个activity可以聆听示例的。

推荐使用科大讯飞的中文TTS,跟捷通华声的音色都比较自然,应该是目前所有的中文TTS里面最好的了。

如果此文对您有帮助,微信打赏我一下吧~

android用讯飞实现TTS语音合成 实现中文版的更多相关文章

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

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

  2. android 使用讯飞人脸识别api报错:java.lang.UnsatisfiedLinkError

    1.在做一个人脸识别的项目,使用的是讯飞的api,编辑器为AS2.0,运行时报如下错误: FATAL EXCEPTION: main                  Process: com.adm ...

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

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

  4. android 开发 讯飞语音唤醒功能

    场景:进入程序后处于语音唤醒状态,当说到某个关键词的时候打开某个子界面(如:语音识别界面) 技术要点: 1. // 设置唤醒一直保持,直到调用stopListening,传入0则完成一次唤醒后,会话立 ...

  5. Android集成讯飞语音、百度语音、阿里语音识别

    项目实践:https://blog.csdn.net/Jsagacity/article/details/80094164 demo下载地址:https://fir.im/jy28 demo源码:ht ...

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

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

  7. Android Studio快速集成讯飞SDK实现文字朗读功能

    今天,我们来学习一下怎么在Android Studio快速集成讯飞SDK实现文字朗读功能,先看一下效果图: 第一步 :了解TTS语音服务 TTS的全称为Text To Speech,即“从文本到语音” ...

  8. Android自带语音播报+讯飞语音播报封装(直接用)

    一.Android自带的语音播报 1.查看是否支持中文,在测试的设备中打开‘设置’ -->找到 '语言和输入法'-->查看语音选项,是否支持中文,默认仅支持英文. 使用如下: public ...

  9. Android讯飞语音云语音听写学习

    讯飞语音云语音听写学习         这几天两个舍友都买了iPhone 6S,玩起了"Hey, Siri",我依旧对我的Nexus 5喊着"OK,Google" ...

随机推荐

  1. LaTex随笔

    最近简单接触了LaTex排版,留下一些笔记供日后参考. 1.基本格式 \documentclass{article}\title{……}\begin{document}\maketitle\secti ...

  2. \(\S1 \) Gaussian Measure and Hermite Polynomials

    Define on \(\mathbb{R}^d\) the normalized Gaussian measure\[ d \gamma(x)=\frac{1}{(2\pi)^{\frac{d}{2 ...

  3. 用脚本定时监控SQL Server主从一致性

    用脚本定时监控SQL Server主从一致性 首先说一下我们的环境 我们使用的是事务复制,复制是单向的,主服务器和从服务器都在同一个机房,当然不同机房也可以,只需要改一下IP和端口 下面的脚本在我们的 ...

  4. Xamarin跨平台移动开发解决方案

    Xamarin始创于2011年,旨在使移动开发变得难以置信地迅捷和简单.Xamarin的产品简化了针对多种平台的应用开发,包括iOS.Android.Windows Phone和Mac App.Xam ...

  5. Java中类继承、接口实现的一些细节(长期更新)

    前言 在Java中,子类继承父类,类实现接口是属于常识性的内容了,作为一个Java程序员应该也比较熟悉.不过子类继承父类,类实现接口中还是有一些小细节值得注意一下,本文就从个人工作.学习中入手,总结一 ...

  6. 设计模式之美:Visitor(访问者)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Visitor 模式结构样式代码. 实现方式(二):使用 Visitor 模式解构设计. 实现方式(三):使用 Acyclic ...

  7. 手把手教你用python打造网易公开课视频下载软件3-对抓取的数据进行处理

    上篇讲到抓取的数据保存到rawhtml变量中,然后通过编码最终保存到html变量当中,那么html变量还会有什么问题吗?当然会有了,例如可能html变量中的保存的抓取的页面源代码可能有些标签没有关闭标 ...

  8. Senparc.Weixin.MP SDK 微信公众平台开发教程(九):自定义菜单接口说明

    上一篇<Senparc.Weixin.MP SDK 微信公众平台开发教程(八):通用接口说明>介绍了如何通过通用接口获取AccessToken,有了AccessToken,我们就可以来操作 ...

  9. sql的OUTER APPLY

    今天写一个查询sql,其中涉及到一个银行卡绑定表(表名:BankBind),我要将这个表的开户行字段的值进行分割出省份.支行, 这个开户行字段存储的值如“广东省广东省分行江门市分行恩平市支行”.“招商 ...

  10. 我心中的核心组件(可插拔的AOP)~第五回 消息组件

    回到目录 之所以把发消息拿出来,完全是因为微软的orchard项目,在这个项目里,将公用的与领域无关的功能模块进行抽象,形成了一个个的组件,这些组件通过引用和注入的方式进行工作,感觉对于应用程序的扩展 ...