public void Ssml_Sayas_Generates_Sayas() { const string expected = @"<say-as interpret-as=""spell-out"">Hello World</say-as>"; var actual = new SayAs("Hello World", InterpretAs.SpellOut); CompareXml(expected, actual); }
private void Speak(string text, SayAs mode = SayAs.Text) { var prompt = new PromptBuilder(culture); prompt.StartSentence(culture); prompt.AppendTextWithHint(text, mode); prompt.EndSentence(); synthesizer.SpeakAsync(prompt); }
/// <summary> /// Speaks synchronously, be award because you program will be blocked during the talk. /// </summary> /// <param name="message">Message to speak.</param> /// <param name="sayAs">Type of pronunciation</param> public void Speak(string message, SayAs sayAs = SayAs.Text) { if (_enabled && (_voices.Count > 0)) { StopSpeak(); PromptBuilder builder = new PromptBuilder(CultureInfo.CreateSpecificCulture(_culture)); builder.AppendTextWithHint(message, sayAs); _speechSynth.Speak(builder); } }
private static SkillResponse NowDate() { var now = DateTime.Now; var date = new SayAs(now.ToString("????MMdd"), InterpretAs.Date); var speech = new Speech(new PlainText("今日は"), date, new PlainText("です。")); var output = new SsmlOutputSpeech() { Ssml = speech.ToXml() }; return(ResponseBuilder.Tell(output)); }
public void Speak(string message, SayAs sayAs = SayAs.Text) { if (voices.Count > 0) { StopSpeak(); PromptBuilder builder = new PromptBuilder(CultureInfo.CreateSpecificCulture("en-US")); builder.AppendTextWithHint(message, sayAs); speechSynth.Speak(builder); } else { Initialize(); } }
public void SpeakAsync(string message, SayAs sayAs = SayAs.Text) { if (_enabled && (_voices.Count > 0)) { StopSpeak(); PromptBuilder builder = null; try { builder = new PromptBuilder(CultureInfo.CreateSpecificCulture(_culture)); } catch (Exception ex) { builder = new PromptBuilder(); Console.WriteLine(ex.Message); } builder.AppendTextWithHint(message, sayAs); _speechSynth.SpeakAsync(builder); } }
public void AppendTextWithHint(string textToSpeak, SayAs sayAs) { Helpers.ThrowIfNull(textToSpeak, nameof(textToSpeak)); if (sayAs < SayAs.SpellOut || sayAs > SayAs.Text) { throw new ArgumentOutOfRangeException(nameof(sayAs)); } // check for well formed document ValidateElement(_elementStack.Peek(), SsmlElement.Text); if (sayAs != SayAs.Text) { Element sayAsElement = new(ElementType.SayAs, textToSpeak); _elements.Add(sayAsElement); sayAsElement._attributes = new Collection <AttributeItem>(); string sInterpretAs = null; string sFormat = null; switch (sayAs) { case SayAs.SpellOut: sInterpretAs = "characters"; break; case SayAs.NumberOrdinal: sInterpretAs = "ordinal"; break; case SayAs.NumberCardinal: sInterpretAs = "cardinal"; break; case SayAs.Date: sInterpretAs = "date"; break; case SayAs.DayMonthYear: sInterpretAs = "date"; sFormat = "dmy"; break; case SayAs.MonthDayYear: sInterpretAs = "date"; sFormat = "mdy"; break; case SayAs.YearMonthDay: sInterpretAs = "date"; sFormat = "ymd"; break; case SayAs.YearMonth: sInterpretAs = "date"; sFormat = "ym"; break; case SayAs.MonthYear: sInterpretAs = "date"; sFormat = "my"; break; case SayAs.MonthDay: sInterpretAs = "date"; sFormat = "md"; break; case SayAs.DayMonth: sInterpretAs = "date"; sFormat = "dm"; break; case SayAs.Year: sInterpretAs = "date"; sFormat = "y"; break; case SayAs.Month: sInterpretAs = "date"; sFormat = "m"; break; case SayAs.Day: sInterpretAs = "date"; sFormat = "d"; break; case SayAs.Time: sInterpretAs = "time"; break; case SayAs.Time24: sInterpretAs = "time"; sFormat = "hms24"; break; case SayAs.Time12: sInterpretAs = "time"; sFormat = "hms12"; break; case SayAs.Telephone: sInterpretAs = "telephone"; break; } sayAsElement._attributes.Add(new AttributeItem("interpret-as", sInterpretAs)); if (!string.IsNullOrEmpty(sFormat)) { sayAsElement._attributes.Add(new AttributeItem("format", sFormat)); } } else { AppendText(textToSpeak); } }
public void AppendTextWithHint(string textToSpeak, SayAs sayAs) { Helpers.ThrowIfNull(textToSpeak, "textToSpeak"); if (sayAs < SayAs.SpellOut || sayAs > SayAs.Text) { throw new ArgumentOutOfRangeException("sayAs"); } ValidateElement(_elementStack.Peek(), SsmlElement.Text); if (sayAs != SayAs.Text) { Element element = new Element(ElementType.SayAs, textToSpeak); _elements.Add(element); element._attributes = new Collection <AttributeItem>(); string value = null; string value2 = null; switch (sayAs) { case SayAs.SpellOut: value = "characters"; break; case SayAs.NumberOrdinal: value = "ordinal"; break; case SayAs.NumberCardinal: value = "cardinal"; break; case SayAs.Date: value = "date"; break; case SayAs.DayMonthYear: value = "date"; value2 = "dmy"; break; case SayAs.MonthDayYear: value = "date"; value2 = "mdy"; break; case SayAs.YearMonthDay: value = "date"; value2 = "ymd"; break; case SayAs.YearMonth: value = "date"; value2 = "ym"; break; case SayAs.MonthYear: value = "date"; value2 = "my"; break; case SayAs.MonthDay: value = "date"; value2 = "md"; break; case SayAs.DayMonth: value = "date"; value2 = "dm"; break; case SayAs.Year: value = "date"; value2 = "y"; break; case SayAs.Month: value = "date"; value2 = "m"; break; case SayAs.Day: value = "date"; value2 = "d"; break; case SayAs.Time: value = "time"; break; case SayAs.Time24: value = "time"; value2 = "hms24"; break; case SayAs.Time12: value = "time"; value2 = "hms12"; break; case SayAs.Telephone: value = "telephone"; break; } element._attributes.Add(new AttributeItem("interpret-as", value)); if (!string.IsNullOrEmpty(value2)) { element._attributes.Add(new AttributeItem("format", value2)); } } else { AppendText(textToSpeak); } }
/// <summary> /// Speaks asynchronously /// </summary> /// <param name="message">Message to speak</param> /// <param name="sayAs">Type of pronunciation</param> public void SpeakAsync(string message, SayAs sayAs = SayAs.Text) { if (_enabled && (_voices.Count > 0)) { StopSpeak(); PromptBuilder builder = null; try { builder = new PromptBuilder(CultureInfo.CreateSpecificCulture(_culture)); } catch (Exception e) { builder = new PromptBuilder(); } builder.AppendTextWithHint(message, sayAs); _speechSynth.SpeakAsync(builder); } }