【问题标题】:android text to speech 0 supported languages on nexus 7android text to speech 0 在nexus 7上支持的语言
【发布时间】:2015-06-15 20:51:42
【问题描述】:

我正在开发一个小应用程序,它让用户可以选择“说出”应用程序将响应的几个命令。

我已经让语音识别正常工作并注册了命令。他们正在被认出,并且无论如何都应该播放答案。

唯一的问题是:它没有。

这是我用来确定 google 的 tts 引擎支持哪些语言的代码(我正在为旧版本的 android 开发,所以不幸的是“tts.getAvailableLangues()”不在那里):

Locale[] locales = Locale.getAvailableLocales();
    List<Locale> localeList = new ArrayList<Locale>();
    for (Locale locale : locales) {
        int res = speaker.isLanguageAvailable(locale);
        if (res == TextToSpeech.LANG_COUNTRY_AVAILABLE) {
            Log.d(tag, "language: " + locale);
            localeList.add(locale);
        }
    }
    Log.d(tag, "languages available: " + localeList.size());

最后一个日志的输出总是:“可用的语言:0”

事实上,如果我运行这段代码:

int id = speaker.setLanguage(Locale.ENGLISH);
checkId(id);

它会返回“不支持的语言”错误。 这很奇怪,因为我只尝试使用其中一种默认语言:英语(英国、美国,没关系,它“不支持”)。

所以,很明显,当我尝试运行时

speaker.getLanguage();

它返回 null...

更奇怪的是,InitListener 总是报告“TextToSpeech.SUCCESS”

private OnInitListener listener = new OnInitListener() {

    @Override
    public void onInit(int status) {
        if (status == TextToSpeech.SUCCESS) {
            Log.d(TAG, "tts engine started succesfully");
        } else if (status == TextToSpeech.ERROR) {
            Log.d(TAG, "seems like an error occured :c");
        }

    }

};

所以日志总是显示:“tts engine startedsuccesfully”。

这是我用来运行 tts 的实际代码:

public void speak(String text, Context context, OnInitListener listener) {
    String tag = "dashboardactivity";
    Log.d(tag, "speaking started in dummy module");
    TextToSpeech speaker = new TextToSpeech(context, listener);

    // int id = speaker.setLanguage(Locale.UK);
    int id = speaker.setLanguage(Locale.ENGLISH);

    speaker.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}

该代码似乎没有任何问题,还是我遗漏了什么?

这是我尝试/检查/安装的东西的列表:

  • tts 已安装
  • 语音数据已安装(英国和美国英语的多种语音)
  • 如果我在设置中按下“收听示例”按钮就可以了!

所以,从我现在的位置来看,它没有理由不工作。 那么我的问题是:

  • 我错过了什么吗? (特殊权限?一些数据?)
  • 为什么我的代码说 tts 引擎支持 400 种“语言环境”中的 0 种语言?
  • 我该如何解决这个问题?

【问题讨论】:

    标签: android text-to-speech nexus-7 google-text-to-speech


    【解决方案1】:

    好的,我修好了。我没有考虑 tts 引擎需要初始化自身的时间,所以我只是在实例化它之后立即调用了“speak”。

    我现在将其移至 OnInit 侦听器并立即执行:它有效!

    现在这是我的 OnInitListener:

    private OnInitListener listener = new OnInitListener() {
    
        @Override
        public void onInit(int status) {
            if (status == TextToSpeech.SUCCESS) {
                Log.d(TAG, "tts engine started succesfully");
                Log.d(TAG, "setting language to default");
                int id = tts.setLanguage(Locale.getDefault());
                checkId(id);
                tts.speak(mMessageToSpeak, TextToSpeech.QUEUE_FLUSH, null);
            } else if (status == TextToSpeech.ERROR) {
                Log.d(TAG, "seems like an error occured :c");
            }
    
        }
    
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 2020-01-21
      • 2018-10-12
      相关资源
      最近更新 更多