Я хотел бы иметь возможность генерировать речь в моем приложении ASP.NET, вызывая speak.aspx?text=Hello%20world
. Это даст ответ в формате .wav
.
Пока у меня есть пустая страница с кодом позади:
protected void Page_PreRender(object sender, EventArgs e)
{
using (var ss = new SpeechSynthesizer()) {
MemoryStream str = new MemoryStream();
ss.SetOutputToWaveStream(str);
ss.Speak(Server.UrlDecode(Request.QueryString["text"]));
Response.AddHeader("Content-Type", "audio/wav");
str.WriteTo(Response.OutputStream);
str.Close();
}
}
Однако это не с сообщением:
InvalidOperationException : асинхронные операции в этом контексте запрещены. Страница, запускающая асинхронную операцию, должна иметь для атрибута Async значение true, и асинхронная операция может быть запущена только на странице до события PreRenderComplete.
Если я добавлю Async="true"
к директиве @Page
, код запускается, но запрос на страницу зависает на неопределенное время. Пожалуйста, не могли бы вы дать мне знать, что не так, и показать правильный код / подход к использованию?
Примечание. Я не могу просто использовать API преобразования текста в речь Google, поскольку он допускает строки не более 100 символов.
Спасибо.