Android TextToSpeech#speaking阅读整数分别

时间:2019-03-27 11:23:03

标签: android text-to-speech

我有一些代码:

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);

再三考虑一下,除非我们将要在Strings.xml中添加一百个新字符串并将其全部翻译...,否则巨大的switch语句将无法很好地工作。

1 个答案:

答案 0 :(得分:0)

由于您使用的是QUEUE_ADD,并且假设您正在向队列中快速添加随机分数,因此您可能实际上听到的是:

  • 连续读取的两个分数实际上是个位数的分数
  • 紧接在下一个分数之前的分数的尾随数字(例如,二十八的8)被读取。说的是“二十八—六十六”,但是你的大脑锁住并记住了“八十六”。

除了这些可能性之外,基本事实是,您不对任何给定的TTS引擎在处理字符串方面的内部行为负责。

用户可能安装了许多引擎(以及这些引擎的子版本)和/或语言中的一种...行为可能都不同,因此,如果您尝试补偿要测试的引擎,它只会打开一罐蠕虫,并在其余引擎上导致无法预测/有害的结果。