Mac OS X にインストールされている声の一覧を取得する

Mac OS には昔から音声認識とテキスト読み上げを行う機能が備わっていました。Mac OS X の現在、英語だけですが...。Mac OS X 10.5 からは新しい Alex というキャラクターが加わりました。そして、この Alex が非常に滑らかに英文を発話する。英語のサイトを見ているときに発話させてみて、その流暢さを堪能することもしばしば...。

以前にも書いたように整理中のスクリプトファイルを実行しつつ取捨選択をしているのですが、このなかにテキスト読み上げで利用できる Mac OS X にインストールされている声の一覧を取得するスクリプトがありました。問題は、このルーティンが使えなくなっていること。使えないとなると、(困りはしないのですが)困る。一念発起(というものでもないですが)して原因と対策を探ってみました。

このルーティンは単純に /System/Library/Speech/Voices にあるファイル一覧を取得して拡張子を削除しているものですが...いつの頃からか、読み上げに利用できる声のファイル形式が変わっていたのですね。それぞれの声がプラグインになっている...。

声の一覧が欲しいという要望は少ないながらもあるようで、Web を探してみるとありました。それ専用のアプリケーション(AppleScript で操作できる)があったりと。中でも気を引いたのが PyObjC を使ったもの。なるほどね、と思いました。

Mac OS X 10.5 からは RubyCocoa や PyObjC が標準で入っています。これを使って Cocoa の機能を利用すればいいのか。NSSpeechSynthesizer の availableVoices を使えば、声の一覧が取得できます。

#!/usr/bin/python
# vim: fileencoding=utf-8

from AppKit import NSSpeechSynthesizer

voices = NSSpeechSynthesizer.availableVoices()
voices_attrs = [ NSSpeechSynthesizer.attributesForVoice_(v) for v in voices ]
for v in voices_attrs: print v['VoiceName'].encode('utf-8')

こんな Python スクリプトファイルを用意して、Terminal 等で実行すれば、声の一覧が取得できます。

$ python voices.py 
Agnes
Albert
Alex
Bad News
Bahh
Bells
Boing
Bruce
Bubbles
Cellos
Deranged
Fred
Good News
Hysterical
Junior
Kathy
Pipe Organ
Princess
Ralph
Trinoids
Vicki
Victoria
Whisper
Zarvox

AppleScript の do shell script を使って上記をのスクリプトを実行し、改行で分割すれば OK。...。...。...。...。...いや、待て。これが答えか?AppleScript 使いを自認し、AppleScript の使い方や Tips を紹介するサイトが PyObjC に頼っていいのか?いや、駄目だ。それは私の矜持が許さない。

Script Editor で開く

tell application "Automator" -- Xcode でも可
    set voices_list to call method "availableVoices" of class "NSSpeechSynthesizer"
    set voices_names to {}
    repeat with this_voice in voices_list
        set voice_attrs to call method "attributesForVoice:" of class "NSSpeechSynthesizer" with parameters {this_voice}
        set end of voices_names to |VoiceName| of voice_attrs
    end repeat
    voices_names
end tell

これでこそ AppleScript。Automator を使えば、Cocoa の機能を利用できる(Mac OS X 10.6 ではおそらく動かないのでは?)。まぁ...PyObjC や RubyCocoa を使うのが最も現実解ですね。で、それを使ったサンプルスクリプトを。実行するとそれぞれの声がデモテキストを使って自己紹介をします。

0 件のコメント :

コメントを投稿