21 апреля, 2013

ControllerMate, ремап регулировки громкости

Уже не первый год в качестве звуковой карты я использую уже не самый интересный по нынешним меркам интерфейс Audiophile USB от M-Audio. Он меня более, чем устраивает по всем статьям, поэтому при переходе на Mac я и не думал расставаться с этой железкой.

Однако, меня поджидал неприятный сюрприз: драйверы для этой карточки под OS X не используют системный микшер, следовательно громкость соответствующими клавишами на клавиатуре не регулируется, мол, в вашей карточке нечего крутить. На сайте M-Audio об этом указано, а в качестве решения предлагают крутить либо громкость в приложении, либо регулятор на передней панели аудиоинтерфейса.

Крутить регулятор не хотелось, т.к. тянуться каждый раз за этим откровенно лень. А вот регулировать громкость плеера при помощи штатных мультимедиа-клавиш - вполне адекватное решение.

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

Итак, открываем ControllerMate.

Для начала я убрал действия для клавиш регулировки громкости, чтобы больше не выводилось уведомление о том, что регулировать нечего. На функционал не влияет, сделано сугубо в эстетических соображениях.

Нажимаем "Create Driver Configuration", выбираем нашу клавиатуру (в моем случае используется клавиатура от Logitech)". Хотя в моем случае почему-то выбрать надо было мышь. Это не совсем очевидно, согласен.


Находим пункты "Volume Increment" и "Volume Decrement", меняем поведение с Default на None.

После этого создаем новую группу для нашей клавиатуры (или пишем новые правила в существующую, если у вас уже есть пресеты в ControllerMate).

В качестве плеера я использую Swinsian,  и у него нет шорткатов для регулировки громкости. Конечно, их можно создать через System Preferences, но зачем плодить сущности? При нажатии на клавишу эмулировать нажатие других клавиш, чтобы отрегулировать громкость - это как-то громоздко. Правда, команд "сделать громче/тише" для AppleScript у него тоже нет, только возможность задания значений от 0 до 100. Возиться со счетчиками не хотелось, поэтому почему бы не эмулировать нажатие соответствующего пункта в меню плеера?

Создаем внутри группы пресетов для нашей клавиатуры еще одну группу, я назвал ее аналогично названию плеера,  указывем, что группа будет активна, когда запущен плеер, при этом не забываем справа от названия плеера поменять параметр на "Foreground or Background", иначе ничего не будет регулироваться, если окно плеера не является активным.


Внутри группы создаем новую страницу, добавляем новый блок:

В окне инспектора выбираем нужную нам клавишу (точнее, достаточно один раз на нее нажать и она выберется сама). После этого добавляем новый блок, на этот раз выбираем "AppleScript - AppleScript". Чтобы не плодить файлы, выбираем, что скрипт храниться будет тут же, текст скрипта для Swinsian будет таким:

tell application "System Events" to tell process "Swinsian"
         click menu item "Increase Volume" of menu "Controls" of menu bar 1
end tell

После этого связываем созданные блоки, проделываем аналогичную процедуру для кнопки увеличения громкости, заменив Decrease на Increase соответственно.

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

Надеюсь, объяснение получилось не очень путаным.
Готовый файл конфигурации для ControllerMate можно скачать здесь.

А вообще, всем пользователям OS X, еще не знакомым с AppleScript и Automator рекомендую обратить внимание на два этих прекрасных инструмента, позволяющих автоматизировать, наверное, даже самые нетривиальные процедуры в системе.