Microsoft Agent を MFC から使う方法(の備忘録)

* 準備

まずは Microsoft Agent の準備が必要よね。

まずはダウンロードページに行く。

http://www.microsoft.com/msagent/downloads/user.asp

** Microsoft Agent core components
http://www.microsoft.com/msagent/downloads/user.asp#core

にある

http://activex.microsoft.com/activex/controls/agent2/MSagent.exe

をダウンロード&インストール。

** Microsoft Agent character files
http://www.microsoft.com/msagent/downloads/user.asp#character

から、好きなキャラクタをダウンロード&インストール。

** Text-to-speech engines
http://www.microsoft.com/msagent/downloads/user.asp#tts

から、必要な音声再生エンジンをダウンロード&インストール。

以上の3つの手順でOK。

Windows2000/XP は Agent core components は必要ないらしい。
(Windows2000 で試してみたら必要だったけど…)


* サンプル

MFC で Agent を使うサンプルが下記 URL にある。

http://www.microsoft.com/msagent/dev/code/vstudio.asp#MFC

** 説明

Agent の ActiveX コントロールがダイアログに張り付いている。

こいつは CAgentCtlEx オブジェクトで、こいつを起点に Agent の様々な操作をするらしい。

:CAgentCtlEx:http://msdn.microsoft.com/library/en-us/msagent/pacontrol_6lyk.asp?frame=true

* ユーザにわかりやすいキャラクタの変更方法

 CAgentCtlEx m_Agent;
として話を進める。

** キャラクタのロード、表示

CAgentCtlEx::GetCharacters()::Load メソッドでキャラクタをロードできる。

 m_Agent.GetCharacters().Load( "default", COleVariant() );
と書くだけでキャラクタがロードできるので実に簡単。

ただ、これだけではタスクトレイに入ったままで表示されないので、次のコードで表示させる。
 m_Agent.GetCharacters().Character( "default" ).Show( COleVariant() );

** キャラクタのロード方法

キャラクタのロード方法だが、どうやら2種類あるようで、
「デフォルトキャラクタを使う方法」と「ファイル名/URLを指定して使う方法」があるようだ。

前節では「デフォルトキャラクタを使う方法」を使った。これは、Load メソッドの第2引数を
指定しないことで行っている。「引数を指定しない」ためには、COleVariant() を渡せばいい。

また、既にインストールされているキャラクタを使う場合もこちらの方法に該当する。
例えば Genie さんをデフォルトキャラクタとして使いたければ

 m_Agent.GetCharacters().Load( "default", COleVariant() );

とすればいい。


 Load メソッドの型
 agent.Characters.Load "CharacterID", Provider 

「ファイル名/URLを指定して使う方法」は、第2引数に ACS ファイルか URL を書けばいいらしい。
URL は VB スクリプトなどで Agent を使う場合に指定する(と思う)。

 m_Agent.GetCharacters().Load ("Genie", "http://agent.microsoft.com/characters/v2/genie/genie.acf");


** Unload を忘れずに

Load したら Unload しないとリソースを消費しつくしてしまうかもよ(^^;

** キャラクタの変更

というわけで本題。

キャラクタの名前が分かっているなら、Load の第一引数に名前を指定すればいい。
が、どのキャラクタがインストールされているかを調べるのは困難だと思う
(Windows/msagent/chars を調べてもいいだろうけどそれが適切なわけはないだろう…)。

そんなときのために、キャラクタを選択するためのウィンドウが用意されている。

 m_Agent.ShowDefaultCharacterProperties( COleVariant(), COleVariant() );

引数には表示位置を指定する。指定なし(つまり COleVariant() )だとデフォルト位置に表示される。

既にデフォルトキャラクタが表示されている状態ならば、OK ボタンを押した瞬間にキャラクタが変化する。


* Speak

PSS で使いたいので、Speak させたい。

** 発音

とりあえず発音させるには

 m_Agent.GetCharacters().Character("default").Speak( COleVariant("hello"), COleVariant() );

で「はろー」って言ってくれる。

** 言語の選択

CAgentCtlCharacterEx::SetLanguageID() を使う。

これだけで言語は変化するが、再生エンジンも変更したいだろう。

そういうときのために CAgentCtlCharacterEx::SetTTSModeID() がある。

列挙したいけどその方法は分からない(不可能?)



* その他の備忘録

** デフォルトキャラクタ選択ウィンドウと TTS Mode ID の組み合わせに関する不具合

http://www.microsoft.com/msagent/support/dev/miscellany.asp#changedefaultchar

いわく、デフォルトキャラクタの TTS Mode ID を変更後に ShowDefaultCharacterProperties() すると
OS が吹っ飛ぶらしい(^^; 但し、Win2k/XP 以外の OS で。

TTS Mode ID は(まだ調べていないがおそらく)TextToSpeak で使う言語設定に関わってくると思う。

これを回避するには
>you should either not allow the user to change the default character after you 
>change the default character’s TTS Mode ID, 
>or do not use the default character in your application or Web page. 

らしい。つまり、「TTS Mode ID の変更後にデフォルトキャラクタを変えない」または
「デフォルトキャラクタを使わない」ことらしい。後者は解決策じゃねー(笑)

たぶん TTS Mode ID を変更したらアプリケーションの再起動を要求すればいいんだろう。
今度試すべし。


* このページの内容について

このページに書かれている内容は、竹内が自分自身のための備忘録として書いたものであり、
その内容については一切保証しません。

質問等は下記にお願いします。

[[#rcomment]]
- 2003-06-29 (Sun) 01:39:08 ''[[竹内]]'' : てすと書き込み



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS