我有一些代码:
tts.speak(Integer.toString(score), TextToSpeech.QUEUE_ADD, null);
其中score
是介于 0 和 100 之间的int
。偶尔,但不经常,我会听到分别准备好的数字,即"八六"而不是"八十六"。还有其他人经历过吗?除了一个巨大的开关声明之外,有什么想法吗?
String to_read = "zero";
switch (score) {
case 1: to_read = "one"; break;
case 2: to_read = "two"; break;
case 3: to_read = "three"; break;
case 4: to_read = "four"; break;
case 5: to_read = "five"; break;
...
}
tts.speak(to_read, TextToSpeech.QUEUE_ADD, null);
再三考虑,一个巨大的 switch 语句不会很好地工作,除非我们要在 String 中添加一百个新字符串.xml并将它们全部翻译......
由于您使用的是QUEUE_ADD,并且假设您正在快速将随机分数添加到队列中,也许您实际听到的是:
- 连续读取两个分数,实际上是个位数的分数 分数
- 的尾随数字(例如,二十八分中的 8 分)在下一个分数之前立即读取,恰好是个位数。 "二八六"是所说的,但你的大脑会抓住并记住"八六"。
除了这些可能性之外,基本事实是,对于任何给定 TTS 引擎如何处理字符串,您不负责任何给定 TTS 引擎的内部行为。
用户可以安装许多/任何引擎(以及这些引擎的子版本)和/或语言之一...所有这些都具有潜在的不同行为,因此,如果您尝试补偿您正在测试的引擎,它只会打开一罐蠕虫并在其余引擎上导致不可预测/不需要的结果。