繁体   English   中英

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

[英]android text to speech 0 supported languages on nexus 7

我正在开发一个小应用程序,它为用户提供了“说出”该应用程序将响应的几个命令的选项。

我已经完成了语音识别功能并注册了命令。 他们正在被认可,并且应该以所有方式播放答案。

唯一的问题是:事实并非如此。

这是我用来确定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引擎成功启动”。

这是我用来运行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种语言?
  • 我怎样才能解决这个问题?

好的,我修复了它。 我没有考虑过tts引擎需要进行自我初始化的时间,因此我在实例化它之后立即调用了“讲话”。

现在,我将其移至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");
        }

    }

};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM