Создание приложения ASP.NET для преобразования текста в речь
Я ищу некоторое понимание в создании приложения, которое преобразует текст в речь в ASP.NET. Из моего первоначального исследования выясняется, что:
MS SAPI требует от клиента загрузки компонента ActiveX и может поддерживать большое количество текста для преобразования. Наши клиенты не желают устанавливать какие-либо компоненты в свои системы, поэтому такой подход может не сработать.
Я понимаю, что в.NET 3.0 у нас есть пространство имен System.Speech.Synthesis. Происходит ли конвертация на сервере? Если так, как бы я подал это клиенту?
Наши требования - способность конвертировать большое количество текста, должны быть масштабируемыми и надежными. Какая технология "готова к производству" и способна обслуживать большое количество запросов за короткий промежуток времени.
Любые мысли приветствуются.
5 ответов
По умолчанию приложения ASP.Net не запускаются с достаточными разрешениями для доступа к синтезу речи, и при попытке запуска кода Ларсенала произойдет ошибка безопасности.
Мне удалось обойти это в приложении, запустив отдельную службу WCF на сервере, как обычную службу Windows. Затем приложение ASP.Net связалось с этим сервисом. Этот сервис только обернул код Ларсенала, возвращая массив байтов с заданной строкой текста.
Кроме того, один мегабайт текста? Это роман хорошего размера.
Редактировать, 11-12-09, отвечая на некоторые комментарии:
System.Speech может либо вернуть массив байтов, либо сохранить его в файл wav, который затем можно передать на медиаплеер, встроенный в страницу пользователя. Когда я создавал свою говорящую веб-страницу, она работала так:
1) Page.aspx содержит тег "embed", который помещает проигрыватель Windows Media на страницу. Источник "PlayText.aspx?Textid= что угодно".
2) PlayText.aspx загружает соответствующий текст и передает (через WCF) службе речевого чтения, передавая ему текст для чтения.
3) Служба Speechreader создает MemoryStream и вызывает SpeechSynthesiser.SetOutputToWaveStream, а затем возвращает поток в виде одного массива байтов. Этот массив Response.Write()- для клиента.
Вот основная идея сервиса SpeechReader:
byte[] ITextReader.SpeakText(string text)
{
using (SpeechSynthesizer s = new SpeechSynthesizer())
{
using (MemoryStream ms = new MemoryStream())
{
s.SetOutputToWaveStream(ms);
s.Speak(text);
return ms.GetBuffer();
}
}
}
Я почти уверен, что в конце он возвращает огромный массив байтов XML и ужасно неэффективен. Я просто сделал это как доказательство концепции, и поэтому не исследовал это. Если вы намереваетесь использовать это в работе, убедитесь, что он не возвращает что-то вроде этого:
<byte>23</byte>
<byte>42</byte>
<byte>117</byte>
...
Я добился этого, используя codeBehind для запуска функции JavaScript, которая запускает команду преобразования текста в речь:
CodeBehind:
Page.ClientScript.RegisterStartupScript(
GetType(),
"anythingHere",
"nameOfFunction();",
true);
JavaScript:
<script>
function nameOfFunction()
{//start
var msg = new SpeechSynthesisUtterance('READ ME!');
window.speechSynthesis.speak(msg);
}//end
</script>
С SpeechSynthesizer вы можете выводить в файл WAV. Затем вы можете при необходимости сжать вторичный процесс или преобразовать его в другой формат. Все это может быть сделано на сервере, а затем отправлено через браузер.
Эта статья CodeProject является хорошим введением в.NET Speech Synthesis.
Если вы хотите увидеть, как это работает с большим количеством текста.... Добавьте ссылку на System.Speech, а затем используйте в качестве отправной точки следующее:
using System;
using System.Speech.Synthesis;
namespace SpeakToMe
{
class Program
{
static void Main(string[] args)
{
SpeechSynthesizer synth = new SpeechSynthesizer();
synth.SetOutputToWaveFile("c:\\test.wav");
synth.Speak("Hello, world.");
synth.SetOutputToDefaultAudioDevice();
Console.ReadLine();
}
}
}
Быстрый тест файла из 44 700 слов (238 КБ) на моей относительно быстрой машине...
- Завершено за 55 секунд
- Сгенерирован 626 МБ WAV-файл
Я искал "Преобразовать текст в речь в Asp.Net" в Google и нашел очень красивую и полезную ссылку:
http://codeprojectdownload.com/asp-net-2/convert-text-into-speech-in-asp-net/
Это также может быть полезно для вас.
Я написал статью об этом в своем блоге: http://weblogs.asp.net/ricardoperes/archive/2014/04/08/speech-synthesis-with-asp-net-and-html5.aspx. Я использовал AJAX и Data URI для отправки голосовых данных между клиентом и сервером.