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