Использование Microsoft Agent
|
Автор: Матвеев Игорь
"Взять высушенное сердце жабы, залить отваром корней можжевельника,
добавить пепел перьев черного петуха, двух скорпионов и зуб дракона и
выпаривать после захода солнца до первого крика совы."
(Старинный рецепт приготовления тонера для лазерного принтера)
|
Всякий, кто хоть раз работал в MS Office, знаком с помощниками.
По умолчанию это забавная скрепка, которая то и дело стучит по стеклу монитора,
дает советы и спрашивает, например, нужно ли сохранить изменения документа при
закрытии программы. MS Office использует свои собственные
помощники, но существует возможность
встраивать подобных помощников и в ваши приложения. Причем эти помощники могут
не только давать советы в виде текста, но и читать их, т.е. синтезировать речь.
Доступ ко всем этим возможностям дает Microsoft Agent (кстати, с его помощью можно не только
синтезировать речь, но и распознавать речевые команды, однако в рамках данной
статьи мы не затронем эту тему).
Для дальнейших экспериментов вам прежде всего
необходимо установить себе MS Agent-a, думаю, найти его можно
на
http://www.microsoft.com/workshop/prog/agent/agentdl.htm или на дисках
VisualStudio (там есть еще три персонажа и редактор
персонажей в придачу),- дистрибутив имеет размер
~350 kb. А также характер - это файл анимационного
персонажа, который и будет виден на экране. Это файлы с расширением *.acs (офисовские
не подходят). Характер можно взять из переводчика Magic Gooddy, с дисков
VisualStudio или других.
Итак, далее подразумевается, что у вас уже
установлен MS Agent и есть по крайней мере один
персонаж. Теперь вам нужно установить ActiveX
компонент агента. В Delphi
выберите пункт "Компоненты->Импорт компонента
ActiveX" и найдите в списке
что-то вроде "Microsoft Agent Control 2.0". После
установки в палитре компонентов на вкладке ActiveX
появится новый компонент,- через него мы и будем управлять помощником.
Установите на форму компонент
Agent1, Edit1,
Memo1 и две кнопки Button1 и
Button2. По нажатию на первую кнопку будет загружаться
MS Agent и персонаж, а на вторую кнопку мы будем
вешать различные команды для агента.
В поле Edit1.Text
введите путь к файлу характера, а в Memo1.Text - то,
что должен будет говорить помощник (должно быть на английском языке, вообще-то
можно и на русском, но я пока не знаю как).
В обработчик нажатия первой кнопки впишите следующий
код:
Agent1.Characters.Load('MyAgent', Edit1.Text);
Далее обращаться к этому персонажу (а их
может быть несколько) нужно так:
Agent1.Characters['MyAgent']. ...
Самые распространенные команды персонажу перечислены ниже:
- Для того чтобы показать персонажа нужно вызвать метод Show() со
значением Fast = True,
чтобы он появился мгновенно или False - чтобы
персонаж появился с анимацией. Закрыть персонажа можно с помощью метода
Hide().
- Персонаж может с анимацией передвигаться в указанную вами позицию -
метод MoveTo(), первые два параметра - координаты назначения, третий -
скорость анимации (в районе 1000..1500 будет нормально).
- Персонаж может обратить внимание пользователя на определенную часть
экрана - метод GestureAt(), параметры - координата экрана, на которую должен
указать персонаж.
- Чтобы персонаж произнес какую-то фразу нужно вызвать метод
Speak(), первый параметр - строка, которую персонаж
показывает в всплывающем облаке и читает, если второй параметр равен пустой
строке. Второй параметр может содержать путь к *.wav
или *.lwv звуку, который должен произвести персонаж,
при этом персонаж обычно шевелит губами в такт звуку.
Сделаем, чтобы наш персонаж сначала появился в углу экрана,
переехал в противоположный угол, затем поприветствовал нас, прочитал содержимое
Memo и скрылся. Впишите в обработчик нажатия второй клавиши
следующее:
{ Установка начальных координат }
Agent1.Characters['MyAgent'].Left := 0;
Agent1.Characters['MyAgent'].Top := 0;
{ Появление персонажа с анимацией }
Agent1.Characters['MyAgent'].Show(False);
{ Переезжаем в противоположный угол }
Agent1.Characters['MyAgent'].MoveTo(Screen.WorkAreaWidth-Agent1.Characters['MyAgent'].Width,
Screen.WorkAreaHeight-Agent1.Characters['MyAgent'].Height, 1500);
{ Приветствие }
Agent1.Characters['MyAgent'].Play('Greet');
{ Читаем содержимое Memo1 }
Agent1.Characters['MyAgent'].Speak(Memo1.Text, '');
{ Скрываем персонажа с анимацией }
Agent1.Characters['MyAgent'].Hide(False);
В результате многочисленных опытов не удалось выяснить только как читать текст
по-русски.
Однако, использование помощников даже с английской речью может поднять популярность ваших
продуктов (особенно если они изначально ориентированны для иностранного потребителя).
В результате множества испытаний не было найдено каких-то ошибок при использовании
персонажей - MS Agent сам загружается когда он нужен и сам выгружается когда он уже не нужен.
А небольшой размер дистрибутива MS Agent-а позволяет "таскать" его с собой и устанавливать
при инсталляции своих проектов.
|