🎧

ホットキー1つで、再生している音楽を止めて Discord のミュートを解除する

2022/08/04に公開
2

Raycast から AppleScript をかんたんに扱えたので、ひとつ試してみました

今回やったこと

  • PCで音楽聴きながら仕事してるとする
  • 仕事中はだいたい Discord にマイクミュート状態で入っているとする
  • Discord で声かけてもらったとき、すぐに反応したい

ショートカットキーひとつで、「Spotify を止めて Discord を unmute する」 設定を作ってみた

Raycast + AppleScript の組み合わせで実現しています

Karabiner-Elements を試す → 失敗

最初は AppleScript は思いつかず、Karabiner-Elements でできないかと考えていた (のちに断念)

手順

  • 音楽停止ボタン(メディアキーのやつ) を押す
  • Discordアプリを active にする
  • Discord でミュート解除のショートカットを入力させる

この手順を実現できればよさそう?

  • アプリを active にするのはシェルで open -a Discord
  • Discord でミュートをトグルするショートカット cmd + shift + M がある

いけそう?

試した Karabiner の設定ファイル

{
  "title": "unmute discord",
  "rules":
  [
    {
      "description": "ctrl-5 to unmute discord",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "5",
            "modifiers": {
              "mandatory": [
                "control"
              ]
            }
          },
          "to": [
            {
              "key_code": "play_or_pause"
            },
            {
              "shell_command": "open -a 'Discord'"
            },
            {
              "key_code": "m",
              "modifiers": [
                "command", "shift"
              ]
            }
          ]
        }
      ]
    }
  ]
}

だめだった

具体的には

  • play_or_pause ボタンを押すので、音楽が再生されていない場合は逆に再生開始されてしまう
  • Discordアプリが非アクティブ状態のときに、どうもうまくいかない
    • Discord アクティブ時ならうまくいく
    • Discord をアクティブにしてから、 cmd + shift + M が入力されるタイミングに問題がある?
    • アクティブ化 → キー送信、の間にちょっと wait 入れるとかしたかったが、Karabiner側にそういった設定見つけられず

→→→ 断念

AppleScript を試す

なんか今さら AppleScript を調べるモチベーションはあんまり沸かなかったのですが、まあでも Macの操作を色々できるのは確か

また、Raycast からかんたんに AppleScript を扱えると知って試してみた

Raycast のメニューから AppleScript を作成できるし、作ったスクリプトにホットキーを割り当てるのもかんたん

  • Raycastの設定画面 → Extensions → + ボタンを押す
  • Add Script Directory から、スクリプト保存先を設定しとく
  • Create Script Command
  • スクリプトファイルの雛形が生成されるので、書いて保存
  • Script Commands のところに作ったスクリプトが表示されるので、ホットキーを設定

作ったスクリプト

#!/usr/bin/osascript

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Unmute Discord
# @raycast.mode silent

# Optional parameters:
# @raycast.icon 🤖

tell application "Spotify" to pause
tell application "Discord" to activate
delay 0.1
tell application "System Events"
    keystroke "m" using {command down, shift down}
end tell

できた

  • play_or_pause ではなく pause を送れるので、音楽再生していないときも問題ない
  • Discord アクティブ後にちょっとウェイトを入れており、キー入力送信のタイミングの問題は起きていない(と思う)

よろしければお試しください

Discussion

2357gi2357gi

discordの設定から独自のキーバインドを追加して、プライバシーとセキュリティの項目も有効化してあげれば別のアプリを開きながらミュート切り替えができるのでオススメです。

matsuoshimatsuoshi

おおお、できました! これは便利ですね、ありがとうございます!!