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
Last-modified: 2005-04-06 (水) 01:37:01 (5367d)