macOS에서 키보드로 출력 오디오 장치 바꾸기


최근에 헤드폰을 하나 샀다. 하지만 헤드폰으로 듣다가 밥을 먹을 때는 맥북 스피커로 바꾸고 싶다. 그렇게 출력 장치를 바꿀 때마다 상단의 제어센터 버튼을 눌러서, 오디오 버튼을 누르고, 위 스크린샷에서 원하는 장치를 고르는 것은 매우 귀찮더라. 키보드 “딸깍”으로 오디오 출력 장치를 바꿀 수 있는지 찾아봤고, 그 결과를 공유한다.
https://github.com/deweller/switchaudio-osx 를 활용한다.
SwitchAudioSource -a 로 모든 장치를 볼 수 있다. (입력 장치도 보인다)
SwitchAudioSource -c 로 현재 연결된 장치를 볼 수 있다. (출력 장치만 나오는 듯)
SwitchAudioSource -s “Device name” 로 해당 장치로 변경할 수 있다.
그럼 이제, 간단한 셸 스크립트를 짜서 현재 장치가 맥북 스피커면 → 헤드폰으로, 현재 장치가 헤드폰이면 → 맥북 스피커로 바꿔주는 스크립트를 짜자. 이를 이하 “토글 스크립트”라고 부르자.
이제 토글 스크립트를 각자가 선호하는 단축키 프로그램에 등록하면 된다. better touch tool도 좋겠지만 단축키로 cli command를 실행하는 간단한 작업에는 https://github.com/koekeishiya/skhd 가 제격이다.
.skhdrc 에 (원하는 단축키로) 설정하자.
# Audio device toggle
shift + ctrl + alt - a : "/.../audio_toggle.sh"
근데 생각해보니, 블루투스 스피커도 토글 스크립트에 포함시키는 것은 어떨까? (자주 쓰는 알프레드 워크플로우에서 활용하는 것을 보고 알게된) https://github.com/toy/blueutil 를 사용하면 간단하다.
현재 연결되어있는 블루투스 장치 중에 블루투스 스피커가 포함되어 있으면, [맥북 스피커, 헤드폰] 만 있던 사이클에 [맥북 스피커, 블루투스 스피커, 헤드폰] 처럼 추가하기로 했다.
#!/bin/bash
# Get current audio device
current=$(SwitchAudioSource -c)
case "$current" in
"MacBook Pro Speakers")
# Check if Beosound Explore is connected only when switching from MacBook
beosound_connected=$(blueutil --connected | grep -i "beosound explore" | wc -l)
if [[ $beosound_connected -gt 0 ]]; then
SwitchAudioSource -s "Beosound Explore"
echo "Switched to Beosound Explore"
else
SwitchAudioSource -s "External Headphones"
echo "Switched to External Headphones"
fi
;;
*"eosound"*|*"xplore"*)
SwitchAudioSource -s "External Headphones"
echo "Switched to External Headphones"
;;
*)
SwitchAudioSource -s "MacBook Pro Speakers"
echo "Switched to MacBook Pro Speakers"
;;
esac
이제 헤드폰으로 음악을 들으면서 업무를 하다가, 요리를 하러 주방으로 가면 출력 장치를 블루투스 스피커로 바꾼다.
요리가 끝나고 모니터 앞으로 식사를 가져오면 출력 장치를 맥북 스피커로 바꾼다.
식사를 마치면 출력 장치를 블루투스 스피커로 변경하고 설거지를 한다!
여담으로—각 장치 별로 별도의 단축키를 두지 않은 이유는:
생각보다 외우는 게 귀찮다. 장치가 추가될 때마다 새로운 단축키를 추가해야하는 구조는 지양하고 싶다.
생각보다 외우는 게 “더” 귀찮다. 지금 내 shkdrc에는 이미 충분한(…) 수의 단축키가 등록되어있다. 더 늘리고 싶지 않다.
출력 오디오 장치가 많아봐야 3-4개가 상한이라고 생각했다. 연결해야하는 오디오가 100개쯤 되면 알프레드 워크플로우를 짰겠지.



