Mac でマイクを On/Off するキーボードショートカット 〜Shortcuts 小ねた 1/2〜

すっかり一般的になった Web会議ですが、皆さんマイクの On/Off の切り替えはどうされてますか。
<dl>
<dt>Web会議システムのミュートボタンをマウスクリック? </dt>
<dd>わたし的には Web会議のタブやウィンドウを探し出してマウスクリックするのにもたついてしまって発言のタイミングを逃しがちです…</dd>
<dt>あるいは <a href="https://pc.watch.impress.co.jp/docs/column/yajiuma-mini-review/1357342.html">eMute</a> のようなデバイスで制御?</dt>
<dd>わかりやすいし使いやすそうだけど、机の上に物が増えるのはちょっと…</dd>
</dl>

使用しているマイクにミュートボタンがあれば話は簡単なのですが、そうでない場合にも素早くマイクを On/Off できるようにしたい！というわけで、キーボードショートカットを作った、という話です。


# How
Mac に自作のキーボードショートカットを追加する方法の1つに、[Shortcuts](https://support.apple.com/ja-jp/guide/shortcuts-mac/welcome/mac) があります。Shortcuts でマイクを On/Off する ”ショートカット” を作成して、キーボードショートカットを設定すれば、目的を実現できそうです。


マイクを On/Off する部分は  AppleScript を使って実現します。ただしいくつかの制約があります。
1. 操作できるマイクは、デフォルトのマイクだけ
   * 今回のスクリプトではマイクの指定をしてません。なので操作したいマイクをデフォルト(規定)のマイクに設定しておく必要があります。
2. マイクの On/Off といいつつ、実際にはマイク入力のボリュームの変更してるだけ
   * 今回のスクリプトが使う [Applescript の API](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW44) ではマイクを Off/On(Mute/Unmute) することはできないようでした。なので実際はマイク入力のボリュームをいじっているだけです。もしマイクを On にしたときに、マイクのボリュームを最大にすると不都合な場合はスクリプトの変更が必要です。
   * またマイクのボリュームを勝手にいじるアプリがあると、マイクを Off にしていたつもりでもいつの間にか On になっていることがあります。(私が経験した中では、zoom が、新たにミーティングに参加する際にマイクのボリュームが 0 だと、ボリュームを少し上げるような動作をするようでした。)


# To
## step1: ショートカットを作成してスクリプトを追加する
Shortcuts を立ち上げると↓のようなウィンドウが表示されます(すでに2つ "ショートカット" が存在してますが、初めて立ち上げる場合はなにもないはずです)。
![image39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/6b840a45-3259-2ec4-7ea7-d3ac46381f91.png)

上部の「すべてのショートカット」の右にある + ボタンをクリックして、新しい "ショートカット" を作ります。
![image28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/10976cfb-6868-a4b4-2b02-c0a7bb35d966.png)

上部の「ショートカット名」にわかりやすい名前を入力します。同時にその左のアイコンをクリックすると、アイコンの一覧が表示されますので、色とともに好きなものを設定しておくといいです。
次に右の「カテゴリ」から「スクリプティング」を選んで表示される右下のリストの中から「AppleScriptを実行」を探して左側の編集エリアに追加します。
![image37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/daae09ad-0a66-5e3e-2705-abe380745af9.png)

```applescript
on run {input, parameters}
        (* Your script goes here *)
        return input
end run
```

の部分を、↓のスクリプトで置き換えます(マイクをオンにする際にボリュームが最大だとまずい場合は、4行目の100の部分を変更してください)。

```applescript
on run {input, parameters}
        set iv to input volume of (get volume settings)
        if iv < 10 then
                set volume input volume 100
                return "マイクをミュート解除しました"
        else
                set volume input volume 0
                return "マイクをミュートしました"
        end if
end run
```

置き換えた結果はこうなっていると思います。
![image9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/27995dc5-5356-a255-c719-ba31b973e5fd.png)

この状態で動作テストをします。正しくスクリプトが動作したか確認するために、システム設定から「サウンド」を開き、「入力」タブを開いておきます。
![image27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/cac95287-0702-fdc3-2e4d-a033013088e1.png)

操作したいマイクが選択されていることを確認します。作成している "ショートカット" を実行すると、この画面の「入力音量」が変化します。
Shortcuts のエディタ画面で動作テストをするには、編集エリアの右上にある ▶ をクリックします。
![image35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/77794f7b-f131-d180-46c9-dac841813842.png)

問題なく実行できれば、実行結果のメッセージが表示され、「入力音量」が０になっているはずです。
![image8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/271493bd-c018-1ad6-ddf9-9e3fa5badc75.png)



## Step2: 実行結果の通知を追加する
このままでは、 "ショートカット" を実行した際に実際にマイクを On/Off できたのかを確認するのにいちいちシステム設定を開かなくてはいけません。それでは不便なので、動作した際にデスクトップ通知を表示するようにします。
右のアクションの一覧のスクロールを下にたどって、「通知を表示」を探しエディタに追加します。
![image23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/fd305fc3-75f1-4117-d4ca-16c8fa8cfcd5.png)

「こんにちは」の部分を右クリックして表示されるメニューの中から
![image34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/d111cdee-365c-5b5d-3cd1-f1b1704d2298.png)

「AppleScript実行結果」を選択します。
  ![image13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/de69386e-6eb9-6c4c-ba6c-435a817b0f93.png)

この状態でもう一度 ▶ ボタンをクリックして "ショートカット" を実行すると、デスクトップ通知が表示されます。
![image25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/1eaf2833-96cb-6261-54f2-1523c58cadfa.png)

通知が表示されるとともにサウンドが再生されますが、これを抑制したい場合は「表示を増やす」をクリックして出てくるメニューの中にある「サウンドを再生」のチェックを外します。
![image17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/81e927a5-6af1-63ae-052f-943757a7968e.png)

実行結果をデスクトップ通知ではなく音声で通知したい場合は、「通知を表示」アクションの代わりに「テキストを読み上げる」アクションを追加してください。



## Step3: キーボードショートカットを追加する
最後に、キーボードショートカットを設定します。
右上にある ◯ に i のアイコンをクリックすると右側のメニューに「キーボードショートカットを追加」の項目が出てきます。
![image31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/75900038-b2bc-d106-3e07-9fec545f9aad.png)

この「キーボードショートカットを追加」の部分をクリックするとキーボードショートカットを設定できるようになるので、お好みのキーの組み合わせを実際に入力します。
![image24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/d7d42b91-625a-d04d-3cd5-4fba2f05a4f6.png)

ちなみに、「メニューバーにピン設定」にチェックを入れると、ディスプレイ上部のメニューバーの右側のエリアに、この "ショートカット" を起動するためのメニューが追加されます。
![image16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/2bb4d160-13cc-06f6-6059-a8b8418cfc62.png)

これで、いつでもどこでもマイクを On/Off するためのキーボードショートカットが出来上がりました。



# 以下、こぼれ話
## その1: "ショートカット" のキーボードショートカット設定が消える?
Shortcuts をあれこれいじってると、なにかの拍子に設定したキーボードショートカットが消えてしまうことが、何度かありました。そんなときは慌てず騒がず再度キーボードショートカットを設定してください。
ちなみに正しく設定されていれば、作成したショートカットがメニューバーの左のアプリケーションメニューの中の「サービス」の中に追加されているはずです。
![image7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/38736173-c44f-cc29-ca97-b02924981386.png)

また、「システム設定」→「キーボード」→「キーボードショートカット」で表示されるメニューの「サービス」→「ショートカット」の中にもリストされます。
![image12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/914eaab6-1adb-c923-934a-5e5f6a7c6a15.png)



## その2: 検索できない!
Shortcuts は便利なのですが、ググらビリティが大変低いのが玉にキズです。「ショートカット」ではもちろんのこと「Shortcuts」の検索ワードも芳しくありません。おすすめは 「Shortcuts.app」です。検索結果がガラッと変わります。



## その3: Automatorはオワコン?
もともとこのショートカットは、[Automator](https://support.apple.com/ja-jp/guide/automator/welcome/mac)を使って作っていました。しかし、Mac OS を Big Sur から Ventura に上げて以後、キーボードショートカットを入力してから実際にマイクの On/Off ができるまで妙に時間がかかるようになってしまい、しばしば発言のタイミングを逃すようになってしまいました。
今回 Shortcuts に乗り換えたことで元の快適さを取り戻すことができました。



## その4: Shortcuts と AppleScript とデスクトップ通知
元々 Automator でこの機能を作っていた際は、デスクトップ通知も AppleScript の中で行っていました。しかし Shortcuts に移植したところ何故か AppleScript の中で表示していたデスクトップ通知が表示されなくなってしまいました。幸い Shortcuts に用意されたアクションにデスクトップ通知を表示するものがあったので、そちらに乗り換えた次第です。



# おわり
最後までお読みいただきありがとうございました。明日は Shortcuts ねたの2本目の予定です。Shortcuts のアクションを組み合わせて Web API リクエストするという話です。明日も読んでいただけましたら幸いです。



# おまけ: QRコードを生成するショートカット
アクションの一覧を眺めていたら面白そうなものを見つけたので、さくっと３分で作ったショートカットを載せておきます。(iCloud にアップしましたので、自分で追加するのがめんどくさい方は[こちらからどうぞ](https://www.icloud.com/shortcuts/55bae17bbc214ede8724c93d20a513a9)。)
使っているアクションは「QRコードを生成」と「結果を表示」の２つです。どちらも「書類」カテゴリにあります。
![image20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/1c163ece-8665-4ea4-b63f-b23b8daf138e.png)

ブラウザのアドレスバーをクリックするなどして URL のテキストが選択されている状態で、右クリックして表示されるコンテキストメニューの中から「サービス」を選ぶと、このショートカットが出てきます。
![image11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/ec46f767-18ff-3c19-ffff-d9b5a3c3961e.png)

結果は↓のようなウィンドウで表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622121/f3ba7dca-ed99-9ddb-1c9f-ba79cb76f8da.png)

またクリップボードに URL をペーストした状態でこのショートカットを起動してもOKです。

この “ショートカット” は URL を QRコードに変換することに特化していますが、もっと色々なデータを QRコードに変換するショートカットが Shortcuts のギャラリーにありました。ギャラリーの検索欄に「コードを作成する」と入力して検索すると出てきます(なぜか「QR」をつけると出てきませんでした)。