SoundDesk

Утилита в трее Windows

Своя громкость для каждого приложения —
в один клик.

Chrome — 30 %, Teams — 70 %, Spotify — 20 %. Вместо того чтобы каждый раз открывать микшер громкости, один профиль возвращает всё на место. Два клика из трея или один ползунок в панели.

Windows 10 · 11Без установщика, один исполняемый файлИсходящий трафик по умолчанию выключен

Окно, которое открывает значок в трее. Те же значения меняются и прямо из меню.

Что умеет

То, что вы делали в микшере громкости, — в два клика из трея.

01

Громкость и отключение звука по приложениям

Собирает звучащие сейчас сеансы по приложениям. Приложение с десятком процессов, как Chrome, остаётся одной строкой.

02

Своё устройство вывода для каждого приложения

Игра — на колонки, Discord — на гарнитуру. Устройство по умолчанию тоже переключается из меню, а профиль сохраняет устройство вместе с громкостями.

03

Сохраняется при закрытии и повторном запуске приложения

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

04

Микрофон — той же рукой

Самая срочная кнопка на совещании. CtrlAltK выключает и включает микрофон.

05

Панель

Редактирование профилей, изменение сочетаний клавиш, правила автоматизации — всё в окне. Править файл настроек руками не приходится.

06

Наружу уходит только включённое вами

Анонимный отчёт об использовании, проверка обновлений и уведомления разработчика — это всё, и все три выключены по умолчанию. Панель открывается только на 127.0.0.1 и требует токен, создаваемый заново при каждом запуске.

Профили

Меняется обстановка — должны меняться и все громкости.

Три профиля есть сразу, а текущее состояние в любой момент можно сохранить как новый. Автоматическое переключение — по запуску приложения, подключению устройства или времени суток — по умолчанию выключено.

Встроенные профили
ПрофилиОбщаяНастройки приложений
Work72%Chrome 30% · Teams 70% · Spotify 20%
Gaming80%Discord 65 % · Spotify 15 % · браузер без звука
Meeting60%Teams 80 % · Zoom 80 % · Chrome 20 % · Spotify без звука

Сочетания клавиш

Когда руки уже на клавиатуре.

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

  • CtrlAlt Громче
  • CtrlAlt Тише
  • CtrlAltM Без звука
  • CtrlAltK Отключить микрофон
  • CtrlAltS Окно
  • CtrlAlt13 Сменить профиль

Маршрутизация по приложениям

Путь, который Windows нигде не описала, проверяется перед использованием.

измерено

у «только это приложение — на гарнитуру» нет публичного API. Приходится вызывать внутренний интерфейс, которым пользуется приложение «Параметры» Windows, Windows.Media.Internal.AudioPolicyConfig , а его идентификатор и раскладка vtable отличаются от сборки к сборке. SoundDesk не пользуется ими наугад.

Опасный первый вызов выполняется в отдельном процессе, чтобы значок пережил аварийное завершение, а после того как приложение действительно перенесено, результат перечитывается через Get ; только когда возвращается то же устройство, статус повышается до «подтверждено». Если перечитанное не совпадает, функция выключает себя сама и открывает страницу параметров Windows.

Что означает вердикт
СостояниеОснование
verifiedПроцесс действительно перенесён, и перечитанный endpoint id совпадает. Если ничего не играет, самопроверка создаёт себе сеанс с тихим потоком и проверяет себя сама
probableНечего было перечитывать — известно лишь, что активация фабрики и вызов через vtable не привели к аварии
unsupportedСамопроверка не прошла или вызов удался, а Windows его не применила → вас отправляют на страницу параметров

На Windows 10 22H2, сборка 19045, verified подтверждено Вердикт сохраняется вместе с номером сборки и перепроверяется после обновления Windows

Безопасность

Безопасно даже при запуске прямо из папки загрузок.

Это те проблемы, с которыми переносимый исполняемый файл сталкивается на самом деле. Не абстрактный список: за каждой строкой стоят код и тест.

УгрозаЧто сделано
Подмена DLL
Поддельная DLL, положенная рядом с exe
Системные DLL загружаются только по System32 абсолютному пути. При запуске папка exe и рабочий каталог убираются из пути поиска
Захват мьютекса
Другой сеанс занимает имя первым и блокирует запуск
Объект единственного экземпляра живёт в пространстве имён Local\ .
Внедрение через файл настроек endpoint id доходит до вызова COM только после проверки регулярным выражением
Подделка журнала
Перевод строки в имени процесса, вставляющий ложную запись
Из имён приложений и устройств удаляются управляющие символы, затем ограничивается длина
Путь автозапуска без кавычек Значение Run — всегда абсолютный путь в кавычках, и используется только HKCU .
Постороннее вмешательство в панель
Другая программа на том же ПК или веб-страница
127.0.0.1 и только он, плюс новый 256-битный токен при каждом запуске и проверка Host и Origin. Токен при первой загрузке превращается в HttpOnly-cookie и исчезает из адресной строки

696 тестов · покрытие 84 % В том числе живой тест, который подкладывает поддельную DLL и проверяет, что её не пустили Подписано через Azure Trusted Signing · сертификат новый, поэтому SmartScreen какое-то время может предупреждать

Конфиденциальность

Наружу уходит только то, что вы включили.

Имена приложений и сведения о сеансах обрабатываются на этом компьютере и больше нигде, а настройки — это один файл JSON. Функций, выходящих в сеть, ровно три — анонимный отчёт об использовании, проверка обновлений и уведомления разработчика — и все три выключены. Пока вы не включите что-то в панели, не уходит ни один запрос.

Файл настроек%APPDATA%\SoundDesk\config.json
Журнал%APPDATA%\SoundDesk\sounddesk.log
Анонимный отчёт об использованииВыключено по умолчанию — если включить, раз в сутки: случайный идентификатор установки, версия, сборка Windows, язык и три счётчика
Проверка обновлений · уведомления разработчикаВыключено по умолчанию — если включить, только текущая версия и язык. Идентификатор установки не отправляется
Что не уходит никогдаИмена приложений · имена устройств · пути к файлам · имя учётной записи Windows
Используемые APIIMMDeviceEnumerator · IAudioSessionManager2 · ISimpleAudioVolume · IPolicyConfig · AudioPolicyConfig
АвтозапускHKCU\Software\Microsoft\Windows\CurrentVersion\Run (по желанию)

Самопроверка

Спросите у самого приложения, работает ли оно на вашем ПК.

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

КомандаЧто проверяет
--selftest-audio Устройства · общая громкость · микрофон · громкость, отключение звука и маршрутизация по приложениям · профили · глобальные сочетания клавиш. Если ничего не играет, маршрутизация проверяется на собственном тихом сеансе
--selftest-panel Действительно ли собранный файл отдаёт панель
--report Устройства, сеансы и профили в JSON

Результат на этом ПК

OK  Громкость по приложениям (firefox.exe 100 % → 42 % → возвращено)
OK  Отключение звука по приложениям
OK  Маршрутизация вывода по приложениям (firefox.exe → ASUS VZ279 → возвращено)
OK  Смена устройства по умолчанию · профили · глобальные сочетания клавиш
—   Микрофон (на этом ПК нет устройства ввода)

11 passed, 0 failed, 2 skipped — Windows 10 22H2, сборка 19045

Где угодно

На вашем языке, на вашем компьютере.

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

01

12 языков

Следует языку интерфейса Windows. Можно выбрать и вручную — панель и меню в трее сменят язык сразу, без перезапуска.

한국어 · English · 日本語 · 简体中文 · 繁體中文 · Español · Português · Français · Deutsch · Русский · Italiano · Tiếng Việt

02

Дома и на работе — одни настройки

Выгрузите профили, сочетания клавиш и правила в один файл и загрузите его на другом ПК. Устройства сопоставляются по имени — у одной и той же гарнитуры на каждом ПК свой id, поэтому простое копирование файла тихо лишило бы вас маршрутизации. Об устройствах, которых на этом ПК нет, вам сообщат по имени.

03

Вызов из макроса

Используйте как есть из кнопки Stream Deck или одной строки AutoHotkey. Работает и когда значок запущен, и когда нет, и второй значок не создаёт. Код возврата 0, если что-то изменилось, 1 — если ничего не подошло.

SoundDesk.exe --set-app chrome.exe=25
SoundDesk.exe --profile Gaming
SoundDesk.exe --list apps

Установка

Один файл. Без установщика.

SoundDesk.exe в любое место и запустите — в трее появится значок. Чтобы удалить, сотрите файл и папку настроек. Python не нужен.

Скачать SoundDesk.exe

21,9 МБ · подписаноSHA-256

Посмотреть ещё раз

Windows 10 1803 и новееОдин исполняемый файлПрава администратора не нужныSHA-256 прилагается