SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

MS Agentを使った文章読み上げソフト

MS Agentを使った文章読み上げソフト(前編)

フリーのエンジンを利用して、文章を音声で読み上げるソフトを作成


ダウンロード read_text.hta (1.4 KB)

Microsoft Agentの利用1-オブジェクトの埋め込みと初期化

 次はいよいよ、Microsoft Agentの利用になります。

 HTMLファイル(拡張子が「.hta」のファイルもHTMLファイルの一種)の中でMicrosoft Agentを利用する際には、「HTMLのタグとしてMicrosoft Agentのオブジェクトを宣言」と「スクリプト内でMicrosoft Agentを初期化」を行う必要があります。

補足説明
 拡張子が「.hta」のファイルは、HTML Applications(HTMLアプリケーション)と呼ばれるものです。このHTML Applicationsも、HTMLファイルの一種になります。以下のMicrosoft社のWebページ「HTML Applications 概要」も参考にしてください。

 それではMicrosoft Agentのオブジェクト宣言と、Microsoft Agentの初期化について説明していきます。

1. HTMLのタグとしてMicrosoft Agentのオブジェクトを宣言

 この宣言はHTMLファイル内に、以下の行を追加すれば完了します。

HTMLのタグとしてMicrosoft Agentのオブジェクトを宣言
<object
  id="AgentControl"
  classid="CLSID:D45FD31B-5C6E-11D1-9EC1-00C04FD7081F"
  codebase="#VERSION=2,0,0,0">
</object>

 少しだけ解説を行います。idとして記述されているAgentControlは、以降のJavaScript内で参照される「オブジェクトの名前」になります。classidは、人間向けではない、プログラム向けの記述です。上記の通り、CLSID:D45FD31B-5C6E-11D1-9EC1-00C04FD7081Fをコピー&ペーストしてください。codebaseに関しては、VERSION=2,0,0,0という書いてある通り、バージョンを表します。

2. スクリプト内でのMicrosoft Agentの初期化

 オブジェクトの宣言の後は、プログラム内でのMicrosoft Agentの初期化です。この初期化は、JavaScriptのプログラムとして記述します。

補足説明
 JavaScriptではなく、VBScriptで記述することもできます。しかしここでは、HTMLファイルになじみの深いJavaScriptを、プログラム言語として採用することにします。

 以下のソースコードでは、「エージェントの初期化」と「表示位置の調整」を行っています。

 ここでは、プログラム部分のみを示します。実際の「read_text.hta」への組み込みについては、次の『「read_text.hta」への組み込み』の項で示します。また、以下のプログラムで示されている「エージェント初期化」関数InitMA()は、bodyタグのonLoad属性で実行されることになります。

スクリプト内でのMicrosoft Agentの初期化
  //==== ユーザー変数の初期化 =======================================
  // 
  var msAgntX = 100;    // Microsoft Agentの表示X位置
  var msAgntY = 200;    // Microsoft Agentの表示Y位置

  //==== 共有変数の初期化 ===========================================
  // 
  var agent;                // エージェント
  var agentName = "genie";  // エージェント名

//===================================================================
  //========================================
  // 
  //  エージェント初期化
  // 
  //========================================
  //  引数 :なし
  //  返り値:なし
  //  仕様 :エージェントを初期化する。

function InitMA () {
  //==== エージェント初期化 =========================================
  // 
  // エージェントを初期化
  AgentControl.Connected = true;

  // キャラクターを読み込み
  AgentControl.Characters.load( agentName, agentName + ".acs" );

  // キャラクターを初期化
  agent = AgentControl.Characters.character( agentName );
  agent.LanguageID = 0x0411;        // 言語ID(日本語)
  agent.Balloon.FontCharSet = 128;  // 吹き出しフォント
                                    //(日本語2バイト文字)

  //==== 表示位置を調整 =============================================
  // 
  agent.moveto( msAgntX, msAgntY );  // 表示位置
}

 まずは、それぞれのユーザー変数について説明します。

 msAgntXmsAgntYの2つは、Microsoft Agentの表示位置を指定する変数です。この2つの変数は、「エージェント初期化」関数InitMA()内の「表示位置を調整」の部分に記述されたmovetoメソッドで利用されます。movetoメソッドは、デスクトップ上のX座標とY座標を指定して、エージェントの表示位置を移動するメソッドです。

 agent変数は、本ソフト内でエージェントを操作する際に参照されるオブジェクトになります。前述のmovetoメソッドのように、agent.moveto( X座標, Y座標 )として、実際の操作を行っていきます。このagent変数は、次章以降の関数でも利用します。agentName変数は、呼び出すエージェントの名前です。今回は「genie」を使うので、genieと指定しています。このagentName変数は、この章のエージェント初期化以外では利用されません。

 次に、エージェントの初期化を行うInitMA()関数について説明します。

 InitMA()内の、「エージェント初期化」の部分を見てください。AgentControl.Connected = true;AgentControl.Characters.load( agentName, agentName + ".acs" );の2行で、まずはエージェントを初期化してキャラクターを読み込んでいます。そして、次のagent = AgentControl.Characters.character( agentName );で、agentオブジェクトを初期化して、以降の操作の準備を行っています。

 AgentControlは、最初にobjectタグのid属性で指定したオブジェクトの名前です。このオブジェクトを利用して、上記の初期化は行われています。これ以降は、agent変数に格納したオブジェクトに対して各種操作を行っていくことになります。

 さて、次の初期化作業は日本語化です。Microsoft Agentはもともと英語のソフトですので、日本語に設定を変更しなければなりません。この設定の変更を、続く2行で行います。エージェントの言語を示すagent.LanguageIDに、日本語の言語IDである0x0411を代入します。続いて、エージェントの吹き出しに表示されるフォントの文字セットを表わすagent.Balloon.FontCharSetに、日本語2バイト文字を示す数値128を代入します。

Microsoft Agentを日本語化
項目プロパティ日本語化のための値
言語IDLanguageID0x0411
吹き出しのフォント文字セットBalloon.FontCharSet128

 このLanguageIDFontCharSetの値にどういったものがあるかは、Microsoft社の以下のWebページで確認できます。必要に応じて参照してください。

 以上で、Microsoft Agentの初期化は終了です。

3. 「read_text.hta」への組み込み

 では、「HTMLのタグとしてMicrosoft Agentのオブジェクトを宣言」と「スクリプト内でのMicrosoft Agentの初期化」を、実際の「read_text.hta」内に組み込んでいくことにします。先ほど書いたように、「エージェント初期化」関数InitMA()は、bodyタグのonLoad属性に記述することにします。

「read_text.hta」への組み込み
<body onload="InitMA()">

まとめ

 ここまでをまとめたソースコードです。

<html>
  <head>
    <title>文章読み上げ</title>

    <script language="JavaScript">
      //==== ユーザー変数の初期化 =====================================
      // 
      var msAgntX = 100;  // Microsoft Agentの表示X位置
      var msAgntY = 200;  // Microsoft Agentの表示Y位置

      //==== 共有変数の初期化 =========================================
      // 
      var agent;                // エージェント
      var agentName = "genie";  // エージェント名

    //=================================================================
      //========================================
      // 
      //  エージェント初期化
      // 
      //========================================
      //  引数 :なし
      //  返り値:なし
      //  仕様 :エージェントを初期化する。

    function InitMA () {
      //==== エージェント初期化 =======================================
      // 
      // エージェントを初期化
      AgentControl.Connected = true;

      // キャラクターを読み込み
      AgentControl.Characters.load( agentName, agentName + ".acs" );

      // キャラクターを初期化
      agent = AgentControl.Characters.character( agentName );
      agent.LanguageID = 0x0411;        // 言語ID(日本語)
      agent.Balloon.FontCharSet = 128;  // 吹き出しフォント
                                      // (日本語2バイト文字)

      //==== 表示位置を調整 ===========================================
      // 
      agent.moveto( msAgntX, msAgntY );    // 表示位置
    }

    // ★★★以降のソースコードはここに追加していく★★★

    //=================================================================
    </script>

  </head>
  <body onload="InitMA()">

    <form name="f">
      <textarea name="ta" rows=20 cols=80>
      Microsoft Agentを使った文章読み上げソフト
      </textarea>
      <br>
      <br>
      <input type="button" value="クリップボードから文字列取得" 
          onClick="GetTxt()">
      <input type="button" value="テキストエリアを読み上げ" 
          onClick="SpeakTxt()">
      <input type="button" value="読み上げを停止" 
          onClick="StopSpeak()">
      <br>
      <br>
      <input type="button" value="エージェントの設定ダイアログを開く" 
          onClick="OpenOption()">
    </form>

    <object
        id="AgentControl"
        classid="CLSID:D45FD31B-5C6E-11D1-9EC1-00C04FD7081F"
        codebase="#VERSION=2,0,0,0">
    </object>

  </body>
</html>

今後の流れ

 以降、各ボタンに対応した関数を作成していきます。この関数は、scriptタグ内に追加していくこととします。次回の記事では、この各関数のみを示し、解説を行っていきます。そして、最後の「まとめ」の章で、すべての関数を組み込んだソースコードを掲載します。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
MS Agentを使った文章読み上げソフト連載記事一覧
この記事の著者

柳井 政和(ヤナイ マサカズ)

クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/867 2007/01/30 09:55

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー