【问题标题】:Android Text To Speech And NumbersAndroid 文字转语音和数字
【发布时间】:2012-06-28 05:28:08
【问题描述】:

我正在使用 Android 文本到语音引擎来阅读一些文本并且它正在工作。但我的文本包含数字,我希望这些数字被逐位读取。

我在文档中找不到任何内容,但我仍然希望有人知道我该怎么做。

【问题讨论】:

    标签: android text-to-speech


    【解决方案1】:

    API 不允许您指定应如何读取文本,因此您的代码必须修改文本输入,以便读取各个数字。

    我建议在每个数字之间添加一个空格。这应该会导致TextToSpeech 读取各个数字。

    如果您需要一些代码来帮助您检测数字,请使用:

    private boolean isNumber(String word)
    {
        boolean isNumber = false;
        try
        {
            Integer.parseInt(word);
            isNumber = true;
        } catch (NumberFormatException e)
        {
            isNumber = false;
        }
        return isNumber;
    }
    

    【讨论】:

    • 是的,空格 :) 谢谢...这很简单但很真实,我会尝试。
    • 警告:从 Android 4.4 开始,如果您将“1 2 3 4 5”提交给文本转语音引擎,则不会发生任何事情!沉默的!解决方法:使用下划线:“1_2_3_4_5”...
    • 有谁知道 almisoft 指出的 4.4 的问题是否已经或将要解决。我还实施了“下划线解决方法”。不过,一位用户报告说,下划线实际上是在 4.4.2 下说的:“一个下划线两个下划线......”这显然不是我想要的 :-)
    • 我已经确认,在 Android 5.0 和 Google TTS Engine 3.8.14 中,如果您使用“_”,则会说出下划线。但是,插入空格或“-”效果很好。
    • 那么罗马数字呢?例如。我的文字中有:查理四世国王。并且 IV 被读作字母,而不是数字 4。这有什么解决方案吗?
    【解决方案2】:

    接受的答案有一个小缺陷。如果数字有 '0' 作为其数字之一,它将被读作字母 'o' 而不是 Zero 。我会建议以下解决方案。

     String number = "1230";
    
     for(int i = 0 ; i < number.size(); i++) {
    
      /* refer Speech API , Don't use QUEUE_FLUSH as it results in flushing      
         some characters in this case */
    
       engine.speak(Character.toString(number.charAt(i)),QUEUE_ADD,null);
    
      }
    

    【讨论】:

      【解决方案3】:
      /* refer Speech API , Don't use QUEUE_FLUSH as it results in flushing      
      some characters in this case */
      for(int i = 0 ; i < number.size(); i++) {
        engine.speak(Character.toString(number.charAt(i)),QUEUE_ADD,null); 
      }
      

      【讨论】:

        猜你喜欢
        • 2017-04-14
        • 1970-01-01
        • 2011-03-04
        • 2012-04-06
        • 2015-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多