Please help with the implementation of this example = Speech Synthesis with ASP.NET and HTML5
the WebForms application in the App_Code folder has created a class
using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.IO; using System.Linq; using System.Speech.Synthesis; using System.Threading; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; /// <summary> /// Сводное описание для SpeechSynthesizer /// </summary> [ConstructorNeedsTag(false)] public class SpeechSynthesizer : HtmlGenericControl, ICallbackEventHandler { private readonly System.Speech.Synthesis.SpeechSynthesizer synth = new System.Speech.Synthesis.SpeechSynthesizer(); public SpeechSynthesizer() : base("audio") { this.Age = VoiceAge.NotSet; this.Gender = VoiceGender.NotSet; this.Culture = CultureInfo.CurrentCulture; this.VoiceName = String.Empty; this.Ssml = false; } [DefaultValue("")] public String VoiceName { get; set; } [DefaultValue(100)] public Int32 Volume { get; set; } [DefaultValue(0)] public Int32 Rate { get; set; } [TypeConverter(typeof(CultureInfoConverter))] public CultureInfo Culture { get; set; } [DefaultValue(VoiceGender.NotSet)] public VoiceGender Gender { get; set; } [DefaultValue(VoiceAge.NotSet)] public VoiceAge Age { get; set; } [DefaultValue(false)] public Boolean Ssml { get; set; } protected override void OnInit(EventArgs e) { AsyncOperationManager.SynchronizationContext = new SynchronizationContext(); var sm = ScriptManager.GetCurrent(this.Page); var reference = this.Page.ClientScript.GetCallbackEventReference(this, "text", String.Format("function(result){{ document.getElementById('{0}').src = result; document.getElementById('{0}').play(); }}", this.ClientID), String.Empty, true); var script = String.Format("\ndocument.getElementById('{0}').speak = function(text){{ {1} }};\n", this.ClientID, reference); if (sm != null) { this.Page.ClientScript.RegisterStartupScript(this.GetType(), String.Concat("speak", this.ClientID), String.Format("Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(function() {{ {0} }});\n", script), true); } else { this.Page.ClientScript.RegisterStartupScript(this.GetType(), String.Concat("speak", this.ClientID), script, true); } base.OnInit(e); } protected override void OnPreRender(EventArgs e) { this.Attributes.Remove("class"); this.Attributes.Remove("src"); this.Attributes.Remove("preload"); this.Attributes.Remove("loop"); this.Attributes.Remove("autoplay"); this.Attributes.Remove("controls"); this.Style[HtmlTextWriterStyle.Display] = "none"; this.Style[HtmlTextWriterStyle.Visibility] = "hidden"; base.OnPreRender(e); } public override void Dispose() { this.synth.Dispose(); base.Dispose(); } #region ICallbackEventHandler Members String ICallbackEventHandler.GetCallbackResult() { using (var stream = new MemoryStream()) { this.synth.Rate = this.Rate; this.synth.Volume = this.Volume; this.synth.SetOutputToWaveStream(stream); if (String.IsNullOrWhiteSpace(this.VoiceName) == false) { this.synth.SelectVoice(this.VoiceName); } else { this.synth.SelectVoiceByHints(this.Gender, this.Age, 0, this.Culture); } if (this.Ssml == false) { this.synth.Speak(this.Context.Items["data"] as String); } else { this.synth.SpeakSsml(this.Context.Items["data"] as String); } return (String.Concat("data:audio/wav;base64,", Convert.ToBase64String(stream.ToArray()))); } } void ICallbackEventHandler.RaiseCallbackEvent(String eventArgument) { this.Context.Items["data"] = eventArgument; } #endregion } added test page
<%@ Page Async="true" Language="C#" AutoEventWireup="true" CodeFile="speech.aspx.cs" Inherits="contact_speech" %> <%@ Register Assembly="System.Speech, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Speech" TagPrefix="web" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script type="text/javascript"> function onSpeak(text) { document.getElementById('synthesizer').speak(text); } </script> </head> <body> <form id="form1" runat="server"> <div> <div> <web:SpeechSynthesizer runat="server" ID="synthesizer" Age="Adult" Gender="Male" Culture="en-US" Rate="0" Volume="100" /> <input type="text" id="text" name="text" /> <input type="button" value="Speak" onclick="onSpeak(this.form.text.value)" /> </div> <%--<asp:Button ID="btVoice" runat="server" Text="ОЗВУЧИТЬ СОДЕРЖИМОЕ СТРАНИЦЫ" OnClick="btVoice_Click" />--%> </div> </form> </body> </html> when building an application, I get an error
Warning 1 Unknown element "SpeechSynthesizer". This can occur if there is a compilation error on the website or the web.config file is missing. \ speech.aspx 21 22
please tell me how to fix the error Regards Yuri