public void AppendText(string textToSpeak, PromptRate rate) { Helpers.ThrowIfNull(textToSpeak, nameof(textToSpeak)); if (rate < PromptRate.NotSet || rate > PromptRate.ExtraSlow) { throw new ArgumentOutOfRangeException(nameof(rate)); } // Validate that text can be added in this context ValidateElement(_elementStack.Peek(), SsmlElement.Text); Element prosodyElement = new(ElementType.Prosody, textToSpeak); _elements.Add(prosodyElement); string sPromptRate = null; switch (rate) { case PromptRate.NotSet: break; case PromptRate.ExtraFast: sPromptRate = "x-fast"; break; case PromptRate.ExtraSlow: sPromptRate = "x-slow"; break; default: sPromptRate = rate.ToString().ToLowerInvariant(); break; } if (!string.IsNullOrEmpty(sPromptRate)) { prosodyElement._attributes = new Collection <AttributeItem>(); prosodyElement._attributes.Add(new AttributeItem("rate", sPromptRate)); } }
public void AppendText(string textToSpeak, PromptRate rate) { Helpers.ThrowIfNull(textToSpeak, "textToSpeak"); if (rate < PromptRate.NotSet || rate > PromptRate.ExtraSlow) { throw new ArgumentOutOfRangeException("rate"); } ValidateElement(_elementStack.Peek(), SsmlElement.Text); Element element = new Element(ElementType.Prosody, textToSpeak); _elements.Add(element); string value = null; switch (rate) { case PromptRate.ExtraFast: value = "x-fast"; break; case PromptRate.ExtraSlow: value = "x-slow"; break; default: value = rate.ToString().ToLowerInvariant(); break; case PromptRate.NotSet: break; } if (!string.IsNullOrEmpty(value)) { element._attributes = new Collection <AttributeItem>(); element._attributes.Add(new AttributeItem("rate", value)); } }
public PromptStyle(PromptRate rate) { Rate = rate; }
public new void AppendText(string textToSpeak, PromptRate rate) { HebrewPromptReader.ReadInto(this, textToSpeak); }
//parse the entire thing out and say the stuff. public void parse(string filename) { //Load the file lines = System.IO.File.ReadAllLines(filename); //Parse the anchors Parse_Anchors(); while (index < lines.Length) { string input = lines[index]; index++; //Parse the context if (input.StartsWith("SetRate:")) { string rate = input.Substring(8); if (Ratevalues.ContainsKey(rate)) { PromptRate pmt_rate = Ratevalues[rate]; style_.Rate = pmt_rate; } } if (input.StartsWith("SetEmp:")) { string Empsetting = input.Substring(7); if (Emphasisvalues.ContainsKey(Empsetting)) { PromptEmphasis emp_val = Emphasisvalues[Empsetting]; style_.Emphasis = emp_val; } } if (input.StartsWith("<Deepener>")) { //Make note of the deepender here. if (!random_lines.ContainsKey(index)) { random_lines.Add(index, "<Deepener>"); } //now we will run a Deepener script here. int Deepener_Count = Deepener_names.Count(); Random r = new Random(); int next_Deepener = r.Next(Deepener_Count); string Deepener_name = Deepener_names[next_Deepener]; //Some recursive magic now SpeechScriptInterpreter Deepener_interpreter = new SpeechScriptInterpreter(); Deepener_interpreter.init(); //Initialize the new interpreter instance Deepener_interpreter.parse(Deepener_name); } if (input.StartsWith("<Goto:")) { string command = "Goto"; //Get the anchor object. Anchor A = FetchAnchor(input, command); //The '!' character is reserved and anchors cannot use it //It is used to denote a failed fetch. To prevent NullErrors. if (A.name != "!") { int line_index = A.line_number; //Assign indirectly the index of this trance to the Anchor index. index = line_index; } } //Change inputs by setting functions for them for more efficient parsing and //Templating of code blocks. if (input.StartsWith("<QueryMulti:")) { QueryMulti(input); } if (input.StartsWith("<QueryDeepEnough>")) { Dialouge get_state = new Dialouge(); say_default("Are you deep enough yet?"); get_state.ShowDialog(); //Find out yes or no string result = get_state.ReturnValue; if (result == "Yes") { continue; } if (result == "No") { for (int i = index; i > 0; i--) { //search backwards for the previous Deepener //Did we find a '<Deepener> tag? if (random_lines.ContainsKey(i)) { if (random_lines[i] == "<Deepener>") { //does it match? //if it does, we go backwards in the script //All the way to this point index = i - 1; break; //We want to quit the search } } } } } //Generic Query if (input.StartsWith("<QueryGeneric:")) { HandleQuery(input); } //Say the stuff, treating our rate and emphasis as part of a state machine //Which we re-apply each time something is to be spoken. if (input.StartsWith("Say:")) { string voice_string = input.Substring(4); builder.ClearContent(); builder.StartSentence(); builder.StartStyle(style_); builder.AppendText(voice_string); builder.EndStyle(); builder.EndSentence(); //lastly let the ball roll and see if we can hear some chatter. reader.Speak(builder); } } }
private void Speak(string str, PromptRate rate, PromptVolume volume, bool quoted) { int speakRate = defaultRate; int speakVolume = defaultVolume; switch (rate) { case PromptRate.ExtraSlow: speakRate -= 2; break; case PromptRate.Slow: speakRate -= 1; break; case PromptRate.Medium: speakRate += 0; break; case PromptRate.Fast: speakRate += 1; break; case PromptRate.ExtraFast: speakRate += 2; break; } switch (volume) { case PromptVolume.Silent: speakVolume -= 50; break; case PromptVolume.ExtraSoft: speakVolume -= 20; break; case PromptVolume.Soft: speakVolume -= 10; break; case PromptVolume.NotSet: speakVolume += 0; break; case PromptVolume.Default: speakVolume += 0; break; case PromptVolume.Medium: speakVolume += 0; break; case PromptVolume.Loud: speakVolume += 10; break; case PromptVolume.ExtraLoud: speakVolume += 20; break; } if (quoted) { speakVolume += 10; } if (speakVolume > 100) { speakVolume = 100; } else if (speakVolume < 0) { speakVolume = 0; } if (speakRate > 10) { speakRate = 10; } else if (speakRate < -10) { speakRate = -10; } synth.Volume = speakVolume; synth.Rate = speakRate; synth.Speak(str); }
private void Speak(string str, PromptRate rate, PromptVolume volume, bool quoted) { int speakRate = defaultRate; int speakVolume = defaultVolume; switch (rate) { case PromptRate.ExtraSlow: speakRate -= 2; break; case PromptRate.Slow: speakRate -= 1; break; case PromptRate.Medium: speakRate += 0; break; case PromptRate.Fast: speakRate += 1; break; case PromptRate.ExtraFast: speakRate += 2; break; } switch (volume) { case PromptVolume.Silent: speakVolume -= 50; break; case PromptVolume.ExtraSoft: speakVolume -= 20; break; case PromptVolume.Soft: speakVolume -= 10; break; case PromptVolume.NotSet: speakVolume += 0; break; case PromptVolume.Default: speakVolume += 0; break; case PromptVolume.Medium: speakVolume += 0; break; case PromptVolume.Loud: speakVolume += 10; break; case PromptVolume.ExtraLoud: speakVolume += 20; break; } if (quoted) speakVolume += 10; if (speakVolume > 100) speakVolume = 100; else if (speakVolume < 0) speakVolume = 0; if (speakRate > 10) speakRate = 10; else if (speakRate < -10) speakRate = -10; synth.Volume = speakVolume; synth.Rate = speakRate; synth.Speak(str); }