簡體   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