クリップボードから文字列を取得
最後に、ソフトとしての実用性を上げるために、クリップボードから文字列を取得する機能を実装します。この部分はMicrosoft Agentとは関係ありませんが、簡単な記述で機能追加を行うことができますので実装しておきます。
以下、プログラムのソースコードを示します。この部分は、[クリップボードから文字列取得]ボタンの、onClick属性で指定してあるGetTxt()関数の実装になります。
//=================================================================== //======================================== // // テキストの読み込み // //======================================== // 引数 :なし(クリップボードより取得) // 返り値:なし // 仕様 :テキストをクリップボードより読み込み、 // テキストエリアに表示する。 function GetTxt () { f.ta.value = window.clipboardData.getData( "Text" ); }
フォームfのテキストエリアtaの文字列value(f.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ページの読み上げ」などにも、この機能は威力を発揮します。簡単なプログラムで、自分専用の文章読み上げソフトを作ることができるので、皆さんも用途に合わせたプログラムを開発してみてはいかがでしょうか。いつも目で見ているパソコンの世界を、少しだけ耳で聞いてみるのも楽しいと思います。
参考資料
- Microsoft Agent home page - Microsoft Agentのホームページ
- Microsoft Platform SDK - Microsoft Agent Start Page - MSDNのMicrosoft Agentに関するプログラム仕様書
- Microsoft Agent - Character Object Methods - メソッドの一覧
