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

* 準備
* 準備 [#fb1d0867]

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

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

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

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

にある

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

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

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

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

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

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

以上の3つの手順でOK。

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


* サンプル
* サンプル [#d5b457fb]

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

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

** 説明
** 説明 [#u707a6f3]

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

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

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

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

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

** キャラクタのロード、表示
** キャラクタのロード、表示 [#w495ca94]

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

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

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

** キャラクタのロード方法
** キャラクタのロード方法 [#c0162061]

キャラクタのロード方法だが、どうやら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 を忘れずに
** Unload を忘れずに [#qce2dfbe]

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

** キャラクタの変更
** キャラクタの変更 [#p431d2ef]

というわけで本題。

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

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

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

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

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


* Speak
* Speak [#sbe7642a]

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

** 発音
** 発音 [#z03c2800]

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

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

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

** 言語の選択
** 言語の選択 [#n5771bec]

CAgentCtlCharacterEx::SetLanguageID() を使う。

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

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

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



* その他の備忘録
* その他の備忘録 [#m15319a3]

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

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 を変更したらアプリケーションの再起動を要求すればいいんだろう。
今度試すべし。


* このページの内容について
* このページの内容について [#h2eb8d2a]

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

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

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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS