赵工的个人空间


专业技术部分转网页计算转业余爱好部分


 手持终端

首页 > 专业技术 > 手持终端 > Android的文本朗读TTS
Android的文本朗读TTS

Android系统提供了将用户输入的文本内容朗读出来的功能。Android系统的文本语音朗读通过TextToSpeech来实现,目前提供了英语、法语、德语、意大利语、西班牙语的文本语音转换功能,英语还可以选择美式发音或英式发音,暂时不支持中文朗读功能。
从Android1.6版本开始就提供了TextToSpeech类来实现文字到语音的转换功能。Android使用了Pico引擎,在后台负责分析输入的文本,把文本分成能够识别的各个片段,再把合成的各个语音片段以听起来比较自然的方式连接在一起。而TextToSpeech类则提供了用户调用的接口,而无需考虑Pico引擎的细节,简化了开发过程。
1)TextToSpeech方法:构造方法
该方法用于构造一个TextToSpeech类的对象,并且初始化TextToSpeech引擎,这是使用TextToSpeech类进行文本朗读的最基本方法。在使用时需要设置OnInitListen监听器,当TextToSpeech引擎初始化时,将重载并执行onInit方法。语法格式:
public TextToSpeech(Context context,TextToSpeech.OnInitListener listener)
其中,参数context为上下文,一般由getApplicationContext()方法来获取;listener为OnInitListener监听器,需要重载其中的onInit方法。示例:
TextToSpeech tts=new TextToSpeech(getApplicationContext(),
new TextToSpeech.OnInitListener(){
@Override
public void onInit(int status){
//......
}
});
2)shutdown方法:释放引擎
该方法用于释放一个TextToSpeech类对象所使用的资源。当用户不再使用TextToSpeech文本朗读引擎时,需要调用该方法来释放资源。一般来说,往往在一个Activity的onDestroy方法中调用,这样可以当不再使用该Activity时及时释放资源。语法格式:
public void shutdown()
3)speak方法:朗读文本
该方法用于朗读一个指定的文本,通过指定需要朗读的文本内容以及朗读模式来实现。通过该方法可以在现在朗读队列中添加一条需要朗读的内容,也可以直接开始朗读新内容。speak方法是朗读文本最常用、最基本的方法。语法格式:
public int speak(String text,int queueMode,HashMap<String,String> params)
其中,参数text为需要朗读的文本内容,String格式;queueMode为朗读的模式,可以设置两种方法,QUEUE_FLUSH方式表示清除当前队列中的内容而直接播放新的内容,QUEUE_ADD方式表示将新的内容添加到队列尾部进行播放;params为使用的参数列表,一般以键值对的形式给出,如果没有参数则设置为null。
4)stop方法:停止播放
该方法用于停止朗读文本。调用该方法后,将中断当前的朗读过程,并且抛弃朗读队列中其他的片段。该方法调用成功则返回SUCCESS,否则将返回ERROR。语法格式:
public int stop()
示例:
public class firstActivity extends Activity{
private TextToSpeech tts;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
Button btn2=(Button)findViewById(R.id.button2);
tts=new TextToSpeech(getApplicationContext(),new TextToSpeech.OnInitListener(){
@Override
public void onInit(int status){
if(status==TextToSpeech.SUCCESS){
Toast.makeText(getApplicationContext(),"文本朗读引擎初始化成功!",
Toast.LENGTH_LONG).show();
}else{}
}
});
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
String str="Hello Android!";
Toast.makeText(getApplicationContext(),"朗读内容为:"+str,
Toast.LENGTH_LONG).show();
tts.speak(str,TextToSpeech.QUEUE_FLUSH,null);
}
});
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
tts.stop();
Toast.makeText(getApplicationContext(),"停止朗读",
Toast.LENGTH_LONG).show();
}
});
}
@Override
protected void onDestroy(){
super.onDestroy();
tts.shutdown();
}
}
5)isSpeaking方法:是否正在朗读
该方法用于获取TextToSpeech文本朗读引擎是否正在朗读。如果正在朗读则返回true,否则返回false。该方法往往用于检测TextToSpeech引擎是否处于忙的状态。语法格式:
public boolean isSpeaking()
6)synthesizeToFile方法:保存朗读文件
该方法用于将TextToSpeech文本朗读引擎的合成语言保存为音频文件的形式,这样就可以使用其他的音乐播放器软件来重复播放了。由于TextToSpeech文本朗读引擎比较占用系统资源,使用该方法将朗读文本保存为音频文件,可以节省系统资源,使系统运行速度更快。另一方面,也可以使用该方法将保存的音频文件分享给没有文本朗读功能的用户。语法格式:
public int synthesizeToFile(String text,HashMap<String,String> params,String filename)
其中,参数text为需要朗读和语音合成的文本,String格式;params为键值对形式的HashMap类型变量,可以设置语音片段的Id等,如果不使用则可以设置为null;filename为保存到系统中的完整文件名,包括路径信息。示例:
btn2.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
int ok;
ok=tts.synthesizeToFile(editText.getText().toString(),null,
"/sdcard/speak.wav");
if(ok==TextToSpeech.SUCCESS){
Toast.makeText(getApplicationContext(),"朗读文件保存成功!",
Toast.LENGTH_LONG).show();
}else{
Toast.makeText(getApplicationContext(),"朗读文件保存失败!",
Toast.LENGTH_LONG).show();
}
}
});
7)setLanguage方法:设置朗读语音
该方法用于设置TextToSpeech文本朗读引擎的语言,TextToSpeech引擎将会按照设置的语言来朗读。Android系统支持多国语言,可以通过Locale国家及语言代码来设置,但并不是所有的语言都实际支持,目前只支持德语、法语、英语、西班牙语和意大利语。语法格式:
public int setLanguage(Locale loc)
其中,参数loc表示系统支持的国家和语言代码,其取值见表:


国家/语言代码

含义

国家/语言代码

含义

Locale.CANADA

加拿大英语

Locale.JAPAN

日本

Locale.CANADA_FRENCH

加拿大法语

Locale.JAPANESE

日语

Locale.CHINA

中国

Locale.KOREA

韩国

Locale.CHINESE

中文

Locale.KOREAN

韩语

Locale.ENGLISH

英国

Locale.PRC

中华人民共和国

Locale.FRANCE

法国

Locale.ROOT

Locale.FRENCH

法语

Locale.SIMPLIFIED_CHINESE

简体中文

Locale.GERMAN

德语

Locale.TAIWAN

中国台湾

Locale.GERMANY

德国

Locale.TRADITIONAL_CHINESE

繁体中文

Locale.ITALIAN

意大利语

Locale.UK

英式英语

Locale.ITALY

意大利

Locale.US

美式英语

示例:
tts.setLanguage(Locale.US);
8)getLanguage方法:获取语言
该方法用于获取当前TextToSpeech文本朗读引擎所使用的语言,返回的结果为Locale类型数据,包含了语言及国家代码。如果TextToSpeech语音朗读引擎初始化失败,该方法将返回null。语法格式:
public Locale getLanguage()
9)isLanguageAvailable方法:语言是否可用
该方法用于查询指定的语言是否可以被TextToSpeech文本朗读引擎使用,通过指定Locale类型的语言代码来实现。虽然Android系统提供了很多种语言的代码,但目前只实际支持5种语言代码。在使用某种语言进行朗读之前,一般需要首先使用该方法来测试语言是否支持。语法格式:
public int isLanguageAvailable(Locale loc)
其中,参数loc为指定的语言和国家代码。该方法的返回值表示了指定语言及国家代码的支持状态,可以有如下几种结果:
·LANG_AVAILABLE:语言可用
·LANG_COUNTRY_AVAILABLE:语言及国家可用
·LANG_COUNTRY_VAR_AVAILABLE:语言、国家及相应的变种都可用
·LANG_MISSING_DATA:缺失语言数据
·LANG_NOT_SUPPORTED:语言不被支持
示例:
int ava=tts.isLanguageAvailable(Locale.SIMPLIFIED_CHINESE)
10)setSpeechRate方法:设置语速
该方法用于设置TextToSpeech文本朗读引擎进行语音合成时的语速。应用程序可用使用该方法来调整朗读的速度,以实现不同的朗读效果。语法格式:
public int setSpeechRate(float speechRate)
其中,参数speechRate为正常朗读语速的倍数,1表示正常语速,比1小的数值表示放慢的语速,比1大的数值表示加快的语速。
11)setOnUtteranceCompletedListener方法:设置播放完成
该方法用于为TextToSpeech文本朗读引擎设置播放完成监听器,在使用时需要重载onUtteranceCompleted方法。TextToSpeech文本朗读引擎进行语音合成时,每一个语音片段称为utterance,当语音片段播放结束时触发onUtteranceCompleted方法,可以在此执行自定义的动作。语法格式:
public int setOnUtteranceCompletedListener(TextToSpeech.OnUtteranceCompletedListener listener)
其中,参数listener表示播放完成监听器。示例:
final HashMap<String,String> params=new HashMap<String,String>();
tts.setLanguage(Locale.UK);
int tt=tts.setOnUtteranceCompletedListener(
new TextToSpeech.OnUtteranceCompletedListener(){
@Override
public void onUtteranceCompleted(String utteranceId){
if(utteranceId=="1"){
Toast.makeText(getApplicationContext(),"第一段文本朗读结束!",
Toast.LENGTH_LONG).show();
}else{}
}
});
12)addSpeech方法:关联音频文件
该方法用于为一个文本关联已有的音频文件。这样当朗读文本中遇到关联的文本后将不再进行语音合成,而是直接调用关联的音频文件播放。语法格式有两种:
public int addSpeech(String text,String packagename,int resourceId)
public int addSpeech(String text,String filename)
其中,参数text为需要关联的文本;packagename为程序包名;resourceId为音频文件的资源Id;filename为音频文件的完整路径名。示例:
tts.addSpeech("化蝶","sdcard/die.mp3");
13)setPitch方法:设置音调
该方法用于设置TextToSpeech文本朗读引擎进行语音合成时的音调。应用程序可以使用该方法来调整朗读的音调,以实现不同的朗读效果。语法格式:
public int setPitch(float pitch)
其中,参数pitch为正常朗读音调的倍数,1表示正常音调,比1小的数值表示降低音调,比1大的数值表示提高音调。示例:
tts.setPitch(1.0f);
14)addEarcon方法:关联事件音频文件
该方法用于为一个文本关联已有的音频文件,这个文本内容代表了一个通知或者事件。该方法往往与playEarcon方法一起使用,addEarcon方法仅是设置了关联音频文件,playEarcon方法才是真正的朗读播放方法。语法格式有两种形式:
public int addEarcon(String earcon,String filename)
public int addEarcon(String earcon,String packagename,int resourceId)
其中,参数earcon为需要关联通知或事件的文本;filename为音频文件的完整路径名;packagename为程序包名;resourceId为音频文件的资源Id。
15)playEarcon方法:播放关联文件
该方法用于播放通知或事件相关联的音频文件,通过指定通知或事件对应的字符串以及播放模式来实现。该方法往往与addEarcon方法一起使用,addEarcon方法设置了关联音频文件,playEarcon方法进行朗读播放。语法格式:
public int playEarcon(String earcon,int queueMode,HashMap<String,String> params)
其中,参数earcon为通知或事件对应的文本内容,String格式;queueMode为朗读的模式,可以设置两种方法,QUEUE_FLUSH方式表示清除当前队列中的内容而直接播放新的内容,QUEUE_ADD方式表示将新内容添加到队列尾部进行播放;params为使用的参数列表,一般以键值对的形式给出,可以取值类型为LEY_PARAM_STREAM或KEY_PARAM _UTTERANCE_ID,如果没有参数则设置为null。示例:
public class firstActivity extends Activity{
private TextToSpeech tts;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn1=(Button)findViewById(R.id.button1);
final EditText editText=(EditText)findViewById(R.id.editText1);
editText.setText("Open Windows.");
tts=new TextToSpeech(getApplicationContext(),new TextToSpeech.OnInitListener(){
@Override
public void onInit(int status){
if(status==TextToSpeech.SUCCESS){
Toast.makeText(getApplicationContext(),"文本朗读引擎初始化成功!",
Toast.LENGTH_LONG).show();
}
}
});
btn1.setOnClickListenter(new View.OnClickListener(){
@Override
public void onClick(View v){
String str;
str=editText.getText().toString();
tts.setLanguage(Locale.UK);
tts.addEarcon("win","/sdcard/win.wav");
tts.speak(str,TextToSpeech.QUEUE_ADD,null);
tts.playEarcon("win",TextToSpeech.QUEUE_ADD,null);
Toast.makeText(getApplicationContext(),"Windows system is opened!",
Toast.LENGTH_LONG).show();

}
});
}
@Override
protected void onDestroy(){
super.onDestroy();
tts.shutdown();
}
}
代码中使用的win.wav要放置在SD卡的根目录中。
16)playSilence方法:静默朗读
该方法用于使TextToSpeech文本朗读引擎进行静默朗读,通过指定播放时间和模式来实现。在播放效果上相当于播放空的音频,也就是没有声音。该方法往往结合speak方法使用,从而实现更为灵活的播放效果。语法格式:
playSilence(long durationInMs,int queueMode,HashMap<String,String> params)
其中,参数durationInMs为静默朗读的持续时间,以毫秒为单位;queueMode为朗读的模式,可以设置两种方法,QUEUE_FLUSH方式表示清除当前队列中的内容而直接播放新的内容,QUEUE_ADD方式表示将新内容添加到队列尾部进行播放;params为使用的参数列表,一般以键值对的形式给出,如果没有参数则设置为null。

Copyright@dwenzhao.cn All Rights Reserved   备案号:粤ICP备15026949号
联系邮箱:dwenzhao@163.com  QQ:1608288659