Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MS Agent не говорит. Как заставить?

2.1K
24 декабря 2004 года
pnvnik
40 / / 26.04.2004
Создаем форму, на ней TextBox и две кнопки. В меню Project->Components
выбираем Microsoft Agent Control 2.0. На панеле инструментов появится мужичок в шляпе (а-ля Джеймс Бонд), добовляем его на форму в любое
место. При выполнении он невидим.

ВОПРОС: При нажатии на кнопку Command1 появится "Ученый" и по идее должен произнести "Привет программистам!", но не говорит!
В чем засада?!!!
Комп Windows2000Professional SP4, установлен
Office2000 со всеми помощниками. Голосовой движок text-to-speach в Windows2000Professional стоит по умолчанию.

Option Explicit

Dim Genie As IAgentCtlCharacterEx
Const DATAPATH = "E:\Program Files\Microsoft Office\Office\genius.acs"


Private Sub Command2_Click()
Set Genie = Nothing
Unload Form1
End Sub

Private Sub Form_Load()
Agent1.Characters.Load "Genie", DATAPATH
Set Genie = Agent1.Characters("Genie")
'Genie.LanguageID = &H409 'это индетификатор англ. языка,
'поэтому он закоментирован
Text1.Text = "Привет, программистам!"
End Sub

Private Sub Command1_Click()
Genie.Show
Genie.Speak Text1.Text
Genie.Hide
End Sub
258
24 декабря 2004 года
SergeySV
1.5K / / 19.03.2003
вот что тебе нужно: http://www.hardline.ru/1/10/2178/
2.1K
24 декабря 2004 года
pnvnik
40 / / 26.04.2004
Статью я эту читал, но говорит у меня только Merlin, а остальные молчат как рыбы!
258
24 декабря 2004 года
SergeySV
1.5K / / 19.03.2003
Так там кажись для каждого на text to speech качать
648
24 декабря 2004 года
Tiraspolsky
220 / / 23.07.2003
Я делал так:
agent1.LanguageID = &H419
'мужской голос
agent1.TTSModeID = "{06377F81-D48E-11D1-B17B-0020AFED142E}"
'женский голос
agent1.TTSModeID = "{06377F80-D48E-11d1-B17B-0020AFED142E}"

и говорят все чудесно
Можешь также программно проверять IAgentCtlRequest.Number
Если IAgentCtlRequest.Number=-2147220734 - Программа не сообщила звуковой плате, какой формат звукового файла используется.
Do
DoEvents
Loop Until IAgentCtlRequest.Status = 0 Or IAgentCtlRequest.Number = -2147220734
2.1K
24 декабря 2004 года
pnvnik
40 / / 26.04.2004
Цитата:
Originally posted by SergeySV
Так там кажись для каждого на text to speech качать


Думаю, что на озвучку текста можно забить: уж больно качество страдает - слушать такое не захочешь:(. Гораздо интереснее сопоставить действию персонажа воспроизведение звукового файла. Но как это сделать синхронно?!

258
24 декабря 2004 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by pnvnik

Думаю, что на озвучку текста можно забить: уж больно качество страдает - слушать такое не захочешь:(. Гораздо интереснее сопоставить действию персонажа воспроизведение звукового файла. Но как это сделать синхронно?!



В чем заключается проблема синхронности? как начинать в нужный момент или как обрывать воспроизведение когда действие закончено?

2.1K
24 декабря 2004 года
pnvnik
40 / / 26.04.2004
Попробовал - кошка из офиса не говорит (из офисных зверьков вообще никто не говорит). В чем может быть дело? Merlin при этом говорит...
258
24 декабря 2004 года
SergeySV
1.5K / / 19.03.2003
показывай весь код, а то телепаты пока на другой форум ушли
648
14 января 2005 года
Tiraspolsky
220 / / 23.07.2003
Цитата:
Originally posted by SergeySV
показывай весь код, а то телепаты пока на другой форум ушли



Показываю фрагмент кода для двух агентов Marine и Merlin, другие я не использовал.

Код:
Public agent As IAgentCtl, anime   As IAgentCtlCharacterEx, agentIsLoaded As Boolean
Public isAgent As Boolean, anime_man As Boolean, WinDir As String

Public Sub Main()    
    Set agent = CreateObject("Agent.Control.2")
    WinDir = String(255, 0)
    j = GetWindowsDirectory(WinDir, 255)
    WinDir = Left$(WinDir, j)
    If Right$(WinDir, 1) <> "\" Then WinDir = WinDir & "\"
    agent.Connected = True
    If ExistFile(WinDir & "msagent\chars\marine.acs") Then
            loadMarine
    ElseIf ExistFile(WinDir & "msagent\chars\merlin.acs") Then
            loadMerlin
    Else
            isAgent = False
    End If
End Sub

Public Sub loadMarine()
    On Error GoTo erMarine
    agent.Characters.Load "agent", WinDir & "msagent\chars\marine.acs"
    anime_man = False
    Set anime = agent.Characters("agent")
    isAgent = True
    anime.LanguageID = &H419
    anime.AutoPopupMenu = False
    anime.TTSModeID = "{06377F80-D48E-11d1-B17B-0020AFED142E}"
    agentIsLoaded = True
    Exit Sub
erMarine:
    isAgent = False
End Sub

Public Sub loadMerlin()
    On Error GoTo erMerlin
    agent.Characters.Load "agent", WinDir & "msagent\chars\merlin.acs"
    anime_man = True
    Set anime = agent.Characters("agent")
    isAgent = True
    anime.LanguageID = &H419
    anime.AutoPopupMenu = False
    anime.TTSModeID = "{06377F81-D48E-11D1-B17B-0020AFED142E}"
    agentIsLoaded = True
    Exit Sub
erMerlin:
    isAgent = False
End Sub

Private Sub Form_Unload(Cancel As Integer)
    If isAgent Then
        anime.Show True
        anime.Play "Wave"
        waitFor anime.Speak "Желаю удачи"
    End If
End Sub

Public Sub waitFor(r As IAgentCtlRequest)
    Do
        DoEvents
    Loop Until r.Status = 0 Or r.Number = -2147220734
    Set r = Nothing
End Sub
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог