Где звук? Автоматизируем аудиовыход на Mac одним нажатием

от автора

Введение

История проблемы, которую я создал, чтобы ее решить, берется из того, что я работаю PM, а значит около 80% моего рабочего времени – это созвоны, конференции, синки, стендапы и прочие малоприятные вещи, а также из проблемы с концентрацией вне рамок коммуникации. Для того чтобы сконцентрироваться, я использую фоновый звук (дождь, ветер, море), но при этом в эти моменты я предпочитаю сидеть без наушников, чтобы, так сказать, дышало. Но меня долгое время бесило то, что чтобы переключить аудио устройство в macOS, необходимо тянуться курсором в правый угол, открывать центр управления, выбирать раздел звук и из обширного списка выбирать нужное устройство. Казалось бы, ничего сложного, однако бывают случаются внезапные и срочные созвоны, задержка подключения к которым может вызвать вопросики.

Стоит также отметить, что я не обладаю какими-то глубокими навыками и познаниями в разработке, в написании скриптов и т.д., но имею внезапно появившееся желание сделать свое рабочее пространство удобнее. 

Итак, положив эту проблему в одну руку, а гугл в другую, я занялся поиском, задавался ли кто-то решением этой проблемы. Разведка конкретных результатов не дала, и этот факт впоследствии и стал основной причиной написания этого текста, поскольку вдруг он поможет какому-нибудь такому же бедолаге решить надуманную проблему. В этом месте стоит оговориться, что я призывал себе в помощь ChatGPT, чтобы она дала мне основное направление, а впоследствии, чтобы помогла с написанием скриптов.

1. Проработка вариантов

Сперва, мне хотелось решить это, не прибегая к установке внешних компонентов, и я стал копать под Automator и AppleScript. Найдя информацию, по всей видимости подходящую для старых версий ОС (а выполнял я все это на актуальной на момент написания macOS 15.01), я понял, что мне может помочь следующий скрипт:

tell application "System Preferences"     reveal pane id "com.apple.preference.sound" end tell  tell application "System Events"     tell process "System Preferences"         click the radio button "Output" of tab group 1 of window "Sound"                 select (row 1 of table 1 of scroll area 1 of tab group 1 of window "Sound")     end tell end tell  quit application "System Preferences" 

в котором row 1 необходимо заменить на нужную строку из раздела «Звук» системных настроек.

Сделав несколько попыток, на каждую получил следующую реакцию системы:

error «Получена ошибка от «System Settings»: Не удается получить pane id \»com.apple.preference.sound\».» number -1728 from pane id «com.apple.preference.sound»

И я снова углубился в поиски и разговоры с GPT. Стало ясно, что начиная с macOS Ventura изменился идентификатор панели и (вероятно!) AppleScript не может получить доступ к настройкам так, как это происходило раньше. Решил изменить подход и все-таки прибегнуть к помощи стороннего ПО.

2. Установка SwitchAudioSource

В процессе поиска я обнаружил упоминания утилиты switchaudio-osx, которая устанавливается через Homebrew. Она позволяет переключать аудиоустройства через терминал и отлично интегрируется с AppleScript и Automator.

Алгоритм установки, проверки и получения данных не слишком сложен:

  1. Открываем терминал и вводим следующую команду:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2. Терминал попросит ввести пароль от системы (не стоит пугаться, что пароль не отображается в терминале). Если все прошло корректно, перед вами должна быть такая картина:

3.   Теперь необходимо установить switchaudio-osx. Для этого в терминал вводим следующую строку::

brew install switchaudio-osx

Привожу скриншот, который я сделал при написании, но на нем система говорит, что данный компонент уже установлен. В любом случае, система должна сообщить, что все установлено.

 4.  Теперь для проверки корректности установки необходимо ввести команду:

SwitchAudioSource -a

И если все было выполнено корректно, в терминале отобразится перечень всех аудиоустройств:

Копируем этот список куда-нибудь «на всякий случай», однако меня в данном случае интересовало ровно два устройства: Динамики MacBook Air и JBL Quantum 600 Game.

5.  Получение пути установки SwitchAudioSource.

На следующем шаге нам пригодится точный путь, куда установлена утилита. Для этого в терминал вводим команду:

which SwitchAudioSource

терминал возвращает нам необходимый путь. Его также целесообразно скопировать куда-нибудь на потом.

Подготовка скриптов на AppleScript

Далее необходимо опробовать, работают ли скрипты с тем, что у нас есть.

Открываем приложение «Редактор скриптов». В верхнем меню нажимаем «Файл» — «Новый» и вводим в поле следующий скрипт:

do shell script "/opt/homebrew/bin/SwitchAudioSource -s 'JBL Quantum 600 Game'"

Вместо «JBL Quantum 600 Game» указываем необходимое устройство из списка, полученного ранее. Запускаем его кнопкой «Запустить скрипт» (треугольник, аналогичный Play во всех плейерах). В результате мы должны увидеть следующее:

Для того, чтобы удостовериться, что устройство действительно переключилось, можно проверить это в системных настройках, или же, что более наглядно, перед переключением запустить, например, музыку.

Аналогичный скрипт готовим для второго аудиоустройства.

Сохраняем эти скрипты с понятным и узнаваемым названием, например «SwitchToLaptopSpeakers» и «SwitchToHeadphones», и форматом файла «Программа».

4.   Автоматизация и Automator

Чтобы не приходилось каждый раз искать файлы скриптов, а также тыкать какие-то кнопки на экране (иначе чем все это отличается, от способа предлагаемого macOS?), необходимо этот процесс автоматизировать.

Запускаем приложение Automator, в верхней панели нажимаем «Файл» — «Новый». В открывшемся окне выбираем «Быстрое действие» (оно же в системе называется «Службы»):

В появившемся окне вверху указываем, что процесс не получает входных данных в любой программе, а в среднем столбце ищем «Запустить программу» и перетаскиваем в правое поле. В этом блоке выбираем один из ранее подготовленных скриптов-программ.

И сохраняем нашу службу под понятным названием, например, Switch to Laptop Speakers.

Аналогичные действия выполняем для второго устройства.

Итак, на данный момент у нас подготовлены две службы, которые переключают аудиоустройства. Теперь перейдем непосредственно к их быстрому запуску.

5. Настройка горячих клавиш

Чтобы запускать переключение сочетанием клавиш, заходим в «Системные настройки» – «Клавиатура» – «Сочетания клавиш». В появившемся окне слева выбираем «Службы» и раскрываем список «Основные».

Щелкаем дважды на одну из наших служб и вводим комбинацию из трех клавиш. Я выбрал для своих [Shift] [Command] [8] и [Shift] [Command] [9].

Все. Теперь при нажатии этих комбинаций будет происходить переключение звука.

6. Уведомления

В процессе тестового использования стало понятно, что не хватает какого-то визуального сигнала, что устройство переключено. Здесь нам на помощь также могут прийти скрипты и системные уведомления (которые выскакивают в правом верхнем углу экрана). Всего лишь необходимо дополнить наши скрипты одной строкой, чтобы они выглядели следующим образом:

do shell script "/opt/homebrew/bin/SwitchAudioSource -s 'JBL Quantum 600 Game'" display notification "Переключено на JBL Quantum 600 Game" with title "Аудио устройство переключено"

Вторая строка, собственно, и вызывает системное уведомление с указанным текстом и заголовком. Вот как это выглядит:

Теперь этим можно пользоваться, но моя душа пожелала большего. Я задумался о макропаде.

7. Макропад и запуск скриптов через него

Я для себя решил, что для того, чтобы выполнять переключение устройств быстро, одним движением, мне нужен макропад (плюс, это возможность для экспериментов в будущем). Я перебрал кучу ноунеймов от китайских производителей, некоторые кастомные сборки и дорогие стриммерские. Но остановил свой выбор на GeekBoards Macropad 2 по следующим причинам:

  • Поддержка VIA (VIA — это платформы для кастомизации макропадов и клавиатур. Использование VIA упрощает настройку макросов через графический интерфейс, без необходимости в прошивке устройства);

  • Качество сборки. Поскольку geekboards довольно известен среди пользователей механических клавиатур, решил довериться их производству;

  • Поддержка macOS. Как мне стало понятно, далеко не для каждого макроапда есть ПО на macOS, а морочиться с виртуалками мне не хотелось.

  • Есть обширное комьюнити VIA.

С мыслью «хочу» я поехал в шоурум geekboards, где меня расстроили тем, что макропад временно (временно ли?) снят с производства и в наличии его нет. Но мне повезло. Я нашел чуть ли не единственное объявление на авито и тут же заказал его за половину цены нового. 

Итак. Макропад передо мной, и я начинаю изучать документацию. Что нам нужно для настройки? Всего лишь одна утилита – VIA. Найти можно на сайте geekboards, либо на сайте сообщества VIA.

Подключаем наш макропад к компьютеру, запускаем установленную VIA, и нас встречает приятный интерфейс.

Далее я опишу только те инструменты, которые необходимы для моего случая.

Поскольку я шел путем использования сочетания клавиш, то именно это мы и будем привязывать к клавишам макропада.

В нижней левой части программы выбираем солярный знак, названный «MACROS» и попадаем в редактор макросов.

Теперь необходимо переключиться в режим ручного ввода макросов, нажав на кнопку, выделенную на скриншоте красным прямоугольником. Здесь нас встречает текстовое поле и подсказка как необходимо указывать ключи клавиш.

Поскольку мы используем сочетание клавиш, нам необходимо ввести его в формате Chord. На этой же странице есть ссылка на страницу QMK Firmware с кодами клавиш.

В нашем случае вводим для макроса М0 сочетание {KC_LGUI,KC_LSFT,KC_9}, а для М1 {KC_LGUI,KC_LSFT,KC_8}. Не забываем сохранить. Если вернуться обратно к графическому отображению макросов, то можно увидеть, что именно мы ввели. То есть, видим «нажатие» сочетания клавиш и их «отжатие».

Теперь снова возвращаемся на первоначальную страницу «KEYMAP» и выбираем категорию MACRO. Перед нами будет графическое изображение макропада и 16 доступных ячеек макросов от М0 до М15.

Нажимаем на графическом изображении макропада кнопку, к которой хотим привязать необходимое действие (кнопка начинает моргать), и нажимаем на одну из использованных нами ранее ячеек макросов. В моем случае – М0 и М1. Аналогично действуем со второй кнопкой. Если на кнопках появились соответствующие надписи, значит все получилось.

Теперь можно проверять, как это работает и бесконечно переключать устройства.

Заключение

Достиг ли я желаемого результата? Да, поскольку теперь при внезапном звонке я давлю одну кнопку, мгновенно переключая устройство. Это сделало мое рабочее место удобнее. Ну и вообще, это прикольно.

Также хочу напомнить, что все это я проделал, не имея никаких знаний по AppleScripts и Automator, а также никогда не слышав ранее про SwitchAudioSource. На всем пути я просто задавал интересующие меня вопросы ChatGPT, и мы вместе искали пути решения возникающих задач. Что это значит? Это значит, что в наше время любой, кто просто захочет попробовать что-то сделать, может сделать это с нулем знаний на входе, а в процессе наметит себе путь для развития.

 

Также, вот несколько мыслей для развития моего решения:

  • Добавление изображения в уведомление о переключении (возможно, с использованием terminal-notifier);

  • Исключение из процесса создания приложения на AppleScript, либо отказ от использования прописанного сочетания клавиш;

  • Переключение на сразу два устройства (например физические наушники и виртуальное устройства для записи).


ссылка на оригинал статьи https://habr.com/ru/articles/854192/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *