blog.yujinakayama.me

iTunes AirPlay Control for Alfred

Sep 14th, 2013

Alfred 2 から iTunes の AirPlay スピーカーを操作可能にする Workflow を作りました。

Screenshot

Workflow は Alfred の有償拡張パック Powerpack の一機能なため、Powerpack を購入しておく必要があります。

仕組み

AppleEvent(Open Scripting Architecture)を使って、iTunes から AirPlay スピーカー一覧を取得したり、設定変更をしています。実際には AppleEvent そのものが表に顔を出すことはほぼ無く、AppleEvent を記述するためのスクリプト言語 AppleScript について語られることが多いかと思います。

AppleScript で Mac のアプリケーションを操作するには、操作される側のアプリケーションがその操作のための API を提供している必要があります。「このアプリのこの操作は AppleScript に対応している」とか「AppleScript を使えばこのアプリのあの操作を実行できる」という表現の方が普通かもしれません。各アプリケーションが提供している AppleScript API は、AppleScript Editor(/Applications/Utilities/AppleScript Editor.app)にアプリケーションをドラッグ&ドロップすると閲覧できます。

今回の Alfred の Workflow は、AppleScript ではなく、Ruby から AppleEvent を触るための Scripting Bridge という仕組みを使っています。というのも、今回は iTunes だけでなく Alfred との入出力(ユーザからの入力文字列や処理結果のレスポンス XML 生成)も行う必要があり、その辺りは Ruby の方が断然楽だったので。

AirPlay スピーカーの切り替えって、iTunes ウインドウを表示して AirPlay ボタンをクリックしてスピーカーを選択、という手順ですごく面倒くさくて外部ツールによる切り替えをずっとしたかったんですが、AirPlay の操作はずっと AppleScript 非対応でした。iTunes バージョンアップの度に必死で対応チェックしていたくらい面倒でした。

が、今日久しぶりに Apple Script Editor で iTunes を開いてみたら AirPlay devices の記述があるじゃないですか。という訳で早速 Workflow を書きました。これで iTunes ライフが少し快適になりそうです。どのバージョンから対応したんだろう。