- 追加された行はこの色です。
- 削除された行はこの色です。
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 ''[[竹内]]'' : てすと書き込み