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