适用于 TextToSpeech Android 的自定义语音



是否可以像女婴语音一样为TTS设置自定义语音?

我已经尝试过像下面这样获得语音((,

if (Build.VERSION.SDK_INT >= 21) {
Set<Locale> localeSet = tts.getAvailableLanguages();
for (Locale locale : localeSet) {
Log.v(TAG, locale.getDisplayName() + " - " + locale.getDisplayLanguage() + " - " + locale.getCountry());
if (locale.getDisplayLanguage().equals("Tamil")) {
result = tts.setLanguage(locale);
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS", "This Language is not supported");
} else {
tts.setSpeechRate(0.05f);
//tts.setPitch(5.0f);
fabSpeak.setEnabled(true);
speakOut();
}
}
}
Set<Voice> voices = tts.getVoices();
for (Voice voice : voices) {
Log.v(TAG, voice.getName());
if (voice.getName().equals("hi-in-x-cfn#female_2-local")) {
tts.setVoice(voice);
}
}
}

但是这个声音取代了语言,所以这个代码不再读泰米尔语了。如果我评论setVoice()那么它会用默认的男性声音阅读泰米尔语。

我希望这个给定的文本由这个女声朗读。可能吗?

出现这种情况的原因是,默认情况下,每个语音都有一个区域设置值,该值覆盖您在函数上设置的区域设置值。我认为您可以通过创建一个新的 Voice 实例来覆盖它,该实例具有与您想要的相同集,方法是覆盖 for 循环中的 Locale 属性,如下所示:

for (Voice voice: voices) {
Log.v(TAG, voice.getName());
if (voice.getName().equals("hi-in-x-cfn#female_2-local")) {
tts.setVoice(new Voice(voice.getName(),
locale, // YOUR LOCALE GOES HERE
voice.getQuality(),
voice.getLatency(),
voice.isNetworkConnectionRequired(),
voice.getFeatures()));
}
}

相关内容

  • 没有找到相关文章

最新更新