Я хотел бы иметь возможность генерировать речь в моем приложении 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 символов.
Спасибо.