Утилита в трее Windows
Своя громкость для каждого приложения — в один клик.
Chrome — 30 %, Teams — 70 %, Spotify — 20 %. Вместо того чтобы каждый раз открывать микшер громкости, один профиль возвращает всё на место. Два клика из трея или один ползунок в панели.
Окно, которое открывает значок в трее. Те же значения меняются и прямо из меню.
Что умеет
То, что вы делали в микшере громкости, — в два клика из трея.
Громкость и отключение звука по приложениям
Собирает звучащие сейчас сеансы по приложениям. Приложение с десятком процессов, как Chrome, остаётся одной строкой.
Своё устройство вывода для каждого приложения
Игра — на колонки, Discord — на гарнитуру. Устройство по умолчанию тоже переключается из меню, а профиль сохраняет устройство вместе с громкостями.
Сохраняется при закрытии и повторном запуске приложения
Запоминает громкость каждого приложения и возвращает её, когда это приложение снова начинает играть. Отключённое и снова подключённое устройство или выход из сна тоже приводят к повторному применению профиля.
Микрофон — той же рукой
Самая срочная кнопка на совещании. CtrlAltK выключает и включает микрофон.
Панель
Редактирование профилей, изменение сочетаний клавиш, правила автоматизации — всё в окне. Править файл настроек руками не приходится.
Наружу уходит только три вещи
Автоматические обновления, анонимные отчёты и сообщения разработчика - это всё. по умолчанию включены только автообновления, а у загруженного файла проверяется подпись, прежде чем вас спросят об установке. Панель слушает только 127.0.0.1 и требует токен, создаваемый заново при каждом запуске.
Профили
Меняется обстановка — должны меняться и все громкости.
Три профиля есть сразу, а текущее состояние в любой момент можно сохранить как новый. Автоматическое переключение — по запуску приложения, подключению устройства или времени суток — по умолчанию выключено.
| Профили | Общая | Настройки приложений |
|---|---|---|
| Work | 72% | Chrome 30% · Teams 70% · Spotify 20% |
| Gaming | 80% | Discord 65 % · Spotify 15 % · браузер без звука |
| Meeting | 60% | Teams 80 % · Zoom 80 % · Chrome 20 % · Spotify без звука |
Сочетания клавиш
Когда руки уже на клавиатуре.
Все можно изменить, и если сочетание уже занято другой программой, вам об этом скажут, а не промолчат.
- CtrlAlt↑ Громче
- CtrlAlt↓ Тише
- CtrlAltM Без звука
- CtrlAltK Отключить микрофон
- CtrlAltS Окно
- CtrlAlt1–3 Сменить профиль
Маршрутизация по приложениям
Путь, который Windows нигде не описала, проверяется перед использованием.
измерено
у «только это приложение — на гарнитуру» нет публичного API. Приходится вызывать внутренний интерфейс, которым пользуется приложение «Параметры» Windows, Windows.Media.Internal.AudioPolicyConfig, а его идентификатор и раскладка vtable отличаются от сборки к сборке. SoundDesk не пользуется ими наугад.
Опасный первый вызов выполняется в отдельном процессе, чтобы значок пережил аварийное завершение, а после того как приложение действительно перенесено, результат перечитывается через Get; только когда возвращается то же устройство, статус повышается до «подтверждено». Если перечитанное не совпадает, функция выключает себя сама и открывает страницу параметров Windows.
| Состояние | Основание |
|---|---|
| verified | Процесс действительно перенесён, и перечитанный endpoint id совпадает. Если ничего не играет, самопроверка создаёт себе сеанс с тихим потоком и проверяет себя сама |
| probable | Нечего было перечитывать — известно лишь, что активация фабрики и вызов через vtable не привели к аварии |
| unsupported | Самопроверка не прошла или вызов удался, а Windows его не применила → вас отправляют на страницу параметров |
Безопасность
Безопасно даже при запуске прямо из папки загрузок.
Это те проблемы, с которыми переносимый исполняемый файл сталкивается на самом деле. Не абстрактный список: за каждой строкой стоят код и тест.
| Угроза | Что сделано |
|---|---|
| Подмена DLL Поддельная DLL, положенная рядом с exe |
Системные DLL загружаются только по System32 абсолютному пути. При запуске папка exe и рабочий каталог убираются из пути поиска |
| Захват мьютекса Другой сеанс занимает имя первым и блокирует запуск |
Объект единственного экземпляра живёт в пространстве имён Local\. |
| Внедрение через файл настроек | endpoint id доходит до вызова COM только после проверки регулярным выражением |
| Подделка журнала Перевод строки в имени процесса, вставляющий ложную запись |
Из имён приложений и устройств удаляются управляющие символы, затем ограничивается длина |
| Путь автозапуска без кавычек | Значение Run — всегда абсолютный путь в кавычках, и используется только HKCU. |
| Постороннее вмешательство в панель Другая программа на том же ПК или веб-страница |
127.0.0.1 и только он, плюс новый 256-битный токен при каждом запуске и проверка Host и Origin. Токен при первой загрузке превращается в HttpOnly-cookie и исчезает из адресной строки |
Конфиденциальность
Наружу уходит ровно три вещи, и вот какие.
Имена приложений и данные сеансов обрабатываются на этом ПК, а настройки - это один файл JSON. В интернет выходят три вещи: автоматические обновления, анонимные отчёты об использовании и сообщения разработчика. Пульт на телефоне выключен, пока вы сами его не включите, а после включения показывает имена приложений только сопряжённым телефонам в той же частной сети. по умолчанию включены только автоматические обновления: программа спрашивает, есть ли новая сборка, загружает её и затем спрашивает, устанавливать ли. Отправляются только текущая версия и язык, идентификатор установки - никогда, и всё это выключается на панели. Остальные два молчат, пока вы их не включите.
| Файл настроек | %APPDATA%\SoundDesk\config.json |
|---|---|
| Журнал | %APPDATA%\SoundDesk\sounddesk.log |
| Автоматические обновления | Включено по умолчанию — один раз за запуск, только текущая версия и язык. Идентификатор установки не отправляется. Новая сборка загружается, Windows подтверждает подпись PROJECTTEAMFORYOU, а установка требует нажатия |
| Анонимный отчёт об использовании | Выключено по умолчанию — если включить, раз в сутки: случайный идентификатор установки, версия, сборка Windows, язык и три счётчика |
| Сообщения разработчика | Выключено по умолчанию — при включении только текущая версия и язык |
| Что не уходит никогда | Имена приложений · имена устройств · пути к файлам · имя учётной записи Windows |
| Используемые API | IMMDeviceEnumerator · 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
Где угодно
На вашем языке, на вашем компьютере.
Одни и те же настройки дома и на работе, на том языке, которым вы пользуетесь, вызываемые из макроса, когда нужно.
12 языков
Следует языку интерфейса Windows. Можно выбрать и вручную — панель и меню в трее сменят язык сразу, без перезапуска.
한국어 · English · 日本語 · 简体中文 · 繁體中文 · Español · Português · Français · Deutsch · Русский · Italiano · Tiếng Việt
Дома и на работе — одни настройки
Выгрузите профили, сочетания клавиш и правила в один файл и загрузите его на другом ПК. Устройства сопоставляются по имени — у одной и той же гарнитуры на каждом ПК свой id, поэтому простое копирование файла тихо лишило бы вас маршрутизации. Об устройствах, которых на этом ПК нет, вам сообщат по имени.
Вызов из макроса
Используйте как есть из кнопки Stream Deck или одной строки AutoHotkey. Работает и когда значок запущен, и когда нет, и второй значок не создаёт. Код возврата 0, если что-то изменилось, 1 — если ничего не подошло.
SoundDesk.exe --set-app chrome.exe=25
SoundDesk.exe --profile Gaming
SoundDesk.exe --list apps
Установка
Один файл. Без установщика.
SoundDesk.exe в любое место и запустите — в трее появится значок. Python не нужен.
—визитов всего —загрузок всего
Если браузер или политика на рабочем компьютере блокирует исполняемые файлы, возьмите zip. Внутри тот же файл, и для каждого есть хеш.
Посмотреть ещё разБраузер может заблокировать файл как подозрительную загрузку. Это значит, что его скачали пока немногие, а не что с файлом что-то не так. В Chrome откройте список загрузок, нажмите ⋮ и выберите «Сохранить»; если блокирует Windows — «Подробнее» → «Выполнить в любом случае». По-настоящему проверяется двумя вещами: что издатель — PROJECTTEAMFORYOU, и что SHA-256 выше совпадает с полученным файлом. Предупреждение исчезнет, когда файл скачает больше людей.
Что изменилось
Что и когда изменилось.
Всё время — корейское стандартное (KST). Полная запись лежит в файле изменений в репозитории.
-
v1.7.0 Последняя
- Пульт на телефоне. Телефон на Android в той же сети Wi-Fi (SoundDesk Remote) управляет громкостью, отключением звука, устройствами вывода и профилями. По умолчанию выключен; после включения подключаются только телефоны, сопряжённые по QR-коду, и только из частной сети.
- Политика конфиденциальности и условия использования опубликованы на двенадцати языках.
-
v1.6.0
- Автоматические обновления. Новая сборка загружается, как только появляется, а потом вас спрашивают, устанавливать ли её. Включено по умолчанию, отключается в настройках.
- Загруженный файл должен пройти и опубликованный хэш, и подпись, а подпись проверяется ещё раз в момент установки.
-
v1.5.0
- Уровень звука, который идёт прямо сейчас, — под общей громкостью, микрофоном и каждым звучащим приложением.
- Глобальное сочетание, названное для одного приложения. Заглушить одну программу посреди совещания, не открывая панель.
- Автоматическое приглушение — пока выбранное приложение звучит, остальные тише; как только оно смолкает, всё возвращается.
-
v1.4.0
- Можно взять исполняемым файлом или zip-архивом. Байты внутри одни и те же, и у каждого свой хэш.
- Приложение знает свой адрес — открывается из меню в трее и из раздела «О программе» на панели.
- Одна гарнитура на всю страницу, а файлы уменьшились с 870 КБ до 225 КБ.
-
v1.3.0
- Профиль теперь умеет говорить: «это приложение следует за устройством по умолчанию».
- Эта страница выходит на двенадцати языках.