スポンサーリンク
2014年11月17日
Alfredのパワーパックを購入してから、ワークフローで遊んでいます。
クリップボード拡張目的でパワーパックを購入しましたが、ワークフロー機能こそAlfredの真骨頂ですね。
一日に何回もあるわけではありませんが、イヤホン・ヘッドホンとスピーカーを切り換えることがあります。
システム環境設定を開かなくても、オプションキーを押しながらメニューにあるボリューム調整アイコンをクリックするだけで、切り換えることができます。
これでも十分に簡単ですが、いちいちマウスを使うのが面倒であったり、デバイス名を見ながら「あれ?どっちがイヤホンだったっけ?」と思うこともしばしば。
オーディオデバイスが一つなら、イヤホンの抜き差しで切り替わるので問題になりませんけどね。
最初はAppleScriptで書こうかなと思いましたが、すでに二つ存在していました。
一つ目はPerl、二つ目はAppleScriptで書かれているようです。どちらも同じ動きをするので、自分好みのプログラム言語を選べば良いかと思います。
拡張子が.alfredworkflow
のファイルをダウンロードして、それをダブルクリックするとAlfredに追加されます。
どちらのワークフローも最初のScript Filterでサウンドデバイスを取得してリストアップする処理をしています。
選択されたデバイス名を次のプロセスに渡し、そこでデバイスの切り替えが実行されます。処理が終わると、Post Notificationにより、通知センターで切り替わったことが表示されます。
このままでも十分ですが、マウスでの選択がキーボードでの選択になっただけです。
このように動作するように、二つ目のワークフローを参考にして作ることにしました。
Keywordは、Alfredでの検索に利用されます。Titleは検索結果に表示されます。
on alfred_script(q) set device to "USB Sound Device " -- 1 tell application "System Preferences" reveal anchor "output" of pane id "com.apple.preference.sound" end tell tell application "System Events" to tell process "System Preferences" repeat with i from 1 to the count of rows of table 1 of scroll area 1 of tab group 1 of window 1 if exists (text field 1 of row i of table 1 of scroll area 1 of tab group 1 of window 1) then set deviceselected to the value of text field 1 of row i of table 1 of scroll area 1 of tab group 1 of window 1 -- display dialog deviceselected if deviceselected is equal to device then set selected of row i of table 1 of scroll area 1 of tab group 1 of window 1 to true end if end if end repeat end tell tell application "System Preferences" quit end tell set volume output volume 1 -- num/100% set theMessage to "Speaker" end alfred_script
Cache compiled AppleScriptは、コンパイル済みのAppleScriptをキャッシュするので高速動作する代わりにメモリを余計に使いますよということなので、お好みで。
処理としては、
set device to ...
で指定したデバイス名と一致するまでループさせる。という処理です。
set volume ...
は、個人的にボリュームを最小値にしたかっただけなので、なくても大丈夫です。
set theMessage ...
で、次のプロセスで表示させたい文字列を渡せます。
軽くはまったポイントは、デバイス名(ソースの1)です。サウンドパネルで見ると、USB Sound Device
なのですが、実際にはUSB Sound Device______
と後ろにスペースが入っています。display dialog
などで確認しながら試しましょう。
これらをイヤホン用とスピーカー用の二つ作成します。
このプロセスは通知センターの表示を行います。一つ前のset theMessage ...
に渡された文字列が、{query}で受け取れます。
なんでもできる!は大げさですが、以下のプログラム言語が利用できるので、いろいろと楽しめそうです。