iMacで純正キーボードを使わずに東プレの Realforce 86U という生産終了したUSBキーボードを繋いで使っているわけですが、これだとmacOS標準の機能ではファンクションキーで輝度を変えたり音量を変えたりすることが出来ないのです。
Karabiner-Elementというフリーソフトをインストールすれば自由自在にキー割り当てを変えられるのですが、それだとRocksmithというゲームと相性が悪くて曲検索とかでキー入力がほぼできなくなる問題が起きます。
私ゃ、Rocksmithを遊びながら尚且つキーボード操作でゲームの音量を調節したいんですよ…
ということで、macOS標準の機能だけでどうにかならないのかと、Automatorで音量調節するサービスを作ってそれをキーボードショートカットに割り当てるという方法を試してみました。
まぁ結果的には、Rocksmithが最前面で実行中はMacのキーボード制御を一時的に奪っているらしく、ゲーム中に音量を変えることはできませんでした(汗)。一旦Command+TabでFinderとかに切り替えて割り当てたショートカットキーを押してまたRocksmithに戻せば変えられるが、いや、自分がやりたいのはそう言うことではない。
もうこうなったら、キー割り付けをカスタマイズできる小さいUSBキーボードとかを買ってiMacに追加接続するか…
…さて。別のことに使えるかもしれないので備忘録として、設定方法を残しておきます。
Apple Script をキーボードショートカットから呼び出す
Automatorを起動して、ファイルメニューの新規からまっさらなクイックアクションを開きます。
Apple Scriptを挿入します。この時「ワークフローが受け取る項目」を「入力なし」に変更しておくのが重要です。ここではミュートとミュート解除を交互に行うスクリプトを入力しています。
わかりやすい名前で保存します。なお、クイックアクションが保存される先は「~/Library/Services」の下になっている模様。
音量を上げるクイックアクションと音量を下げるクイックアクションも作ります。
システム環境設定のキーボードを開いて、ショートカットのサービスの欄に現れたクイックアクションに適当なファンクションキーを割り当てます。ここでは「Print Screen (F13)」にミュート、「Scroll Lock (F14)」に音量ダウン、「Pause (F15)」に音量アップを割り当てます。
以下、Apple Scriptの詳細。
消音または消音解除
on run {input, parameters}
set muted to (output muted of (get volume settings))
if (muted = true) then
set volume without output muted
else
set volume with output muted
end if
do shell script "afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff"
end run
音量を上げる
on run {input, parameters}
set muted to (output muted of (get volume settings))
if (muted = true) then
set volume without output muted
end if
set steps to 16
set step to (100 / steps)
set current to ((output volume of (get volume settings)) / step)
if current < steps then
set new to current + 1
else
set new to steps
end if
set volume output volume (new * step)
do shell script "afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff"
end run
音量を下げる
on run {input, parameters}
set muted to (output muted of (get volume settings))
if (muted = true) then
set volume without output muted
end if
set steps to 16
set step to (100 / steps)
set current to ((output volume of (get volume settings)) / step)
if current > 0 then
set new to current - 1
else
set new to 0
end if
set volume output volume (new * step)
do shell script "afplay /System/Library/LoginPlugins/BezelServices.loginPlugin/Contents/Resources/volume.aiff"
end run
上記スクリプトの do shell script “afplay 〜.aiff” の行があると、キーボードショートカットの呼び出し〜実行完了までに時間がかかってるかもしれない。
以上です。