随着科技的不断进步,人们对于可视化的需求越来越高。而对于导盲软件、语音播报、语音输入等应用,用户对于声音的需求甚至比对于图像的需求还要重要。但是,如何让应用说话,成为了很多开发者面临的难题。Android TTS(即Android Text-To-Speech,中文意为文本转语音)是Google Android团队针对Android平台所提供的一种自然语言合成系统,它能够将自然语言文本转变成能够被人类听懂的语音信息。
一、TTS的基本原理
Android TTS是基于系统默认的TTS Engine。使用TTS Engine需要以下步骤:
1. 引入TTS Engine:需要在配置文件AndroidManifest.xml中添加以下配置信息
2. 创建TTS Engine对象:创建TTS Engine对象需要主要构造函数.
private TextToSpeech textToSpeech;
…
textToSpeech = new TextToSpeech(this, this);
3. 设置回调函数:为了实现TTS Engine的状态监听,需要设置回调函数.
@Override
public void onInit(int status) {
if(status == TextToSpeech.SUCCESS) {
textToSpeech.setOnUtteranceProgressListener(new TTSUtteranceProgressListener());
}
}
4. 文本转语音:在完成TTS Engine的初始化工作后,就可以将文本转变成语音信息了.
@Override
public void speak(String text) {
if(textToSpeech == null) {
return;
}
String utteranceId = hashCode() + “”;
HashMap params = new HashMap();
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, utteranceId);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, utteranceId);
} else {
textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, params);
}
}
二、TTS的使用场景
Android TTS应用场景非常之广泛。其中的一个典型应用场景便是语音导航。通过将行进路线的信息和提醒内容转换成语音,可以使司机在驾车时不用看路,直接听取语音提示,使驾车更加安全。还有一种应用场景便是TTS播报内容。例如,当应用有新消息时,通过TTS播报内容,可以在用户无视觉的情况下提醒用户。
三、TTS的开发注意事项
1. 不同TTS Engine的API、回调函数都存在差异。需要注意调用对应的API。
2. 在初始化TTS Engine的时候,如果网络不可用或者资源下载失败等情况下,使用TTS Engine会出现空指针异常。因此在实现TTS Engine并使用前,应该对Android手机当前的网络状态以及下载耗时进行检测,确保能够正常使用TTS Engine。
3. 在使用TTS Engine时,会有一定的延迟,需要注意使用场景,避免出现较大的延迟。
四、TTS的完整代码示例
public class TTSService extends Service implements TextToSpeech.OnInitListener { /** * TTS Engine对象 */ private TextToSpeech mTts; @Override public void onCreate() { super.onCreate(); mTts = new TextToSpeech(this, this); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return START_STICKY_COMPATIBILITY; } @Override public void onDestroy() { if (mTts != null) { mTts.stop(); mTts.shutdown(); } super.onDestroy(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } /** * 播放语音 * @param text 文本 * @param utteranceId 语音ID */ public void playTalkText(String text, String utteranceId) { if (mTts == null) { return; } if (text.length() == 0) { return; } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null, utteranceId); } else { mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null); } } /** * TTS Engine初始化完成回调函数 * @param status 初始化状态,成功时为TextToSpeech.SUCCESS */ @Override public void onInit(int status) { if (status == TextToSpeech.SUCCESS) { mTts.setLanguage(Locale.CHINA); mTts.setSpeechRate(0.8f); } } }
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/155057.html