🎧

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

2022/08/03に公開約2,500字

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

ログインするとコメントできます