コード例 #1
0
        void _voiceSpinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
        {
            EngInt ei = _eli[e.Position];

            _selectedEngine = ei.El;
            _selectedVoice  = ei.Pos;
#pragma warning disable 4014
            TestVoice(_selectedEngine.Name(), _selectedEngine.Voices[_selectedVoice]);
#pragma warning restore 4014
        }
コード例 #2
0
 public void onInit(int status) {
     if (myEngineIndex < allEngines.size()) {
         if (status == TextToSpeech.SUCCESS) {
             // Ask a TTS engine which voices it currently has installed
             EngLang el = allEngines.get(myEngineIndex);
             Intent in = new Intent(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
             in = in.setPackage(el.ei.name); // set engine package name
             try {
                 startActivityForResult(in, LANG_REQUEST); // goes to onActivityResult()
                 // DISRUPTION 2: we can’t continue here, must wait for onActivityResult()…
             } catch (Exception e) {   // ActivityNotFoundException, also got SecurityException from com.turboled
                 if (myTts != null) try {
                     myTts.shutdown();
                 } catch (Exception ee) {}
                 if (++myEngineIndex < allEngines.size()) {
                     // If our loop was not finished and exception happened with one engine,
                     // we need this call here to continue looping…
                     myTts = new TextToSpeech(AndyUtil.getAppContext(), ttsInit, allEngines.get(myEngineIndex).name());
                 } else {
                     completeSetup();
                 }
             }
         }
     } else
コード例 #3
0
 public EngInt(EngLang el, int pos)
 {
     El  = el;
     Pos = pos;
 }
コード例 #4
0
        private void langSpinner_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
        {
            // fill voices
            String lang   = _langCodes[e.Position].Code;
            var    voices = new List <String>();

            _eli = new List <EngInt>();
            String initVoice    = Intent.GetStringExtra(INIT_LANG);
            String initLangIso3 = null;

            if (initVoice != null)
            {
                initVoice    = initVoice.ToLower();
                initLangIso3 = new Locale(initVoice).ISO3Language.ToLower();
            }
            String initEngine = Intent.GetStringExtra(INIT_ENGINE);
            int    selPos = -1, selQual = -1, maxQual = -100, n = 0;

            foreach (EngLang el in _allEngines)
            {
                String ttsEngName = el.Label().Replace(" TTS", "");
                bool   useThis    = initVoice != null && initEngine != null && initEngine == el.Name();
                for (int i = 0; i < el.Voices.Count; i++)
                {
                    if (lang == el.Iso3ln[i])
                    {
                        Locale loc    = LangSupport.LocaleFromString(el.Voices[i]);
                        String locStr = loc.ToString().ToLower().Replace('_', '-');
                        if (useThis && locStr == initVoice)
                        {
                            selPos    = n;
                            useThis   = false;
                            initVoice = null; // to stop looking for more
                        }
                        if (maxQual < el.Quality)
                        {
                            maxQual = el.Quality;
                            selQual = n;
                        }
                        String country = loc.GetDisplayCountry(loc);
                        String variant = loc.Variant;
                        String s       = ttsEngName;
                        if ("" != country)
                        {
                            s += ", " + country;
                        }
                        if ("" != variant)
                        {
                            s += ", " + variant;
                        }
                        voices.Add(s);
                        _eli.Add(new EngInt(el, i));
                        n++;
                    }
                }
            }

            var adapter = new ArrayAdapter <String>(this, Android.Resource.Layout.SimpleSpinnerItem, voices);

            adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
            _voiceSpinner.Adapter = adapter;
            if (selPos < 0)
            {
                selPos = selQual;
            }
            if (selPos > -1)
            {
                _selectedEngine = _eli[selPos].El;
                _selectedVoice  = _eli[selPos].Pos;
                bool autoSel = (Intent != null && Intent.GetBooleanExtra(INIT_AUTOSEL, false)) ? true : false;
                if (autoSel && _selectedEngine != null && _selectedVoice > -1)
                {
                    if (initLangIso3 == _selectedEngine.Iso3ln[_selectedVoice])
                    {
                        UseSelected();
                        return;
                    }
                    else
                    {
                        Intent.PutExtra(SELECTED_VOICE, initLangIso3 + "_n/a");
                        SetResult(Result.Ok, Intent);
                        Finish();
                        return;
                    }
                }
                _voiceSpinner.SetSelection(selPos); // fix this, use previous selection or best quality...
            }
        }
コード例 #5
0
        private async void GetEnginesAndLangsAsync()
        {
            _tts = new TextToSpeech(this, null);
            IList <TextToSpeech.EngineInfo> engines = _tts.Engines;

            try
            {
                _tts.Shutdown();
            }
            catch { /* don't care */ }

            foreach (TextToSpeech.EngineInfo ei in engines)
            {
                Log.Debug(TAG, "Trying to create TTS Engine: " + ei.Name);
                Log.Debug(TAG, "in GetEnginesAndLangsAsync() before await for CreateTtsAsync(), Thread: " + System.Threading.Thread.CurrentThread.ManagedThreadId);

                _tts = await CreateTtsAsync(this, ei.Name);

                // DISRUPTION 1 from Java code eliminated, we simply await TTS engine initialization here.
                if (_tts != null)
                {
                    var el = new EngLang(ei);
                    _allEngines.Add(el);
                    Log.Debug(TAG, "Engine: " + ei.Name + " initialized correctly.");
                    var intent = new Intent(TextToSpeech.Engine.ActionCheckTtsData);
                    intent = intent.SetPackage(el.Ei.Name);
                    Intent data = await StartActivityForResultAsync(intent, LANG_REQUEST);

                    // DISTRUPTION 2 from Java code eliminated, we simply await until the result returns.
                    try
                    {
                        // don't care if lastData or voices comes out null, just catch exception and continue
                        IList <String> voices = data.GetStringArrayListExtra(TextToSpeech.Engine.ExtraAvailableVoices);
                        Log.Debug(TAG, "Listing voices for " + el.Name() + " (" + el.Label() + "):");
                        foreach (String s in voices)
                        {
                            el.AddVoice(s);
                            Log.Debug(TAG, "- " + s);
                        }
                    }
                    catch (Exception e)
                    {
                        Log.Debug(TAG, "Engine " + el.Name() + " listing voices exception: " + e);
                    }
                    try
                    {
                        _tts.Shutdown();
                    }
                    catch { /* don't care */ }
                    _tts = null;
                }
            }

            FindViewById(Resource.Id.wait).Visibility = ViewStates.Gone;
            FindViewById(Resource.Id.main).Visibility = ViewStates.Visible;
            _voiceSpinner = (Spinner)FindViewById(Resource.Id.voices);
            _voiceSpinner.ItemSelected += _voiceSpinner_ItemSelected;

            // Complete setup
            var    languages = new List <String>();
            String initLang  = Intent.GetStringExtra(INIT_LANG);

            initLang = initLang != null ? new Locale(initLang).ISO3Language : Locale.Default.ISO3Language;

            foreach (EngLang el in _allEngines)
            {
                foreach (String v in el.Voices)
                {
                    String lang = v;
                    int    i    = lang.IndexOf('-');
                    if (i > 0)
                    {
                        lang = lang.Substring(0, i);
                    }
                    var loc = new Locale(lang);
                    lang = loc.ISO3Language.ToLower();
                    if (lang.Length != 3)
                    {
                        continue;
                    }
                    bool doAdd = true;
                    foreach (LangCodeName lcn in _langCodes)
                    {
                        if (lcn.Code != lang)
                        {
                            continue;
                        }
                        doAdd = false;
                        break;
                    }
                    if (doAdd)
                    {
                        _langCodes.Add(new LangCodeName(lang));
                    }
                }
            }
            _langCodes.Sort();
            int selPos = -1;

            for (int i = 0; i < _langCodes.Count; i++)
            {
                languages.Add(_langCodes[i].Name);
                if (_langCodes[i].Code.Equals(initLang))
                {
                    selPos = i;
                }
            }

            var adapter = new ArrayAdapter <String>(this, Android.Resource.Layout.SimpleSpinnerItem, languages);

            adapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
            var langSpinner = (Spinner)FindViewById(Resource.Id.languages);

            langSpinner.Adapter = adapter;
            if (selPos > -1)
            {
                langSpinner.SetSelection(selPos);
            }
            langSpinner.ItemSelected   += langSpinner_ItemSelected;
            _voiceSpinner.ItemSelected += _voiceSpinner_ItemSelected;

            var addBtn = (Button)FindViewById(Resource.Id.add_lang_btn);

            addBtn.Click += addBtn_Click;
            var useBtn = (Button)FindViewById(Resource.Id.use_voice_btn);

            useBtn.Click += useBtn_Click;
        }