Macでいつものサウンド入力/出力設定に切り替える

### 説明
- 最近は何かとオンラインミーティングが多いので、音声出力/音声入力の設定変更も多いです。
- そこでサウンド入力出力デバイスを切り替えるアプリケーションをつくり、その起動にショートカットキーを設定します。
- 完成イメージ: わかりにくいですが、ショートカットキー(ここでは`shift + control + s`)により実行したあとに、デバイスが切り替わっています

<img src="https://user-images.githubusercontent.com/177159/135971575-479cf941-15a0-41af-a8db-2488c67119d2.gif">


### Install [switchaudio-osx](https://github.com/deweller/switchaudio-osx)
- サウンドデバイスの設定に使います

```bash
brew install switchaudio-osx
```

### 出力可能なデバイス一覧を表示する
- 使用したい出力デバイスの`name`を使います

```bash
 SwitchAudioSource -f json -t output -a | jq
{
  "name": "HyperX QuadCast S",
  "type": "output",
  "id": "46",
  "uid": "AppleUSBAudioEngine:Kingston:HyperX QuadCast S:4100:1"
}
{
  "name": "外部ヘッドフォン",
  "type": "output",
  "id": "76",
  "uid": "BuiltInHeadphoneOutputDevice"
}
{
  "name": "MacBook Proのスピーカー",
  "type": "output",
  "id": "69",
  "uid": "BuiltInSpeakerDevice"
}
```

### 入力可能なデバイス一覧を表示する
- 使用したい入力デバイスの`name`を使います

```bash
 SwitchAudioSource -f json -t input -a | jq
{
  "name": "HyperX QuadCast S",
  "type": "input",
  "id": "51",
  "uid": "AppleUSBAudioEngine:Kingston:HyperX QuadCast S:4100:2"
}
{
  "name": "外部マイク",
  "type": "input",
  "id": "87",
  "uid": "BuiltInHeadphoneInputDevice"
}
{
  "name": "MacBook Proのマイク",
  "type": "input",
  "id": "82",
  "uid": "BuiltInMicrophoneDevice"
}
```

### Macの`スクリプトエディタ`でコードを書いてアプリケーションとして保存する
- (Krisp関連のコードは不要なら削除してください)
- [ソースコード](https://gist.github.com/yuki777/99e6ff70202ccb04ae982ad72d158376)

```applescript
# https://apple.stackexchange.com/questions/190319/display-notification-works-from-applescript-editor-but-not-when-exported-as-ap
tell application "Finder" to activate

# Krispを終了する
do shell script "killall krisp || true"

# Krispの終了を待つ
repeat
	delay 1
	try
		set krispRunning to do shell script "/usr/bin/pgrep -x krisp"
	on error
		set krispRunning to ""
	end try
	if krispRunning is "" then exit repeat
end repeat

# Krispを起動する
do shell script "open ~/Applications/krisp.app"

# Krispの起動を待つ
repeat
	delay 1
	try
		set krispRunning to do shell script "/usr/bin/pgrep -x krisp"
	on error
		set krispRunning to ""
	end try
	if krispRunning is not "" then exit repeat
end repeat

# System Settingsアプリを起動し、Soundの設定を開く
tell application "System Settings"
	activate
	set current pane to pane id "com.apple.Sound-Settings.extension"
end tell

# 入力デバイスを指定する
do shell script "
/opt/homebrew/bin/SwitchAudioSource -f json -t input -s 'Yeti Nano' ||
/opt/homebrew/bin/SwitchAudioSource -f json -t input -s 'External Headphones' ||
/opt/homebrew/bin/SwitchAudioSource -f json -t input -s 'YukiAirPodsPro' ||
/opt/homebrew/bin/SwitchAudioSource -f json -t input -s 'MacBook Pro Microphone'
"

# 入力音量を80%に設定する
set volume input volume 80

# 出力デバイスを指定する
do shell script "
/opt/homebrew/bin/SwitchAudioSource -f json -t output -s 'External Headphones' || 
/opt/homebrew/bin/SwitchAudioSource -f json -t output -s 'YukiAirPodsPro' || 
/opt/homebrew/bin/SwitchAudioSource -f json -t output -s 'Soundcore Life P2' || 
/opt/homebrew/bin/SwitchAudioSource -f json -t output -s 'MacBook Pro Speakers'
"

# 現在の出力デバイスを取得する
set currentOutputDevice to do shell script "/opt/homebrew/bin/SwitchAudioSource -c -t output"

# 出力音量を設定する
if currentOutputDevice = "External Headphones" then
	set volume output volume 70
else if currentOutputDevice = "YukiAirPodsPro" then
	set volume output volume 70
else if currentOutputDevice = "Soundcore Life P2" then
	set volume output volume 60
else if currentOutputDevice = "MacBook Pro Speakers" then
	set volume output volume 70
else
	set volume output volume 75
end if

# 現在の入力デバイスを取得する
set currentInputDevice to do shell script "/opt/homebrew/bin/SwitchAudioSource -c -t input"

# 入出力デバイスを表示する
display notification "🎤 " & currentInputDevice & "
🔈 " & currentOutputDevice with title "reset-sound.app" sound name "Glass"

# フィードバックサウンドを再生する
do shell script "/usr/bin/afplay /System/Library/Sounds/Glass.aiff"
```
- ついでに[音量を設定](https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/reference/ASLR_cmds.html#//apple_ref/doc/uid/TP40000983-CH216-SW44)しています
- 名前は適当に、、ファイルフォーマットはアプリケーションを選択します。
<img src="https://user-images.githubusercontent.com/177159/135967550-fc78e515-cad5-4a73-812c-c4b50a57c1f8.png">

### 実行
- Macの[Spotlight検索](https://support.apple.com/ja-jp/guide/mac-help/mchlp1008/mac)から実行したり、
- [Alfred](https://www.alfredapp.com/)や[Raycast](https://www.raycast.com/)を使っているならショートカットキーを設定すると便利です

<img src="https://user-images.githubusercontent.com/177159/135968649-94104fe9-d650-4161-b0ff-788985c093ef.png">