我正在学习编写一个旨在对给定字符串执行TTS的应用程序,并尝试了从web修改的示例:
// setup TTS part 1
mTts = new TextToSpeech(Lesson2_dialog_revision_simple.this, this); // TextToSpeech.OnInitListener
speakBtn.setOnClickListener(new OnClickListener()
{
public void onClick(View v)
{
StringTokenizer loveTokens = new StringTokenizer("他們 one two是 three ",",.");
int i = 0;
loveArray = new String[loveTokens.countTokens()];
while(loveTokens.hasMoreTokens())
{
loveArray[i++] = loveTokens.nextToken();
}
speakText();
}
});
}
// setup TTS part 2
@Override
public void onUtteranceCompleted(String utteranceId)
{
Log.v(TAG, "Get completed message for the utteranceId " + utteranceId);
lastUtterance = Integer.parseInt(utteranceId);
}
// setup TTS part 3
@Override
public void onInit(int status)
{
if(status == TextToSpeech.SUCCESS)
{
int result = mTts.setLanguage(Locale.CHINESE); // <====== set speech location
if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED)
{
Toast.makeText(Lesson2_dialog_revision_simple.this, "Language is not supported", Toast.LENGTH_LONG).show();
speakBtn.setEnabled(false);
}
else
{
speakBtn.setEnabled(true);
mTts.setOnUtteranceCompletedListener(this);
}
}
}
// setup TTS part 4
private void speakText()
{
lastUtterance++;
if(lastUtterance >= loveArray.length)
{
lastUtterance = 0;
}
Log.v(TAG, "the begin utterance is " + lastUtterance);
for(int i = lastUtterance; i < loveArray.length; i++)
{
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, String.valueOf(i));
mTts.speak(loveArray[i], TextToSpeech.QUEUE_ADD, params);
}
}
如果上面第3部分中的int result = mTts.setLanguage(Locale.US);
设置为美国并且完全用英语读出“一二三”,那么一切都会好的。 (在上面的例子中,它将跳过所有的中文单词,只读出一两三个)
但是,如果我通过将语言设置为setLanguage(Locale.CHINESE)来更改字符串以读出中文,它会立即声明“不支持语言”。
我想问一下
目前的TTS还不支持中文?我甚至更喜欢粤语而不是中文。
当我通过语音输入消息时,手机可以识别广东话(广东话)。实际上还有其他一些方法来执行TTS,输出是广东话吗?
谢谢!
答案 0 :(得分:5)
1 - 当前版本的Google TTS引擎尚不支持广东话作为输出。普通话工作正常。
2 - Ekho是支持广东话的TTS引擎。
您可能想试一下我开发的与Ekho和Google TTS引擎配合使用的TTS应用:Voice Out TTS
据我所知,JAVA中没有特定区域可以区分粤语或普通话,因为广东话是一种中国方言。 JAVA中的Locale仅指文字(简体或繁体)。
例如,您可以阅读繁体中文用粤语或普通话写的字符串。
答案 1 :(得分:0)
@Pearmak:您可以查看设备支持的语言
int i = mTts.isLanguageAvailable(Locale.ENGLISH);
其中mTts
是TextToSpeech
如果您获得i >=0
的值,则您的设备支持该语言,否则不支持。
您也可以传递语言区域设置字符串。
int i = mTts.isLanguageAvailable(new Locale("zh_CN")); //for chinese simplified
答案 2 :(得分:0)
悦,一个用于离线嵌入式系统的粤语,普通话的中文短语(TTS)合成引擎。悦极小,离线,独立,PCM音频输出无需服务器或网络连接。它具有高合成语音的自然性,适用于混合文本输入,粤语和普通话语音合成,用于相同的文本输入,具有耶鲁,Jyutping和拼音罗马化。引擎可以继续产生和播放长文本的语音,文本的长度没有限制。它内置智能检测器,可以处理任何繁体中文,简体中文,英文,数字和标点,符号混合文本输入。 Yue是用ANSI C编写的,不依赖于第三方库,在ARM,AVR嵌入式系统上运行,如手表,玩具,机器人和iPhone,Android,...移动平台,当然还有普通台式机,电子书,新闻纸阅读器,讲故事者。 Yue可以加载到内存中并嵌入到其他程序中,因为它非常小巧,非常适合嵌入式系统,也适用于桌面操作系统。引擎可以绑定大量编程语言。
答案 3 :(得分:0)
答案 4 :(得分:0)
某些手机有可以与TTS一起使用的广东话语区。
尝试
new Locale("yue", "HK"); //yue for 粤语
答案 5 :(得分:-1)
将系统语言设置为粤语后,即可使用setLanguage(Locale.getDefault())
。