IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Elis - Speech Class

Třída pro správu řeči Elis

c-sharp

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SpeechLib;
using System.Threading;

namespace Elis
{
    public class Speech
    {
        private readonly SpVoice voice;
        private Dictionary<string, DateTime> said;

        public Speech()
        {
            voice = new SpVoice();

            // vyberu hlas Elišky - Elisky - Elis (projel sem to cyklem a podíval se kolikátej je, zatím sem neřešil, jak ho najít podle nějakého identifikátoru)
            voice.Voice = voice.GetVoices().Item(4);
            // rychlost mluvy
            voice.Rate = 2;

            said = new Dictionary<string, DateTime>();
        }

        /// <summary>
        /// Podívá se, zda tuto větu Elis někdy řekla a kdy ji může říct z novu
        /// </summary>
        /// <param name="text">Věta ke kontrola</param>
        /// <returns>Zda ji může vyslovit nebo ne</returns>
        private bool CanSpeak(string text)
        {
            if (!said.ContainsKey(text))
            {
                return true;
            }
            else if (said[text] < DateTime.Now)
            {
                said.Remove(text);
                return true;
            }

            return false;
        }

        /// <summary>
        /// Elis promluví
        /// </summary>
        /// <param name="text">Text co má říci</param>
        /// <param name="canRepeatAfter">Pokud toto nemá opakovat, zadá se počet minut v double, jak dlouho tuto větu nemá říkat</param>
        public void Speak(string text, double canRepeatAfter = 0)
        {
            if (CanSpeak(text))
            {
                voice.Speak(text, SpeechVoiceSpeakFlags.SVSFlagsAsync);
                if (canRepeatAfter > 0)
                    said.Add(text, DateTime.Now.AddMinutes(canRepeatAfter));
            }
            else
                throw new Exception("Cannot repeat until " + said[text]);
        }

        public void StopSpeaking()
        {
            if (voice.Status.RunningState == SpeechRunState.SRSEIsSpeaking)
                voice.Speak("", SpeechLib.SpeechVoiceSpeakFlags.SVSFPurgeBeforeSpeak);
        }
    }
}

Neformátovaný

Přidáno: 26.11.2012
Expirace: Neuvedeno

Aktivity