日本時間の10月5日、iPhoneに関するイベントが開催されるそうです(関連記事)。OS Xユーザとしては、「iCloud」に関する発表も気になるところですね。そして、Tim Cook新CEOの講演も。楽しみに待ちましょう!
さて、今回は「Text-To-Speech(TTS)」について。Lionでは、日本語を含む22の言語でテキストを読み上げることが可能になったが、盛んに活用されているかといえば……そうでもないようだ。ここでは、日本語音声「Kyoko」を例に、ちょっとしたカスタマイズ法を紹介してみよう。これで彼女を見る目が変わるかも!?
京子でも響子でもない「Kyoko」さん
文字列を解析して読み上げる機能は旧Mac OSの時代から存在するが、一時取り除かれていたり、日本語テキストのサポートを取りやめたり、不遇の時代が長く続いた。Lionで日本語音声セット「Kyoko」(以下、Kyokoさん)が追加されたことは、PC-6601(オッサンなら覚えているはず)以来の日本語TTS愛好家にとってまさに朗報といえる。
Kyokoさんは、Lionのインストール直後は存在しない。テキスト環境設定の「スピーチ」ペインにある「テキスト読み上げ」タブで、システムの声として「Kyoko」を選択してはじめてAppleのサーバからダウンロードされるのだ。展開後の約800MBという容量を考えればやむをえないが、これもKyokoさんをマイナーな存在にとどめている一因だろう。
ダウンロードが完了すると、データ一式は/System/Library/Speech/Voicesダイレクトりに「Kyoko.SpeechVoice」としてインストールされる。形状はバンドルであり、「.app」同様に「Resources」などのサブディレクトリを内包しているが、通常は実行形式のファイルが置かれる「Mac OS」ディレクトリはダミー――「Kyoko.SpeechVoice/Contents/Mac OS/voice」は空のファイル――となっている。バンドルの形をとってはいるが、基本的には音声データの集合体だ。
肝心の音声データは、Resourcesディレクトリに「PCMWave」として収録されている。一見すると拡張子すらないプレインなデータファイルだが、果たしてその実体は未圧縮のtarアーカイブで、「tar tf PCMWave」とすれば内容物を確認できる。同様の構造はKyokoさんとともに追加されたPaolo(伊語)やYannick(独語)にも見られるが、従来からある声(Agnes、Fredなど)に含まれるPCMWaveはプレインなデータファイルとなっている。
Kyokoさんがローマ字を日本語風に読み上げる
「PCMWave」に含まれるファイル(*.qng/*.uqe)の書式は不明だが、「hfre_ehyrf.qng」については、ちょっとした応用方法を発見した。まずは以下のコマンドラインをTerminalから実行し、適当な作業用ディレクトリ(ここでは~/Desktop/temp)に、KyokoさんのPCMWaveをコピー&展開してほしい。
$ cd /System/Library/Speech/Voices/Kyoko.SpeechVoice/Contents/Resources/
$ cp PCMWave ~/Desktop/temp/
$ cd ~/Desktop/temp/
$ tar xf PCMWave
$ rm PCMWave
PCMWaveを展開すると、そのなかに「hfre_ehyrf.qng」というファイルを発見できるはず。このファイル、どうやら「ローマ字の日本語風読み上げ」に使えるようなのだ。たとえば、Kyokoさんに「ういんどうず」と発音してもらいたい場合、sayコマンドの引数は「Windows」ではなく「ウインドウズ」としなくてはならないため、ローマ字まじりの文章を読ませることが難しい。
しかし、この「hfre_ehyrf.qng」を眺めていたところ、「/SMS\/MMS/ --> "SMS MMS"」という記述を発見! 試しにsayコマンドで「SMS/MMS」を読ませると、日本語風に読み上げてくれる。文字列を入れ替えて「MMS/SMS」とすると、意味不明の発音となるので、hfre_ehyrf.qngでの定義が効いていることは確実だ。「Wi-Fi」や「Yahoo」が正しく読み上げられるのも、このファイルの働きがあってこそらしい。
そこで、以下の行を「hfre_ehyrf.qng」にテキストエディタで書き加え(文字コードはUTF-8)、再びtarアーカイブにまとめてKyoko.SpeechVoiceへ書き戻してみた。結果は……バッチリ、「OS X」を「おーえすてん」と読み上げることに成功した。やったゼ、Kyokoさん!
/\bOS X\b/ --> " オーエステン "
$ tar cf PCMWave
$ tar cf PCMWave *.qng *.uqe
$ cd /System/Library/Speech/Voices/Kyoko.SpeechVoice/Contents/Resources/
$ sudo mv PCMWave PCMWave.old
$ sudo cp ~/Desktop/Voice/PCMWave .
この「hfre_ehyrf.qng」の書式だが、実はよくわからない。変換対象とする文字列の定義を「/」で囲み、右横に読み上げる内容を記述すればいいことはわかったが、「\b」タグの有無がどのような意味を持つのか(とりあえずCase-sensitiveとは関係ないようだ)、他のタグが存在するかどうかも不明だ。Kyokoさんの日本語をもっと流暢にすべく、さらなる調査を続けたいと思う。