2008年05月07日

SleipnirでSAPI5合成音声を使うスクリプト

僕は、ブラウザはFirefox2も使っているが、メインはSleipnirのほう。
Sleipnirも、Firefox2とは違うがスクリプトを登録していろいろ機能を追加していける。ActiveXも使えるので、合成音声も簡単に扱えるようになる。DOMを使ってページ内の情報にも触れられそうなのでCLiCk,Speakがやっていることぐらいなら、いろいろできそうだ。

以下簡単な実験

■選択領域を英語の文章として読み上げてくれるスクリプト

次のスクリプトをjsという拡張子のついた名前で、例えば、「選択範囲を英語として読み上げる.js」で保存し、Sleipnirがインストールされているフォルダにある「script」フォルダにコピーする。

どこにインストールされているか分からなければ、デスクトップのSleipnirのショートカットアイコンのプロパティを開いて、「リンク先を探す」ボタンを押してエクスプローラのウィンドウを開かせて、ツールバーにある「上へ」ボタンを押せばいい。

var pnir     = new ActiveXObject("Sleipnir.API");
var id = pnir.GetDocumentID(pnir.ActiveIndex);
var document = pnir.GetDocumentObject(id);
var window = pnir.GetWindowObject(id);
var voice = new ActiveXObject('SAPI.SpVoice');
if (document && voice) {
var text = document.selection.createRange().text;
if ( text ) {
voice.Speak( "<lang langid='409'>" + text + "</lang>" , 0 );
}
}
voice = null;
window = null;
document = null;
id = null;
pnir = null;


既にSleipnirが起動しているならば、「ツール」メニューの「スクリプト」サブメニューにある「スクリプト再読込み」を選ぶと反映される。そしてページ内の領域を選択し、同じメニューにある「選択範囲を英語として読み上げる」を選べば、実行される。



もうちょっと便利に使えるようにしてみよう。Sleipnirは領域を選択すると、その左下か右下に一の字のアイコンが現れる。これにマウスを重ねると、虫眼鏡のアイコンが出てきて、さらにそれをクリックすると検索などの領域選択後に便利なコマンドリストが現れる。このリストへのスクリプトの登録の仕方を次に示す。

最新版のSleipnirをいれておいて、プラグインUserAction Extensionを入れておく。

組み込みスクリプトなので、上記スクリプトの一行目を次のように書き換える。
var pnir     = sleipnir.API;


Sleipnirを終了しておいて、先ほどのスクリプトファイルをSleipnirをインストールしたフォルダのpluginフォルダのscriptsフォルダにコピーする。そしてSleipnirを起動する。

「ツール」メニューの「Sleipnirオプション」を開いて、「ユーザーインターフェース」の「メニューエディタ」を選んで、「メニュー」リストの中から「SmartSearch」を選び、追加ボタンを押して「メニュー項目を追加」を選ぶ、「メニューエディタ」ダイアログが出てくるので、名前欄に「英語として読む」、アクション欄のメニューから、先にフォルダにコピーしたファイル名を選ぶ。選んだら「追加」ボタンを押してメニューエディタダイアログを閉じ、オプションダイアログの「OK」ボタンを押せば、登録完了。

これで、選択領域をスマートメニューを使って、読み上げることができる。


応用次第でいろいろ遊べるだろう。上記のスクリプトの409を他の番号にすると、他の言語で読み上げてくれる。もちろんその言語のSAPI5対応エンジンがパソコンに入っている必要があるけれど。他の言語で読ませたいときは、番号だけを変えて同じようなファイルを複数登録すればいい。

407 ドイツ語
409 英語
40a スペイン語
40c フランス語
410 イタリア語
411 日本語
412 韓国語
419 ロシア語
804 中国語


その他の言語および地域との組み合わせに使うlangidの番号は次のページにある。
Locale Identifier Constants and Strings


posted by takayan at 19:18 | Comment(0) | TrackBack(0) | 音声合成 | このブログの読者になる | 更新情報をチェックする
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。