LoginSignup
3
1

macOS の音声 Good News の復活と、キッチンタイマー tir バージョンアップ

Last updated at Posted at 2017-10-20

Good News を復活する

多分 Sierra からだと思うのだが、say コマンドで指定できるボイスから「威風堂々」のメロディーで歌い上げてくれる Good News がなくなった。これがないと、コマンドラインから使うキッチンタイマーコマンド tir のゴージャスオプション -G が使えない。

実用的には困らないので、そのままにしてあったのだが、使えないオプションがあるのはどうも居心地が悪いと考えていたところ、復活する方法があることがわかった。

システム環境設定の「アクセシビリティ」から「スピーチ」を選んで、「システムの声」から「カスタマイズ」を選択すると、インストールされてない音声をダウンロードすることができた。

システム環境設定

tir バージョンアップ

さて、これでオプションを外さなくてもよくなった。しかしどうも音声データも以前のものとは若干違うようで、そのままでは塩梅が悪い。tir は、指定した時間が経つと "Tea is ready" と喋ってくれるコマンドだ。カップ麺を作る時には

% tir 3min Ramen

と実行すれば、3分経つと "Ramen is ready" と教えてくれる。ターミナルが開いていれば秒速で実行できる。そのゴージャスバージョンのショートカットが -GR オプションで、これを使うために先の Good News が必要になる。しかし、Tea と Ramen では単語の長さが違うのでメロディーにのらなくなってしまうのだ。どちらかに合わせると、もう一方がずれる。

というわけで、実に面倒だが指定された単語の音節数を数えて、それによってメッセージの形式を変えるようにした。実装はいい加減で、含まれている母音の数を数えているだけ。ただ cake みたいに最後に発音しない(っぽい)母音は削除してから数える。bash なので、awk で頑張る。

bash define awk_vowelcount <<'EOF' { gsub(/[bcdfgkmnpstvwyz]e( |$)/, " "); for (vowel=0; match(tolower($0), /ey|y[aeiou]*|[aeiou]+/); vowel++) { $0=substr($0, RSTART + RLENGTH) } print vowel } EOF syllable() { echo "$1" | awk "$awk_vowelcount" }
もっとマシなやり方があると思うので、いい考えがあれば教えて欲しい。

まあ、でも不自由しないくらいの精度で動くようになったので、このくらいで満足としておこう。とりあえず、こんな例を試してみた。これからの季節に合わせて鍋焼きにも対応。

  • 1音節
    • Tea
  • 2音節
    • Ramen, Udon, Curry, Pe-young, Cup Noodle
  • 3音節
    • Ki Tsu Nee
  • 4音節
    • Yakisoba, Nabeyaki
  • 5音節
    • Ah Kai Ki Tsu Nee

iTunes の処理

気がつくと、こんな方がいらっしゃったので、iTunes が立ち上がっているかどうかをチェックするようにした。そういえば、自分のマシンではいつも動いているので気にしていなかったのでした。

ついでに、Darwin ではない場合には諸々の機能が無効になるようにしたので、別の OS でも動くには動くんじゃないかと思う。

tir は、github.com/kaz-utashiro/tir からどうぞ。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1