Android中使用TextToSpeech的方法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android中使⽤TextToSpeech的⽅法
前⾔
在⼀年前,和朋友⼀起码了⼀个英语APP,仿照某APP实现了单词的功能,最开始就是借助的TextToSpeech,后⾯感觉声⾳不够好听,于是使⽤了第三⽅
APP初稿如图:
实现
1.初始化语⾳。
这是⼀个异步操作。
初始化完成后调⽤oninitListener(第⼆个参数)。
TextToSpeech mTts = new TextToSpeech(this, this);
2.实现TextToSpeech.OnInitListener
注意:语⾔可能不可⽤。
// 实现TextToSpeech.OnInitListener.
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
//设置⾸选语⾔为中⽂,注意,语⾔可能是不可⽤的,结果将指⽰此
int result = mTts.setLanguage(Locale.CHINA);
if (result == NG_MISSING_DATA ||
result == NG_NOT_SUPPORTED) {
//语⾔数据丢失或不⽀持该语⾔。
Log.e(TAG, "语⾔数据丢失或不⽀持该语⾔");
} else {
//检查⽂档中其他可能的结果代码。
// 例如,语⾔可能对区域设置可⽤,但对指定的国家和变体不可⽤
// TTS引擎已成功初始化。
// 允许⽤户按下按钮让应⽤程序再次发⾔。
mAgainButton.setEnabled(true);
}
} else {
// 初始化失败
Log.e(TAG, "初始化失败");
}
}
3.写⼀个朗读⽅法,在需要的时候触发(如:点击事件)
TextToSpeech的speak⽅法有两个重载。
执⾏朗读的⽅法
speak(CharSequence text,int queueMode,Bundle params,String utteranceId);
第⼆个参数queueMode⽤于指定发⾳队列模式,两种模式选择。
(1)TextToSpeech.QUEUE_FLUSH:该模式下在有新任务时候会清除当前语⾳任务,执⾏新的语⾳任务
(2)TextToSpeech.QUEUE_ADD:该模式下会把新的语⾳任务放到语⾳任务之后,等前⾯的语⾳任务执⾏完了才会执⾏新的语⾳任务。
将朗读的的声⾳记录成⾳频⽂件
synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);
private void sayHello() {
String hello ="Hellow";
//TextToSpeech的speak⽅法有两个重载。
// 执⾏朗读的⽅法
//speak(CharSequence text,int queueMode,Bundle params,String utteranceId);
// 将朗读的的声⾳记录成⾳频⽂件
//synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);
//第⼆个参数queueMode⽤于指定发⾳队列模式,两种模式选择
//(1)TextToSpeech.QUEUE_FLUSH:该模式下在有新任务时候会清除当前语⾳任务,执⾏新的语⾳任务
//(2)TextToSpeech.QUEUE_ADD:该模式下会把新的语⾳任务放到语⾳任务之后,
//等前⾯的语⾳任务执⾏完了才会执⾏新的语⾳任务
mTts.speak(hello,
TextToSpeech.QUEUE_FLUSH,
null);
}
4.记得利⽤Activity的⽣命周期中将其关闭
@Override
public void onDestroy() {
// ⽣命周期中结束
if (mTts != null) {
mTts.stop();
mTts.shutdown();
}
super.onDestroy();
}
源码
SpeechActivity.java
public class SpeechActivity extends Activity implements TextToSpeech.OnInitListener {
private static final String TAG = "SpeechDemo";
private TextToSpeech mTts;
private Button mButton;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(yout.text_to_speech);
//初始化语⾳。
这是⼀个异步操作。
初始化完成后调⽤oninitListener(第⼆个参数)。
mTts = new TextToSpeech(this, this);
mButton = (Button) findViewById(R.id.again_button);
//触发
mButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
sayHello();
}
});
}
@Override
public void onDestroy() {
// ⽣命周期中结束
if (mTts != null) {
mTts.stop();
mTts.shutdown();
}
super.onDestroy();
}
// 实现TextToSpeech.OnInitListener.
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
//设置⾸选语⾔为中⽂,注意,语⾔可能是不可⽤的,结果将指⽰此
int result = mTts.setLanguage(Locale.CHINA);
if (result == NG_MISSING_DATA ||
result == NG_NOT_SUPPORTED) {
//语⾔数据丢失或不⽀持该语⾔。
Log.e(TAG, "语⾔数据丢失或不⽀持该语⾔");
} else {
//检查⽂档中其他可能的结果代码。
// 例如,语⾔可能对区域设置可⽤,但对指定的国家和变体不可⽤
// TTS引擎已成功初始化。
// 允许⽤户按下按钮让应⽤程序再次发⾔。
mAgainButton.setEnabled(true);
}
} else {
// 初始化失败
Log.e(TAG, "初始化失败");
}
}
private void sayHello() {
String hello ="计蒙不吃鱼";
//TextToSpeech的speak⽅法有两个重载。
// 执⾏朗读的⽅法
//speak(CharSequence text,int queueMode,Bundle params,String utteranceId);
// 将朗读的的声⾳记录成⾳频⽂件
//synthesizeToFile(CharSequence text,Bundle params,File file,String utteranceId);
//第⼆个参数queueMode⽤于指定发⾳队列模式,两种模式选择
//(1)TextToSpeech.QUEUE_FLUSH:该模式下在有新任务时候会清除当前语⾳任务,执⾏新的语⾳任务 //(2)TextToSpeech.QUEUE_ADD:该模式下会把新的语⾳任务放到语⾳任务之后,
//等前⾯的语⾳任务执⾏完了才会执⾏新的语⾳任务
mTts.speak(hello,
TextToSpeech.QUEUE_FLUSH,
null);
}
}
text_to_speech.xml
<LinearLayout xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<Button android:id="@+id/again_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:enabled="false" />
</LinearLayout>
到此这篇关于Android中TextToSpeech的使⽤的⽂章就介绍到这了,更多相关adroid TextToSpeech使⽤内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。