是否有可能为TTS设置自定义语音,如女婴的声音?
我尝试过getVoices(),如下所示,
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()
发表评论,那么就会用默认的男声来读泰米尔语。
我希望这个女性的声音可以阅读这个给定的文字。有可能吗?
答案 0 :(得分:1)
出现这种情况是因为默认情况下,每个Voice都有一个Locale值,该值会覆盖您在函数上设置的Locale值。我认为您可以通过在for循环中覆盖Locale属性来创建一个与所需设置相同的新Voice实例来覆盖它:
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()));
}
}