在nexus 7上支持android文本到语音0支持的语言

时间:2015-04-10 08:03:22

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

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

我已经完成语音识别工作并注册了命令。他们被认可并且无论如何都应该得到答案。

唯一的问题是:它没有。

这里是我用来确定谷歌引擎支持哪种语言的代码(我正在开发旧版本的android以及#34; tts.getAvailableLangues(" 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());

最后一个日志的输出始终为:&#34;可用语言:0&#34;

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

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

它会以#34;语言不再支持&#34;错误。 这很奇怪,因为我只是尝试使用其中一种默认语言:英语(英国,美国,不重要,不支持&#34;不支持&#34;)。

所以,显然,当我尝试运行时

speaker.getLanguage();

它返回null ...

甚至更奇怪的是,InitListener总是报告&#34; TextToSpeech.SUCCESS&#34;

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

    }

};

因此,日志始终显示:&#34;引擎成功启动&#34;。

这是我用来运行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已安装
  • 安装了语音数据(英语和美国英语的多种语音)
  • 如果我按下&#34;听一个例子&#34;它工作的设置中的按钮!

所以,从我坐在那里,我没有理由不去工作。 我的问题是:

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

1 个答案:

答案 0 :(得分:0)

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

我现在把它移到了OnInit监听器和presto:它有效!

现在是我的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");
        }

    }

};