TTS实现方案
实现TTS有大体上有两种方案:
-
1.使用系统内置的TTS
- 优点:集成简单,免费,google语音引擎对于外语支持友好,中文也还不错
- 缺点:扩展性相对来说低一点,只用于语音合成(文字转语音),需要设备安装语音引擎并在系统设置中设置默认
-
2.集成第三方的SDK如百度语音、讯飞语音等
- 优点:随应用一起部署,功能可扩展性强(语音合成,语音听写,唤醒词)
- 缺点:集成相对来说复杂,收费,国际化问题,国内的一些语音方案目前对于外语的支持并不是很好
系统内置TTS集成
1.安装语音引擎并在设置为默认TTS
原生Android系统自带了一个Pico TTS引擎,但不支持中文;国产手机大部分中默认装了讯飞TTS引擎
下载安装后,打开无障碍
进行设置



2.代码中集成
这里提供一个工具类TtsManager.java
,直接使用或参考
public class TtsManager {
private TtsManager() {
}
private static class SingletonHoler {
public static final TtsManager INSTANCE = new TtsManager();
}
public static TtsManager getInstance() {
return SingletonHoler.INSTANCE;
}
private TextToSpeech mSpeech;
private boolean mIsInited;
private UtteranceProgressListener mSpeedListener;
public void init() {
destory();
mSpeech = new TextToSpeech(MyApp.getInstance(), status -> {
if (status == TextToSpeech.SUCCESS) {
int result = mSpeech.setLanguage(Locale.getDefault());
// mSpeech.setPitch(1.0f); // 设置音调
// mSpeech.setSpeechRate(1.5f); // 设置语速
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
//语音合成初始化失败,不支持语种
mIsInited = false;
} else {
mIsInited = true;
}
mSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
@Override
public void onStart(String utteranceId) {
//======语音合成 Start
if (mSpeedListener != null)
mSpeedListener.onStart(utteranceId);
}
@Override
public void onDone(String utteranceId) {
//======语音合成 Done
if (mSpeedListener != null)
mSpeedListener.onDone(utteranceId);
}
@Override
public void onError(String utteranceId) {
//======语音合成 Error
if (mSpeedListener != null)
mSpeedListener.onError(utteranceId);
}
});
}
});
}
public void setSpeechListener(UtteranceProgressListener listener) {
this.mSpeedListener = listener;
}
public boolean speakText(String text) {
if (!mIsInited) {
//语音合成失败,未初始化成功
init();
return false;
}
if (mSpeech != null) {
int result = mSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, "");
return result == TextToSpeech.SUCCESS;
}
return false;
}
public void stop() {
if (mSpeech != null && mSpeech.isSpeaking()) {
mSpeech.stop();
}
}
public boolean isSpeaking() {
if (mSpeech == null)
return false;
return mSpeech.isSpeaking();
}
public void destory() {
if (mSpeech != null) {
mSpeech.stop();
mSpeech.shutdown();
}
}
}
使用
//在应用启动时初始化一次
TtsManager.getInstance().init();
//在需要使用的地方调用
TtsManager.getInstance().speakText("需要合成的内容");
第三方SDK集成
具体集成步骤请看其官网集成文档
网友评论