当使用Android TextToSpeech讲有数字的消息时,Android会将0(零)称为“哦”而不是“零”。所有其他数字都按预期说出。
我尝试了几种不同的发言方式,所有这些都导致了这个问题。首先,我以正常方式尝试:
mTTS = new TextToSpeech(mContext, this);
String text= "this is a test";
String digits= "0 0 0 1";
String finalString= text+digits;
// speak something using google TTS
Bundle lParams = new Bundle();
lParams.putInt(TextToSpeech.Engine.KEY_PARAM_STREAM, Constants.TTS_AUDIO_STREAM);
mTTS.speak(finalString, TextToSpeech.QUEUE_FLUSH, lParams, "");
我还尝试digits
为“0001”(无空格)。最后两人都说“这是一个考验哦哦哦哦”。接下来,我尝试使用TtsSpans:
mTTS = new TextToSpeech(mContext, this);
String text= "this is a test";
String digits= "0 0 0 1";
String finalString= text+digits;
Spannable lSpannedMsg = new SpannableString( finalString );
TtsSpan lSpan = new TtsSpan.DigitsBuilder(digits).build();
TtsSpan lSpanText = new TtsSpan.TextBuilder(text).build();
lSpannedMsg.setSpan(lSpan, finalString.indexOf(digits), finalString.indexOf(digits) + digits.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
lSpannedMsg.setSpan(lSpanText, finalString.indexOf(text), finalString.indexOf(text) + text.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
// speak something using google TTS
Bundle lParams = new Bundle();
lParams.putInt(TextToSpeech.Engine.KEY_PARAM_STREAM, Constants.TTS_AUDIO_STREAM);
mTTS.speak(lSpannedMsg, TextToSpeech.QUEUE_FLUSH, lParams, "");
即使使用跨越的弦,引擎仍然说“这是一个测试哦哦哦哦”。有没有办法迫使谷歌说0为“零”?我想避免调查发送的字符串并用“零”替换0,因为这会导致其他语言出现问题。