Automatorで作ったワークフローの処理が完了したら音を鳴らす

Automator でワークフローを作っていて、処理が完了したときにサウンドが欲しいなぁ、なんて思ってました(Growl だと表示されるまで時間かかるし)。でも、Automator のアクションに「指定したサウンドを鳴らす」みたいなアクションって無いんですよね。シェルスクリプトで echo -e \a なんてやっても裏でやってるから鳴らないだろうし。なんかいい方法ないかな〜と思ってたら /usr/bin/afplay があるじゃないですか!

afplay(Audio File Play)を使えば AIFF 形式のファイルなんかを再生できるみたいです。いいね!


次はサウンドの選択です。Finder でファイル操作をしたときのサウンドが欲しいだけど、/System/Library/Sounds には入ってない。locate コマンドでローカルのデータベースから .aiff のファイルを検索してファイル名を出力させつつ1個ずつ調べていく。

bash
for f in $(locate ".aiff")
do
    echo "$f"
    afplay "$f"
done

で、見つけたのが

/Applications/iChat.app/Contents/Resources/File Transfer Complete.aiff

でした。iChat のサウンドなんですね。iPhone SDK を入れていれば iPhone のサウンドも使えるんですが、他のマシンにサービスをコピーするときに支障が出るのでやめておきました。


さて、この afplay コマンドをワークフローの最後に配置するわけですが、他のワークフローでも使いたいのでライブラリに登録しておきました。これでどのワークフローでも使いまわしができます(アクションの名前変えられるの知らなかったわ。超便利www)


スクリプトはこんな感じ。これでファイルコピーと同じサウンドを鳴らせます。インストールが完了したときの音は iPhoto に収録されてるみたいです。

bash
afplay "/Applications/iChat.app/Contents/Resources/File Transfer Complete.aiff"


個人で使うなら「ワークフローを実行」アクションを使うとメンテが楽なんだけど、これまたマシンが違うと支障が出るし、そもそもファイル名が変わっちゃうと使えないのでパス。シェルスクリプトは変数にも登録できるんだけど、何故か音が2回鳴る現象が起きたのでパス(謎)。


これでフォルダ除外フィルタをお気に入りに登録出来るから Automator がますます使い易くなるぞー!!!


公開中のサンプルスクリプトは徐々にサウンド有りに更新していきます。

http://code.google.com/p/mattintosh4-devel/downloads/list

Trackback