2017-11-01 11 views
1

私はhttps://developer.xamarin.com/guides/android/platform_features/speech/を以下とlangAvailableに単一の値(デフォルト)を取得しています。 Google TTSエンジンも更新し、音声データをインストールしました。私はこのエンジンを使用する他のアプリをインストールしており、このアプリはすべての言語を持っています。 私は間違っているのですか?アンドロイドOS 6.0Android Google TTS:なぜlangAvailableが返されますかサポートされていないか-2ですか?

TextToSpeech textToSpeech = new TextToSpeech(this, this, "com.google.android.tts"); 
     var langAvailable = new List<string> { "Default" }; 
     var localesAvailable = Locale.GetAvailableLocales().ToList(); 

     foreach (var locale in localesAvailable) 
     { 
      LanguageAvailableResult res = textToSpeech.IsLanguageAvailable(locale); 
      switch (res) 
      { 
       case LanguageAvailableResult.Available: 
        langAvailable.Add(locale.DisplayLanguage); 
        break; 
       case LanguageAvailableResult.CountryAvailable: 
        langAvailable.Add(locale.DisplayLanguage); 
        break; 
       case LanguageAvailableResult.CountryVarAvailable: 
        langAvailable.Add(locale.DisplayLanguage); 
        break; 
      } 
     } 
     langAvailable = langAvailable.OrderBy(t => t).Distinct().ToList(); 
+0

あなたの完全なエラーログを投稿してください。 –

+0

エラーはありません。 var localesAvailable = Java.Util.Locale.GetAvailableLocales()。ToList();いくつかのロケールを提供しますが、LanguageAvailableResult res = textToSpeech.IsLanguageAvailable(locale);これはあなたが 'TextToSpeech'機能を使用傾けるあなたのデバイスでアプリケーションをデプロイすると、すべてが – Ajay

+0

をサポートしていません示しているステージ?それとも、プロジェクトをコンパイルできないのですか? –

答えて

0

AndroidのGoogleのTTS:なぜlangAvailableリターンがサポートまたは-2しませんか?

GoogleのTTSは、初期化するためのビットを必要とするようにTTSエンジンが正しく初期化したとき、あなたはIsLanguageAvailable()メソッドを使用する必要がありそうです。例えば

:次に

void TextToSpeech.IOnInitListener.OnInit(OperationResult status) 
    { 
     // if we get an error, default to the default language 
     if (status == OperationResult.Error) 
      textToSpeech.SetLanguage(Java.Util.Locale.Default); 
     // if the listener is ok, set the lang 
     if (status == OperationResult.Success) 
     { 
      langAvailable = new List<string> { "Default" }; 
      localesAvailable = Java.Util.Locale.GetAvailableLocales().ToList(); 

      foreach (var locale in localesAvailable) 
      { 
       LanguageAvailableResult res = textToSpeech.IsLanguageAvailable(locale); 

       switch (res) 
       { 
        case LanguageAvailableResult.Available: 
         langAvailable.Add(locale.DisplayLanguage); 
         break; 
        case LanguageAvailableResult.CountryAvailable: 
         langAvailable.Add(locale.DisplayLanguage); 
         break; 
        case LanguageAvailableResult.CountryVarAvailable: 
         langAvailable.Add(locale.DisplayLanguage); 
         break; 
       } 
      } 

      langAvailable = langAvailable.OrderBy(t => t).Distinct().ToList(); 

      var adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerDropDownItem, langAvailable); 
      spinLanguages.Adapter = adapter; 

      textToSpeech.SetLanguage(lang); 
     } 
    } 

、あなたがSpinnerから言語を選択:

spinLanguages.ItemSelected += (object sender, AdapterView.ItemSelectedEventArgs e) => 
{ 
    lang = Java.Util.Locale.GetAvailableLocales().FirstOrDefault(t => t.DisplayLanguage == langAvailable[(int)e.Id]); 
    textToSpeech.SetLanguage(lang); 
}; 

Effectを。

+0

すでに答えとしてマーク。フォローアップし、助けてくれてありがとう。同じアプローチで問題を解決しました。しかし、与えられたのGitHubプロジェクトはOnCreate関数でそのイベントがありますので、私はそこに追加されました。 – Ajay

関連する問題