2017-11-01 3 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); 이 단계는 모두 표시됩니다 지원되지 않음 – Ajay

+0

장치에 응용 프로그램을 배포 할 때'TextToSpeech' 기능을 사용할 수 없습니까? 아니면 프로젝트를 컴파일 할 수 있습니까? –

답변

0

안드로이드 구글 TTS : 왜 langAvailable 반환 지원 또는 -2하지?

TTS 엔진이 올바르게 초기화되었을 때 Google 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 프로젝트에 해당 이벤트가 포함되어 있으므로 추가했습니다. – Ajay