すべての単語のサウンドデータを保持するのは事実上不可能なので、検索結果の表示にはどうしてもText-To-Speechの機能が必要になる。Mac OS X上のText-To-Speech (以下、TTS)についてまとめた。

Cocoaには、NSSpeechSynthesizerというクラスが用意されている。使い方は非常に簡単。通常通り、alloc, initしたあとで、そのインスタンスに読ませたいストリングを与えるだけ。

[speechSynth startSpeakingString: string];

標準に用意されている声のリストが, +availableVoicesというクラスメソッドでとれるので、望みのものをインスタンスに -setVoiceすればよい。

この辺のことは、Cocoa Programming For Mac OS X に詳しい。delegateを使って、発声が終わった時点で特定の操作をする(例えば、ボタンを再度enableにするとか)といった方法について触れている。

別の方法としては、NSTextViewの-startSpeaking:(id) senderもある。(ドキュメントには書かれていないが、実は NSApplicationにも speakStringというメソッドがあるらしい。 [NSApp speakString:@”foo”]; でつかえる。)

この、簡単に使えるが、実はCarbonのほうのSpeechSynthesisフレームワークをラップしているだけで、機能が制限されている。発声のスピードをかえたりしたいときには、Carbonの関数を使う必要があるようだ。詳しくは、こちら、あるいはSpeechSynthesis.hを参照してほしい。

しかし、このフレームワークそのものにも重大な問題がある。単純に言うと、英語にしか対応していないのだ。上記のspeakString, startSpeakingStringなどの関数が呼ばれると、入力された文字列は内部の辞書を参照して、音素(Phoneme)の表示に変換され、それが実際のspeech synthesizerに与えられて音に変換される。問題なのは、この音素表示がIPAではなく、英語を対象とした表示になっている点だ(参照)。これでは、世界の言語を表すことはできない。

Appleの標準のTTSを使うのはあきらめて、ほかのシステムを探す必要がありそうだ。IPAの発音表記をすでにDB内に保持している分、TTSシステムのタスクとしてはシンプルになりそうなのだが…


No Responses to “Mac OS X上でのText-To-Speech”  

  1. No Comments

Leave a Reply