首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >android文本到语音0支持附件7上的语言

android文本到语音0支持附件7上的语言
EN

Stack Overflow用户
提问于 2015-04-10 08:03:21
回答 1查看 193关注 0票数 0

我正在开发一个小应用程序,让用户可以选择“说”几个命令,然后应用程序就会做出响应。

我已经把语音识别和命令注册好了。他们正在被认可,并且无论如何,答案都应该被发挥出来。

唯一的问题是:它没有。

下面是我用来确定google的tts引擎支持哪些语言的代码(我正在为较旧版本的android开发,因此不幸的是"tts.getAvailableLangues()“不在其中):

代码语言:javascript
复制
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”。

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

代码语言:javascript
复制
int id = speaker.setLanguage(Locale.ENGLISH);
checkId(id);

它将返回一个“不支持的语言”错误。这很奇怪,因为我只想使用一种默认的语言:英语(英国,美国,不重要,它“不受支持”)。

所以,很明显,当我试图

代码语言:javascript
复制
speaker.getLanguage();

它返回空..。

更奇怪的是,InitListener总是报告一个"TextToSpeech.SUCCESS“

代码语言:javascript
复制
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的实际代码:

代码语言:javascript
复制
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种语言?
  • 我怎么才能解决这个问题?
EN

回答 1

Stack Overflow用户

发布于 2015-04-10 10:49:40

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

现在,我将它移到OnInit侦听器和presto:它可以工作!

这是我的OnInitListener现在:

代码语言:javascript
复制
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");
        }

    }

};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29556293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档