Windowsでもsayコマンドを

Twitterのタイムラインを監視してキーワードにマッチしたらGrowlするRubyスクリプト(2) - 今日覚えたことWindowsでも動かそうとして奮闘したんだけど、結局ダメだった。meowはRubyCocoaが無いと動かないので。

ただ、その作業の中でちょっと面白そうなものを作ったので、とりあえずそれだけここに載せとく。

sayコマンド

Macにはsayコマンドってのがあって、好きな言葉をMacにしゃべらせることができる。コンソールで、

$ say hello

ってやるとMacが「ハロー」ってしゃべってくれる。音声合成だ。

Windowsでもsayコマンドを

このsayコマンドをWindowsでも使えるようにしたい。デフォルトではそんなコマンドは無いらしいけど、音声合成エンジン自体は入ってる。XPだとSamだったかな。VistaにはAnnaってのが入ってる。Windowsのエディションや、Officeの有無などでもエンジンは違ってくるかも。

Windows音声合成エンジンは、「ナレータ」っていう機能で利用する。ナレータを使うと、Windowsの画面上のボタンやメニューなどを読み上げてくれるので、目の不自由な方や画面が利用できない環境でもWindowsが使えるようになる(らしい)。

そしてこのエンジンはCOMから利用できる。なので、JavaScriptで書いてみた。

var args = [];
for(var i = 0; i < WScript.Arguments.length; i++)
  args.push(WScript.Arguments.Item(i));

var sapi = new ActiveXObject('SAPI.SpVoice');
sapi.Speak(args.join(' '));

思ったより簡単だった。このコードをsay.jsというファイル名で適当なところに保存しておく。

使い方は簡単。コマンドプロンプト

C:\Users\nacookan>say hello

のようにして使う。

比較

ちょっと比較してみる。前者がMac標準のsayコマンドで、後者が今回作ったWindows用sayコマンド(VistaのAnnaを使用)。

say windows

Download
Download

say mac os x

Download
Download

Macの方は「X」を「テン」って読める。さすがだ。その他「iPod」「iPhone」なんかも、Macだけが正しく読めた。

say wii

Download
Download

これもMacは正しく読める。たまたまかも知れないけど。造語や固有名詞は難しいよね。

say dir

Download
Download

「dir」を「ディレクトリー」って読めるのは、さすがWindowsといったところ。

Javaではどうか

そういえばJavaにも音声合成があったような気がするけど、どうなんだろ。