Как заставить ваше приложение говорить

воскресенье, 20 марта 2011, Александр Краковецкий

Как вам должно быть известно, в Windows Vista / 7 есть возможности преобразования текста в речь (Text-to-Speech). Я решил немного поиграться с Speech API. В этой небольшой статье рассмотрим, как добавить эту возможность в свое приложение.

Итак, создадим новое приложение (это может быть как консольное так и Windows Forms приложение).

Первым этапом является добавление библиотеки Microsoft Speech Object Library (sapi.dll), которая находится в папке %windir%\System32\Speech\Common.

alt text

Следующий этап - написание такого кода:

SpVoice voice = new SpVoiceClass();
voice.Speak(richTextBox1.Text, SpeechVoiceSpeakFlags.SVSFDefault);

Что еще можно изменить?

  • скорость произношения - Rate - от -10 до 10, 0 по умолчанию;
  • громкость Volume - от 0 до 100;
  • голоса (рассмотрим их детальнее дальше).

Для того, чтобы получить список доступных на машине голосов, необходимо вызвать метод GetVoices:

foreach (ISpeechObjectToken Token in speech.GetVoices(string.Empty, string.Empty)) { var currentVoiceDescription = Token.GetDescription(49); }

Например, в моей системе был установлен только один голос - женский английский :)

Кроме того, вы можете записать текст в wav файл таким образом:

try
{
   SaveFileDialog sfd = new SaveFileDialog();
   sfd.Filter = "All files (*.*)|*.*|wav files (*.wav)|*.wav";
   sfd.Title = "Save to a wave file";
   sfd.FilterIndex = 2;
   sfd.RestoreDirectory = true;

   if (sfd.ShowDialog() == DialogResult.OK)
   {
     SpeechStreamFileMode SpFileMode = 
            SpeechStreamFileMode.SSFMCreateForWrite;
     SpFileStream SpFileStream = new SpFileStream();
     SpFileStream.Open(sfd.FileName, SpFileMode, false);
     speech.AudioOutputStream = SpFileStream;
     speech.Rate = speechRate;
     speech.Volume = volume;
     speech.Speak(tbspeech.Text, SpeechVoiceSpeakFlags.SVSFlagsAsync);
     speech.WaitUntilDone(Timeout.Infinite);
     SpFileStream.Close();
   }
}
catch
{
  MessageBox.Show("There is some error in converting to Wav file.");
}

Как вы видите, все достаточно просто.

В .NET 4.0 появился новый API? с помощью которого можно делать интересные вещи. Например, озвучку можно сделать таким образом:

Добавить библиотеку System.Speech.dll:

alt text

Добавить пространство имен System.Speech.Synthesis и написать такой код:

SpeechSynthesizer s = new SpeechSynthesizer();
s.SelectVoiceByHints(VoiceGender.Male, VoiceAge.Senior);
s.Speak(richTextBox1.Text);

Также доступны различные настройки голоса и возраста, которые доступны через соответствующие перечисления.

Конечно, это только вершина айсберга - для того, чтобы сделать что-то более серьезное, нужно глубоко погружаться в мир speech recognition.

Дополнительные материалы:

P.S. А вот и пример визуализации мимики:

Компании из статьи


Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии