Как заставить ваше приложение говорить
Как вам должно быть известно, в Windows Vista / 7 есть возможности преобразования текста в речь (Text-to-Speech). Я решил немного поиграться с Speech API. В этой небольшой статье рассмотрим, как добавить эту возможность в свое приложение.
Итак, создадим новое приложение (это может быть как консольное так и Windows Forms приложение).
Первым этапом является добавление библиотеки Microsoft Speech Object Library (sapi.dll), которая находится в папке %windir%\System32\Speech\Common.
Следующий этап - написание такого кода:
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:
Добавить пространство имен System.Speech.Synthesis и написать такой код:
SpeechSynthesizer s = new SpeechSynthesizer(); s.SelectVoiceByHints(VoiceGender.Male, VoiceAge.Senior); s.Speak(richTextBox1.Text);
Также доступны различные настройки голоса и возраста, которые доступны через соответствующие перечисления.
Конечно, это только вершина айсберга - для того, чтобы сделать что-то более серьезное, нужно глубоко погружаться в мир speech recognition.
Дополнительные материалы:
- How To: Teach Your Apps To Speak With System.Speech.SpeechSynthesizer
- System.Speech
- Если бы приложение могло говорить…
- Exploring the SpVoice class of MS SAPI 5.1 to use the various available features for TTS
- speech @ microsoft
- Speech Technologies
- Microsoft Speech API
P.S. А вот и пример визуализации мимики:
Компании из статьи
Microsoft Украина | Украинское подразделение компании Microsoft. |