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 ''[[竹内]]'' : てすと書き込み