WWDC 2014が終わってそろそろひと月……「秋」に備え準備を着々と進めているところです。OS Xも大変化というほどではありませんが、iCloud Driveの導入など着実に進化しています。当コラムでもYosemite関連企画を計画していますので、ご期待ください。

さて、今回は「say」について。OS XにおけるTTS(Text To Speech)のフロントエンドという役割だが、Siriの存在もあってか、最近では影の薄さが否めない。あまり知られていないであろうその機能を、Yosemiteリリース前という話題が少ないこの時期を利用して紹介してしまおう、というわけだ。

それでも「say」はなくならない

利用時の気恥ずかしさは変わらないものの、いまやiOSに不可欠の機能となった「Siri」。次のiOS 8では、ホームボタンの長押しなしに声をかければ起動できるようになり(要電源接続)、区切らずに話しかけることができる「ストリーミング音声認識」が追加、流れている音楽の曲名をその場で調べるサービス「Shazam」と連携が可能になるなど、着々と進歩を遂げている。

そのSiriだが、次のYosemiteでもOS Xには導入されないようだ。すでに音声入力機能は備えているだけに、Appleのポリシーなのだろうが、どうにも不完全燃焼感は残る。

発声を担うTTSの機能も、大きな変化を見せていない。OS Xには、Cocoaアプリから呼び出すスピーチ機能のほかに、AppleScriptの「say」コマンド、Terminalから実行する「say」コマンドが用意されているが、ここしばらく目立った改良は行われていない。声の種類が追加されたりイントネーションが自然になったりという改良は行われているが、認識精度や語いなどサーバサイドの機能向上が著しいSiriと比べると、クライアントとしての変化幅は大きくないのだ。

レガシーとみなした機能は容赦なく削るAppleのこと、「say」もそのクチか? と結論づけてしまいそうだが、さにあらず。Siriも「say」も使用するのは同じ音声合成エンジン、「say」を取り去ったところで大勢に影響はない。機能強化は行われないかもしれないが目立たず残る、と考えるのが妥当だろう。

多くのCocoaアプリが対応している読み上げ機能も、人間の声を再現しているのはsayコマンドやsiriと同じ音声合成エンジンだ

工夫すれば「say」で「sing」できる!

その変化に乏しいTTSだが、声の種類によって機能差があることはあまり知られていない。たとえば、Terminalから以下のコマンドラインを実行するとき、pitchの値を0~127の範囲で調整すれば音の高さを変えることができるが、声が「Otoya」のとき(Using "Otoya")は値を変えても変化しない。ピッチコントロール可能な声は、AgnesやAlexなど一部に限られるのだ。

$ osascript -e 'say "Wow" pitch 50 using "Agnes"'

VoiceOverユーティリティを使えば、音量やピッチを調整したときの声をシミュレートできる

AppleScriptの「say」とUNIXコマンドの「say」にも違いがある。前掲のコマンド実行例でosascriptコマンド(TerminalからAppleScriptを実行するためのフロントエンド)を利用しているのは、UNIXコマンドの「say」にピッチコントロール用のオプションがないからだ。

ピッチコントロールを行うには、AppelScriptの「say」コマンドで「pitch」オプションを使うしかない。だからMacに"歌わせる"ためには、AppleScriptファイルを作成するしかない。作り込んでいない即席モノ(しかもコマンドを列挙しただけ)だが、以下のリストどおり「AppleScript エディタ」に入力して実行すれば、Macがあの歌を歌うはずだ。ピッチの値は60が「ド(C)」、MIDIノートに準拠しているので、ぜひ他の歌にも挑戦してほしい。

say "Sir" pitch 60 using "Cellos"
say "E" pitch 62 using "Cellos"
say "Tar" pitch 64 using "Cellos"
say "Sir" pitch 60 using "Cellos"
say "E" pitch 62 using "Cellos"
say "Tar" pitch 64 using "Cellos"
say "Chew" pitch 67 using "Cellos"
say "Rip" pitch 64 using "Cellos"
say "Pu" pitch 62 using "Cellos"
say "No" pitch 60 using "Cellos"
say "Her" pitch 62 using "Cellos"
say "Ner" pitch 64 using "Cellos"
say "Gar" pitch 62 using "Cellos"

リストをAppleScriptエディタにコピー&ペーストし、実行ボタンをクリックすると……

ところで、UNIXコマンドの「say」には、読み上げ速度の調整やポーズを挿入するためのオプションが用意されている。歌う必要なし、ひたすら実務でKyokoさんやOtoyaくんに貢献してほしい、という向きはこちらを駆使するといいだろう。

$ say -v Otoya "[[rate 400]]生麦生米生卵"
Kyoko/Otoyaで使える内部コマンド
[[rate 数値]] 読み上げ速度を変更(数値は0~65535)
[[slnc 数値]] ポーズを挿入(数値は0.001秒単位)
[[char LTRL] アルファベットをそのまま読み上げる(初期値=NORM)
[[nmbr LTRL]] 数値をそのまま読み上げる(初期値=NORM)