protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                tts?.Stop();
                tts?.Shutdown();
                tts = null;
            }

            base.Dispose(disposing);
        }
Esempio n. 2
0
 void IDisposable.Dispose()
 {
     textToSpeech?.Stop();
     textToSpeech?.Dispose();
     textToSpeech = null;
     initialized  = false;
 }
Esempio n. 3
0
        private void Speak()
        {
            if (string.IsNullOrWhiteSpace(text))
            {
                return;
            }

            if (!queue && textToSpeech.IsSpeaking)
            {
                textToSpeech.Stop();
            }

            if (language.HasValue && !string.IsNullOrWhiteSpace(language.Value.Language))
            {
                Locale locale = null;
                if (!string.IsNullOrWhiteSpace(language.Value.Country))
                {
                    locale = new Locale(language.Value.Language, language.Value.Country);
                }
                else
                {
                    locale = new Locale(language.Value.Language);
                }

                var result = textToSpeech.IsLanguageAvailable(locale);
                if (result == LanguageAvailableResult.CountryAvailable)
                {
                    textToSpeech.SetLanguage(locale);
                }
                else
                {
                    Console.WriteLine("Locale: " + locale + " was not valid, setting to default.");
                    SetDefaultLanguage();
                }
            }
            else
            {
                SetDefaultLanguage();
            }

            textToSpeech.SetPitch(pitch);
            textToSpeech.SetSpeechRate(speakRate);

            textToSpeech.Speak(text, queue ? QueueMode.Add : QueueMode.Flush, null);
        }
Esempio n. 4
0
        Task Speak(CancellationToken?cancelToken)
        {
            if (string.IsNullOrWhiteSpace(text))
            {
                return(Task.CompletedTask);
            }

            if (language.HasValue && !string.IsNullOrWhiteSpace(language.Value.Language))
            {
                Locale locale = null;
                if (!string.IsNullOrWhiteSpace(language.Value.Country))
                {
                    locale = new Locale(language.Value.Language, language.Value.Country);
                }
                else
                {
                    locale = new Locale(language.Value.Language);
                }

                var result = textToSpeech.IsLanguageAvailable(locale);
                if (result == LanguageAvailableResult.CountryAvailable)
                {
                    textToSpeech.SetLanguage(locale);
                }
                else
                {
                    Console.WriteLine("Locale: " + locale + " was not valid, setting to default.");
                    SetDefaultLanguage();
                }
            }
            else
            {
                SetDefaultLanguage();
            }

            var tcs = new TaskCompletionSource <object>();

            cancelToken?.Register(() =>
            {
                textToSpeech.Stop();
                tcs.TrySetCanceled();
            });
            textToSpeech.SetPitch(pitch);
            textToSpeech.SetSpeechRate(speakRate);
            textToSpeech.SetOnUtteranceProgressListener(new TtsProgressListener(tcs));
#pragma warning disable CS0618 // Type or member is obsolete

            count++;
            var map = new Dictionary <string, string>
            {
                [Android.Speech.Tts.TextToSpeech.Engine.KeyParamUtteranceId] = count.ToString()
            };
            textToSpeech.Speak(text, QueueMode.Flush, map);
#pragma warning restore CS0618 // Type or member is obsolete

            return(tcs.Task);
        }
Esempio n. 5
0
 void IDisposable.Dispose()
 {
     textToSpeech?.Stop();
     textToSpeech?.Dispose();
     textToSpeech = null;
 }
Esempio n. 6
0
        async Task Speak(CancellationToken?cancelToken)
        {
            if (string.IsNullOrWhiteSpace(text))
            {
                //return Task.CompletedTask;
                return;
            }

            if (language.HasValue && !string.IsNullOrWhiteSpace(language.Value.Language))
            {
                Locale locale = null;
                if (!string.IsNullOrWhiteSpace(language.Value.Country))
                {
                    locale = new Locale(language.Value.Language, language.Value.Country);
                }
                else
                {
                    locale = new Locale(language.Value.Language);
                }

                var result = textToSpeech.IsLanguageAvailable(locale);
                if (result == LanguageAvailableResult.CountryAvailable)
                {
                    textToSpeech.SetLanguage(locale);
                }
                else
                {
                    Console.WriteLine("Locale: " + locale + " was not valid, setting to default.");
                    SetDefaultLanguage();
                }
            }
            else
            {
                SetDefaultLanguage();
            }

            var tcs  = new TaskCompletionSource();
            var flag = new AsyncManualResetEvent();

            var utteranceID = Guid.NewGuid().ToString();
            var doneTask    = listener.ListenFor(utteranceID);

            cancelToken?.Register(() =>
            {
                textToSpeech.Stop();
                tcs?.TrySetCanceled();
                listener?.completionSources?[utteranceID]?.TrySetCanceled();
            });

            var utteranceProgressListenerDictionary = new Dictionary <string, string>();

            utteranceProgressListenerDictionary.Add(Android.Speech.Tts.TextToSpeech.Engine.KeyParamUtteranceId, utteranceID);
            utteranceProgressListenerDictionary.Add(Android.Speech.Tts.TextToSpeech.Engine.KeyParamVolume, volume.ToString());

            textToSpeech.SetPitch(pitch);
            textToSpeech.SetSpeechRate(speakRate);

            //textToSpeech.SetOnUtteranceProgressListener(new TtsProgressListener(flag));

            //var bundle = new Android.OS.Bundle();
            //bundle.PutFloat(Android.Speech.Tts.TextToSpeech.Engine.KeyParamVolume, 1.0f);

#pragma warning disable CS0618 // Type or member is obsolete
            //textToSpeech.Speak(text, QueueMode.Flush, bundle, text);
            textToSpeech.Speak(text, QueueMode.Flush, utteranceProgressListenerDictionary);
#pragma warning restore CS0618 // Type or member is obsolete

            //return tcs.Task;
            //return Task.WhenAny(tcs.Task, flag.WaitAsync());
            //return listener.IsDone();

            //int i = 0;
            //var sw = new System.Diagnostics.Stopwatch();
            //sw.Start();
            //while (doneTask.Status != TaskStatus.RanToCompletion)
            //{
            //    Task.Delay(100).Wait(101);
            //    //await Task.Delay(100, CancellationTokenHelpers.Timeout(105).Token);
            //    Android.Util.Log.Debug("Speech", $"Iteration {i}, {sw.ElapsedMilliseconds} ms - status is {doneTask.Status}.");
            //    i++;
            //}

            //return doneTask;
            await doneTask;
        }