Android 1.6 加入了文字合成语音的功能,但是 Google 提供的语言库不支持中文。本篇文章总结了几个支持中文的语言库。
在介绍其他语言库之前,先介绍一下 Android 的文字合成语言的 API。因为即使使用其他的语言库,想要完成文字合成语言依然要使用 Android 的 API。以下代码取自 Android 官方 ApiDemos 中的 TextToSpeechActivity。
private void initializeEngine() {
mTts = new TextToSpeech(this, mInitListener);
}
通过 TextToSpeech(Context context, TextToSpeech.OnInitListener listener)
构造函数获取 TextToSpeech 实例。因此要实现 TextToSpeech.OnInitListener 接口,获取实例并作为参数传递给上述构造函数。
private final TextToSpeech.OnInitListener mInitListener = new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
// status can be either TextToSpeech.SUCCESS or TextToSpeech.ERROR.
if (status == TextToSpeech.SUCCESS) {
// Set preferred language to US english.
// Note that a language may not be available, and the result will indicate this.
int result = mTts.setLanguage(Locale.CHINESE);
// Try this someday for some interesting results.
// int result mTts.setLanguage(Locale.FRANCE);
if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
// Lanuage data is missing or the language is not supported.
Log.e(TAG, "Language is not available.");
} else {
// Check the documentation for other possible result codes.
// For example, the language may be available for the locale,
// but not for the specified country and variant.
// The TTS engine has been successfully initialized.
// Allow the user to press the button for the app to speak again.
mAgainButton.setEnabled(true);
}
} else {
// Initialization failed.
Log.e(TAG, "Could not initialize TextToSpeech.");
}
}
};
获取到 TextToSpeech 的实例后,调用 speak(String text, int queueMode, HashMap
函数实现文字转换语音。
mTts.speak("你好", TextToSpeech.QUEUE_FLUSH, // Drop all pending entries in the playback queue.
null);
退出时记得清除资源
@Override public void onDestroy() {
// Don't forget to shutdown!
if (mTts != null) {
mTts.stop();
mTts.shutdown();
}
super.onDestroy();
}
科大讯飞的语音合成应该是国内比较先进的吧。貌似魅族和小米的系统就集成了科大讯飞的 TTS。这里下载讯飞的 SDK。这里是讯飞的集成文档。
注意:在运行讯飞的 demo 的之前,要把 res->tts 目录下的几个 .jet 文件拷贝到 sample 的 assets->tts 目录下。否则使用离线合成的时候回出现“本地引擎错误 24001” 的提示。
手说 TTS 说明
手说TTS开发指南
要想使用手说 TTS 实现语音合成,必须先安装 shoushuoTTS.apk
讯飞和手说 TTS 实现语音合成时都是用的他们自己的 API。下面介绍两个和 Android API 结合实现语音合成的语音库。
Ekho 的使用和简单,在这里下载 Ekho 的语音库安装包安装,并在设置中把 Ekho TTs Cantonese 设置为首选引擎。然后利用 TextToSpeech 就可以实现语音合成了。
eyes-free 是在 eSpeak 基础上的一个开源的语音合成库。按照这里的说明编译此库,然后才能使用。
注意:此库里的 TextToSpeech 并不是 Android API 里的 TextToSpeech。而是 eyes-free 库封装的。另外 eyes-free 在 5.0 之上的机器里是无法使用的。测试设备:MX4。
科大讯飞在线合成免费,离线收费;但是效果是最好的,集成比较简单。所以推荐科大讯飞。其他的语音库,需要另外安装 APK,从而安装其对应的语音库数据。其中 eyes-free 和 Ekho 可以集成在应用内,不需要另外安装 APK。但是首次安装时,依然有安装语音库的过程。