当使用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, "");
Run Code Online (Sandbox Code Playgroud)
我也试过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, "");
Run Code Online (Sandbox Code Playgroud)
即使使用跨越的弦,引擎仍然说"这是一个测试哦哦哦哦一个".有没有办法迫使谷歌说0为"零"?我想避免调查发送的字符串并用"零"替换0,因为这会导致其他语言出现问题.
小智 0
holder.mEmployeeId.setText("100001");
String buildNumber = holder.mEmployeeId.getText().toString();
StringBuilder builderForEmployeeNo = new StringBuilder();
for (char ch : buildNumber.toCharArray()){
builderForEmployeeNo.append(ch);
builderForEmployeeNo.append(",");
}
holder.mEmployeeId.setContentDescription(builderForEmployeeNo);
Run Code Online (Sandbox Code Playgroud)
通过使用此方法,无论您的默认区域设置如何,它都只会将 0 读作零
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |