« iVoca でブック(出題用の単語帳)を作るには | メイン | 「英単語」タイピングゲーム iVoca が英語以外にも対応しました »

IE & Javascript で英語をしゃべらせる方法

「(ちょっと設定しないといけないけど)何もインストールしないで、ブラウザに英語を喋らせるサンプル」を作ってみました。IE 限定。
元ネタは「JavaScript などで英語を喋らせる方法」

iVoca おしゃべりモード (IE & Javascript で英語をしゃべらせるサンプル)
http://ivoca.31tools.com/speak_text.html

任意の英文を喋らせてみるサンプルと、英単語タイピングゲーム iVoca を SAPI に対応させて、タイピングした英単語をしゃべってくれる「おしゃべりモード」を試験的に実装したものを紹介しています。

細かい手順やセキュリティに関する注意事項などはリンク先をご覧いただくとして、ここでは仕組みを簡単に説明。

Windows XP や Vista では SAPI (Microsoft Speech API) が標準搭載されていて(Windows 2000 にも入っているとか。手元に環境がないので確認できませんが)、そいつが音声合成を行う ActiveX コンポーネントを持っているので、それをブラウザ上の Javascript から呼び出せれば OK。
なのですが、残念ながらその ActiveX はブラウザから呼べるようになっていません(「実行しても安全とマーク」されていない)。

それでもなんとかして呼び出したいなら、セキュリティの設定の方をいじる必要があります。
具体的には Internet Explorer のセキュリティオプションで「スクリプトを実行しても安全だとマークされていない ActiveX コントロールの初期化とスクリプトの実行」を「有効にする」に設定することで SAPI の ActiveX コンポーネントをブラウザの Javascript から呼び出せるようになります。
もちろん、この設定項目はどこからどう見ても危険。せめて「信頼済みサイト」で行っておくべき。というあたりの手順はサンプルのページを参照のこと。
間違っても「インターネットゾーン」でこの設定を行わないように……!!!!

SAPI を呼び出せるようにしてしまえば、後は簡単。
SAPI の音声合成コンポーネントを取ってきて、その Speak メソッドに発音させたい英文を渡すだけです。

var spkr = new ActiveXObject('SAPI.SpVoice');
spkr.Speak("Hello iVoca!");

サンプルの方では、try ~ catch で囲んで SAPI を呼び出せない場合の手当をしたり、Flash (iVoca のゲーム本体) から呼び出すためにほげほげしたりしてます。

XP と Vista でインストールされている SAPI のバージョンが違っていて、実は Vista (SAPI 5.3) の方が女性の声で音質も良く、発音も自然できれい。合成じゃなくて録音じゃないかというくらい。
XP (SAPI 5.1) のももちろん十分すごいんですが、音質のかなり悪い男性の声、発音もくせのある感じ……。Vista のを聞いた後だと、正直聞くに堪えないと言わざるを得ない。
Vista にしてしまって、「あーなんか一つでもいいから Vista にして良かったと思えることないかなあ。もう何でもいいんだけど……」と日頃嘆いている方には、ぜひ Vista の発音を聞いて欲しいですね!!!
もうほんと、このことだけで Vista にして良かったと思えること請け合いです……気の持ちようによっては。
(ちなみに Vista の女性は "Microsoft Anna"、XP の男性は "Microsoft Sam" というお名前です)。

サンプルのページでは「アメリカ合衆国の50州」を取り上げてみたんですが、こういうのは特に正しい発音を聞きながら勉強したいからピッタリですよね。
あと、サンプルにするのをつい自重してしまったんですが、「ガンダムの機動兵器(型式→英語名)」もかなり強烈にオススメ。想像以上にまともに発音してくれるのでウケます。

iVoca ではユーザさんに単語帳を自分で作ってもらえるのですが、テキストなら誰でも作れるけど、音声はなかなかそういうわけにはいかない。
でも、英文や単語を与えるだけでこれほど正確に発音してくれる SAPI がブラウザから普通に使えるようになれば、ユーザさんが作ってくれた問題の価値が何倍にも増しますし、他にもいろんな利用シーンが考えられて、いろいろとっても楽しそうな想像がふくらむんですが……音声合成だけでもブラウザから「安全に」使えるようにならないかなあ。
実際、発音している間はブラウザや Flash の動作が止まってしまうのさえなんとかなれば、個人的には常用したい。
setTimeout でくるんだり、iframe 内で実行させるようにしてみたり、といくつか試してみたのですが、今のところこれを回避できずにいます。うーん。

トラックバック

このエントリーのトラックバックURL:
http://labs.cybozu.co.jp/cgi-bin/mt-admin/mt-tbp.cgi/2044

この一覧は、次のエントリーを参照しています: IE & Javascript で英語をしゃべらせる方法 :

» 英単語タイピングゲームiVocaのイントロをギターで弾いてみた 送信元 cloned.log
id:cocoitiさんに連れられて9F(自分が勤めているウノウは8F)のディノさんにお邪魔したら、素敵な方々がいらっしゃって楽しく生ビール(サーバーあ... [詳しくはこちら]

コメントを投稿