Как написать Говорящую программу?
Все время, когда я пользовался разными "говорящими"
программами, меня не покидала мысль, а что если попробовать
написать подобную программу самому?
Немного поискав, я нашел несколько способов
это сделать. И что самое интересное простую говорящую программу
написать очень легко!
ПРИМЕР 1 (SAPI 4)
Для этого нам понадобится:
1)Установленный Delphi, или С++ Builder.
2)Установленный Speech
API 4 (а в XP - пятый - не то, скачать можно на сайтах
программ клиентов)
3)Установленный TTS Engine (Text to Speesh Engine - Сэм,
Дигало, и т.п. в XP уже стоит, но плохого качества)
Будем использовать объект Microsoft Direct
text-to-speech в средах разработки Dephi или С++ Builder.
Итак:
Грузим Dephi, закрываем проект.
Component -> Import ActiveX Controll...
Выбираем в списке Microsoft Direct Text-to-Speech (Version
1.0). В окошке Class name: должно появиться DirectSS. Запомните
страницу палитры, куда будет помещен новый компонент, обычно
ActiveX.
Жмем Install..., Ок (там можно создать отдельный пакет,
задав уникальное имя, а можно и не создавать)
Yes, После завершения компиляции будет выдано сообщение
The component pallete has been updated... будет указано
имя вновь установленного компонента: DirectSS
Готово! Теперь Close All, сохранить изменения, Создаем новое
приложение (не консольное, конечно, application)
Перетаскиваем кнопку, ищем страницу ActiveX, перетаскиваем
"губки" (DirectSS)
В обработчике Button1Click пишем: DirectSS1.Speak('Проверка
связи Все нормально'); А для С++ перед кавычками нужно ставить
'L', это означает, что текст будет в двухбайтовой кодировке
(Unicode), объекты автоматизации (ActiveX) воспринимают
только ее. Вот так: DirectSS1->Speak(L"Проверка
связи Все нормально");
Готово
Дальше все зависит от вашего желания, и опыта.
(Советую посмотреть help к DirectSS1->)
Например:
DirectSS1.Select(1); // вибрали 1-ый синт.
Label1.Caption:=DirectSS1.Speaker(1); // Узнали имя 1-ого
синт...
Также см. свойства CountEngines, Speed, Pitch; методы AudioPause(),
AudioResume() и AudioReset(), последний - "стоп".
Потом, можете глянуть на события: OnAudioStop - текст произнесен,
OnVisual - произнесена очередная фонема, и происходит перерисовка
рта.
Что получилось в конце у меня вы можете посмотреть
тут. (не судите строго
:) мой порыв несколько угас когда я осознал обьем работ.....
и оценил их целисобразность)
При создании примера использовались
материалы с сайта: http://maxreader.narod.ru/prog.htm
ПРИМЕР 2 (SAPI 4 и SAPI 5)
На сайте BORLAND DEVELOPER NETWORK есть серия
ЗАМЕЧАТЕЛЬНЫХ статей по использованию SAPI 4 и SAPI 5 в
Delphi!!! С подробными примерами и коментариями!!!
(Правда на английском языке, но материал замечательный).
Смотрите статью: Speech
Synthesis & Speech Recognition
Содержание статьи:
Introduction
Speech Technology
Text-To-Speech Synthesis (TTS)
Speech Recognition (SR)
Speaker Profiles
The Previous State Of Affairs
The Current State Of Affairs
SAPI 4
SAPI 5.1
Using SAPI 4 In Delphi Applications
Using SAPI 5.1 In Delphi Applications
Summary
Further Reading
Acknowledgements
About Brian Long
Сайт Автора статей: Brian Long (http://www.blong.com/)
Рекомендую также зайти:
http://subritto.boom.ru/msagent/speechapi.html
Пример на Delphi
http://yan.net.ru/default.asp?showid=106&action=showinfo
Пример на Delphi
http://govorunplus.narod.ru
Сайт программы "Говорун"
http://wtwsoft.narod.ru/
Библиотека SAPI DLL
Сразу хочу охладить ваш пыл. Для написания
таких программ как Говорилка Спикер и т.д. этого не достаточно.
Объясню почему: любой TTS Engine для качественного синтеза
речи, требует использование словаря исправления произношения,
а это довольно непростой алгоритм. Начав заниматься написанием
профессионально "говорящей" программы вы поймете,
что это не так просто как кажется на первый взгляд. Но пользуясь
этими примерами вы можете легко добавить голосовые функции
вашим любимым продуктам.