Microsoft Agent 2.0 (класс и инструкция)

Здесь можно найти готовые «кирпичики» — части кода, пригодные для построения более крупных проектов, а также решения различных типовых и не очень задач на VB.

Модератор: Brickgroup

nouyana
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 104
Зарегистрирован: 29.01.2016 (Пт) 17:42

Microsoft Agent 2.0 (класс и инструкция)

Сообщение nouyana » 15.04.2017 (Сб) 15:58

Написал класс для работы с MS Agent. Каждый метод и свойство класса снабжены подробными комментариями. Особо не тестировал - писал чисто из ностальгических соображений. Применять мне его негде. Хотя, в принципе, агента можно использовать и на современных системах. Существуют 32/64 версии агента для Win 8. В десятке обещали обрезать работу, но мне тестировать не на чем. Возможно, и на ней будет работать. На всякий случай вот вам пару ссылок на загрузки необходимых библиотек и описание процесса установки:
Не забываем также, что на диске с Visual Studio 6 в папке COMMON\TOOLS\VB\MSAGENT есть много всего интересного по этой теме. Ну и если кто-нибудь всё же не найдёт необходимую библиотеку - обращайтесь, помогу, чем смогу.

MsAgent.zip
(17.2 Кб) Скачиваний: 257

Файлы:
MSAgent.cls - основной класс, представляющий из себя одного персонажа
Timer.frm - скрытая форма, содержащая таймер, необходимый для работы агента
KeyHook.bas - модержит API-функции, необходимые для отлова горячих клавиш при вводе голосовых команд. Если вы не планируете использовать голосовые команды, его можно не подключать, но тогда нужно удалить вызовы функций SetWindowsHookEx и UnhookWindowsHookEx из модуля MSAgent.cls (события класса Initialize и Terminate).
MSAgentChecking.bas - абсолютно самостоятельный модуль, который можно не подключать. Он содержит функцию AgentIsInstalled, которая проверяет наличие необходимых библиотек на компьютере пользователя.

Краткое руководство:
Перед использованием класса заполните процедуры обработки событий Агента
(сразу после раздела объявлений класса MSAgent.cls), прочтите этот текст и
ознакомьтесь со всеми свойствами и методами класса (они имеют комментарии).

Все свойства и методы объектной модела, за исключением коллекции Commands,
и объектов AudioOutput, SpeechInput реализованы в классе непосредственно,
так как их, на мой взгляд, не много. Коллекция Commands и перечисленные
выше объекты доступны через одноимённые свойства класса.

Метод Get объекта Character в этом классе не реализован, т.к. он у меня
не работал почему-то... Вместо Get предлагается использовать ме-
тоды Play, Speak и Move. Массив имен анимаций для метода Play текущего
персонажа можно получить из массива (свойства) AnimationNames после
вызова метода Load.

В связи с тем, что метод Get не реализован я также удалил обработчики
событий IdleStart, IdleComplete объекта MyAgent. Их можно добавить
стандартным способом.

При вызове метода Listen(True) - вход в режим получения голосовой команды -
язык персонажа меняется на английский (т.к. русских движков SR пока нет).
После распознавания команды срабатывает событие ListenComplete, которое
возвращает язык назад. Однако, если ответом на голосовую команду персонаж
использует метод Speak, то событие ListenComplete ещё не успевает
произойти и язык надо вернуть вручную в обработчике события Command (там
есть пример). Для ввода голосовой команды необходимо нажать горячую клавишу,
которая настраивается в модуле modKeyHook

В связи с тем, что Microsoft Agent выполняет все анимации асинхронно (не
модально), и иногда эти анимации подвисают, я в каждый анимационный метод
добавил вызов процедуры WaitRequestComplete, которая не позволяет анимации
выполняться дольше чем указано в переменной nMaxWaitingTime (устанавлива-
ется в процедуре Class_Initialize или позже через свойство MaxWaitingTime.
См. также процедуру WaitRequestComplete и свойство MaxWaitingTime).
Кроме того, обратите внимание на метод Wait, который позволяет двум персона-
жам разговаривать друг с другом, дожидаясь при этом окончания речи аппонента.

Пример использования:
Код: Выделить всё
'Объявление персонажа лучше производить As Object, если мы планируем проверять
'наличие библиотек через MSAgentChecking.bas перед оператором Set.

Public Merlin As New clsAgent                    'Объявление персонажа (Public,
                                                 'если используем KeyHook.bas,
                                     'да и вообще удобно).
Sub main()
   With Merlin
      .Load "Merlin.acs"                         'Можно без имени файла, а можно
                                                'полный путь.
      .LanguageID = langRussian                  'Язык персонажа
      With .Commands                             'Команды персонажа
         .Add "WhatTime", "Который час?", "vremya" 'в т.ч. голосовые
         .Add "ShowPropertySheet", "Параметры персонажа"
         .Add "ShowCommandsWindow", "Голосовые команды"
      End With
      .Show                                      'Показ персонажа.
      .MoveTo 500, 300                           'Различные анимации.
      .Think "Команда голосом по клавише: F2"    'Не забудьте сообщить пользо-
                                                'вателю о горячей клавише.
                                     'Настр. в модуле modKeyHook
   End With

   'Далее идёт код вашей программы. Не забывайте, что
   'все анимации MS Agent выполняет асинхронно (не модально),
   'поэтому нужно держать какую-нибудь модальную форму открытой.

   Merlin.Hide

EndOfSubMain:
   Set Merlin = Nothing
End Sub

Вернуться в Кирпичный завод

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList