現時点では完成していないが、何をすべきかは見えてきたと思う。
Fire Voxで使っているMacTTSのソースコードは公開されている。これを自分でLeopardのXcodeを使ってビルドができた。
Objective-Cでコードが書かれているのではっきりとは理解できないが、全コード眺めてみると一カ所スピーチコマンドを使っている場所を見つけた。ここでいいか調べるために、文字列が格納された変数のかわりに@"Hello"と文字列定数を代入したものでXPIを作ってみたら、見事にHelloと連呼してくれた。
それではと、これを「こんにちわ」で置き換えてみたら、何も言わなくなった。文字列のエンコードが間違っているのかもしれないが、それでも一切しゃべってくれないのはおかしい。おそらく日本語文字列を与えたぐらいでは日本語は簡単にしゃべってくれないのだろう。詳しい実験はやっていないが。
先述のドキュメントトーカには日本語音声を使ったプログラミングができるようにSDKが公開されている。そしてその中の文書には日本語で発声させるための独自のコマンド群が記載されている。きっとこちらを使わないとまともに日本語ではしゃべってくれないのではないかと思われる。
つまり、Cocoaのシンセサイザに読ませる部分をドキュメントトーカで読ませるようなコードに書き直せば、Macでも日本語でしゃべってくれるようになるのではないかと思う。いままで一度もObjective-Cのプログラミングはしたことがないから、今すぐにはできないけれど、サンプルをいじって研究しよう。
それから、前回の投稿で問題点をちょっと指摘していたが、そのことについて。
まずキー操作。これはおそらくショートカットキーが衝突しているからだろう。別なキーに割り当てれば、何とかなる問題だ。例えば、よく使うだろう「A」は「Z」あたりに置き換えればいい。また音声が僕の環境でtakashiの声に固定されていた問題は、Fire Voxはシンセサイザを利用するとき標準音声で読み上げるようにしてあって、それが僕の環境だとtakashiの声になっていただけのようだ。Cocoaの音声合成にはちゃんと音声を変える命令もあるのでデータとして文字列と一緒に音声名を送ってやれば、これにも好きな声に切り替えてくれる機能がつけられるのではないかと思う。
それは今後のこととして、今できることとしてすくなくとも英語のページをまともにしゃべってくれるようにちょっと改造をしてみた。つまり%付きのエンコード文字列を読み飛ばすようにしてみた。
変更の仕方は簡単だった。どうしてここを調べなかったのだろうというぐらいのとこ。方法を後でまとめる(Macの「システムの声」の変え方)
ついで本家の英語版Fire VoxのMacTTSをこの改造を施し置き換えたものも作ってみた。Leopardを使っている人は上のものよりこちらが重宝すると思う。英語版のFirefoxに本家のFire Voxをインストールしていて、英語のページばかり見ている人には必要のないものだけど、英語のページは滅多に見ないけど英語読みはさせたいが日頃の日本語のページでパーセントパーセント言われてはうるさくて困るという人には便利な改造版だと思う。
ダウンロード先:
-http://et-dev.main.jp/index.php?Fire%20Vox
この場合は、英語(米国)版Firefoxをインストールした後、Locale Switcherアドオン、日本語言語パックja-JP-mac、そしてQuickRestartアドオンを入れると快適に使えるだろう(この文のリンクは執筆時最新のものだが、リンク先が変更される可能性がある)。
※Windowsのように各国語Firefoxを上書きインストールで言語パックの登録はできないようだ。