SHOEISHA iD

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

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

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

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

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

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

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

クリップボードから文字列を取得

 最後に、ソフトとしての実用性を上げるために、クリップボードから文字列を取得する機能を実装します。この部分はMicrosoft Agentとは関係ありませんが、簡単な記述で機能追加を行うことができますので実装しておきます。

 以下、プログラムのソースコードを示します。この部分は、[クリップボードから文字列取得]ボタンの、onClick属性で指定してあるGetTxt()関数の実装になります。

クリップボードから文字列を取得
//===================================================================
  //========================================
  // 
  //  テキストの読み込み
  // 
  //========================================
  //  引数 :なし(クリップボードより取得)
  //  返り値:なし
  //  仕様 :テキストをクリップボードより読み込み、
  //          テキストエリアに表示する。

function GetTxt () {
  f.ta.value = window.clipboardData.getData( "Text" );
}

 フォームfのテキストエリアtaの文字列valuef.ta.value)に、クリップボード内の文字列を代入しています。クリップボード内の文字列は、window.clipboardData.getData( "Text" )で取得できます。

 このボタンの追加で文章読み上げソフトは、ぐっと実用的になりました。以上で、予定していた機能をすべて組み込み終わりました。

まとめ(完成プログラム)

 文章読み上げソフトのプログラミングは終了しました。最後に、すべての関数を組み込んだソースコードの全文を掲載いたします。非常にシンプルな内容であることが分かると思います。

文章読み上げソフト 全文
<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 ); // 表示位置
    }

    //===============================================================
      //========================================
      // 
      //  文字列を読み上げ
      // 
      //========================================
      //  引数 :なし
      //  返り値:なし
      //  仕様 :テキストエリアの文章を取得して読み上げる。

    function SpeakTxt () {
      //==== 変数の初期化 ===========================================
      // 
      var i;           // カウンター用変数
      var speakText;   // 読み上げ用文字列
      var speakArray;  // 読み上げ用文字列配列

      //==== 配列作成 ===============================================
      // 
      speakText = f.ta.value;
      speakText = speakText.replace( "」", "」。" );
      speakArray = speakText.split( "。" );

      //==== 読み上げ ===============================================
      // 
      agent.Show();  // 表示
      for ( i = 0; i < speakArray.length; i ++ ) {
        if ( speakArray[i] == "" ) { continue; }  // 空なので飛ばす
        agent.Speak( speakArray[i] );             // 読み上げる
      }
      agent.Hide();  // 隠す
    }

    //===============================================================
      //========================================
      // 
      //  停止
      // 
      //========================================
      //  引数 :なし
      //  返り値:なし
      //  仕様 :読み上げを停止する。

    function StopSpeak () {
      agent.Stop();  // 停止する
      agent.Hide();  // 隠す
    }

    //===============================================================
      //========================================
      // 
      //  設定
      // 
      //========================================
      //  引数 :なし
      //  返り値:なし
      //  仕様 :プロパティシート(設定ダイアログ)を開く。

    function OpenOption () {
      AgentControl.PropertySheet.Visible = 1;
    }

    //===============================================================
      //========================================
      // 
      //  テキストの読み込み
      // 
      //========================================
      //  引数 :なし(クリップボードより取得)
      //  返り値:なし
      //  仕様 :テキストをクリップボードより読み込み、
      //          テキストエリアに表示する。

    function GetTxt () {
      f.ta.value = window.clipboardData.getData( "Text" );
    }

    //===============================================================
    </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>

おわりに

 Microsoft Agentの音声化機能は非常に便利な機能です。しかし、世間ではまったくといっていいほど使われていないのが実情です。私はこの機能を使い、原稿の読み上げ確認などに活用しています。

 パソコンの画面は、紙と違って誤字脱字を発見しにくいものです。パソコンのディスプレイを利用した場合、どうしても文字の拾い読みになってしまいます。そのため、「文章をじっくりと確認する」という作業には不向きです。しかし、このような音声化機能を併用することで、目で追っている時には見落としがちな間違いを効率よく発見することができます。また、思い込みで誤用していた単語などに気付かされることもあります。

 このような「原稿の確認」だけでなく、「ニュースの読み上げ」や「Webページの読み上げ」などにも、この機能は威力を発揮します。簡単なプログラムで、自分専用の文章読み上げソフトを作ることができるので、皆さんも用途に合わせたプログラムを開発してみてはいかがでしょうか。いつも目で見ているパソコンの世界を、少しだけ耳で聞いてみるのも楽しいと思います。

参考資料

  1. Microsoft Agent home page - Microsoft Agentのホームページ
  2. Microsoft Platform SDK - Microsoft Agent Start Page - MSDNのMicrosoft Agentに関するプログラム仕様書
  3. Microsoft Agent - Character Object Methods - メソッドの一覧

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

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

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/870 2007/01/30 00:00

イベント

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

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

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

メールバックナンバー