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 를 호출해야 하고, 인터페이스 ID와 vtable 배치가 빌드마다 다릅니다. SoundDesk는 이걸 추측으로 쓰지 않습니다.
위험한 첫 호출은 별도 프로세스에서 돌려 크래시해도 트레이가 살아남게 하고, 실제로 앱을 옮긴 뒤 Get 으로 되읽어 같은 장치가 나올 때만 "검증됨"으로 승격합니다. 되읽기가 어긋나면 기능을 스스로 끄고 Windows 설정 페이지를 엽니다.
| 상태 | 근거 |
|---|---|
| verified | 실제로 프로세스를 옮기고 되읽어 endpoint id가 일치. 아무것도 재생 중이 아니면 자가진단이 무음 스트림으로 스스로에게 세션을 만들어 자기 자신으로 확인합니다 |
| probable | 되읽을 대상을 만들지 못함 — 팩토리 활성화와 vtable 호출이 크래시하지 않았다는 것까지만 |
| unsupported | 자가진단 실패, 또는 호출은 됐는데 Windows가 반영하지 않음 → 설정 페이지로 안내 |
보안
다운로드 폴더에서 실행해도 안전하도록.
포터블 실행 파일이 실제로 마주치는 문제들입니다. 추상적인 체크리스트가 아니라, 각각에 대응하는 코드와 테스트가 있습니다.
| 위협 | 대응 |
|---|---|
| DLL 하이재킹 exe 옆에 심어둔 위조 DLL |
시스템 DLL은 System32 절대 경로로만 로드. 시작 시 검색 경로에서 exe 폴더와 작업 디렉터리를 제거 |
| 뮤텍스 스쿼팅 다른 세션이 이름을 선점해 실행 차단 |
단일 인스턴스 객체를 Local\ 네임스페이스로 |
| 설정 파일을 통한 주입 | endpoint id는 정규식 검증을 통과한 것만 COM 호출로 전달 |
| 로그 위조 프로세스 이름에 개행을 넣어 가짜 로그 삽입 |
앱·장치 이름은 제어문자 제거 후 길이 제한 |
| 따옴표 없는 자동 실행 경로 | Run 키 값은 항상 따옴표로 감싼 절대 경로, HKCU 만 사용 |
| 제어판 무단 조작 같은 PC의 다른 프로그램, 또는 웹페이지 |
127.0.0.1 전용 + 실행마다 새 256비트 토큰 + Host·Origin 검사. 토큰은 첫 로드에서 HttpOnly 쿠키로 바뀌고 주소창에서 사라집니다 |
개인정보
나가는 건 켠 것만입니다.
앱 이름과 세션 정보는 이 PC 안에서만 처리하고, 설정은 JSON 파일 하나로 남습니다. 밖으로 나가는 기능은 세 가지 — 익명 사용 보고, 업데이트 확인, 개발자 알림 — 뿐이고 전부 기본이 꺼져 있습니다. 제어판에서 켜기 전에는 요청이 한 건도 나가지 않습니다.
| 설정 파일 | %APPDATA%\SoundDesk\config.json |
|---|---|
| 로그 | %APPDATA%\SoundDesk\sounddesk.log |
| 익명 사용 보고 | 기본 꺼짐 — 켜면 하루 한 번, 무작위 설치 id·버전·Windows 빌드·언어·개수 세 가지 |
| 업데이트 확인 · 개발자 알림 | 기본 꺼짐 — 켜면 실행 중인 버전과 언어만. 설치 id는 보내지 않습니다 |
| 절대 나가지 않는 것 | 앱 이름 · 장치 이름 · 파일 경로 · Windows 계정명 |
| 사용하는 API | IMMDeviceEnumerator · IAudioSessionManager2 · ISimpleAudioVolume · IPolicyConfig · AudioPolicyConfig |
| 자동 실행 | HKCU\Software\Microsoft\Windows\CurrentVersion\Run (선택) |
자가진단
내 PC에서 되는지, 앱에게 직접 물어보세요.
본연 기능을 실제 오디오 스택에서 하나씩 돌려보고 건드린 것은 되돌립니다. 소리가 날 변경은 아예 하지 않습니다 — 마스터 볼륨은 지금 값을 그대로 다시 쓰는 식으로 호출 경로만 증명합니다.
| 명령 | 확인하는 것 |
|---|---|
| --selftest-audio | 장치 · 마스터 · 마이크 · 앱별 볼륨/음소거/라우팅 · 프로필 · 전역 단축키. 재생 중인 앱이 없으면 라우팅은 자기 자신의 무음 세션으로 확인합니다 |
| --selftest-panel | 패키지된 실행 파일이 제어판을 실제로 서빙하는지 |
| --report | 장치·세션·프로필 현황을 JSON으로 |
이 PC 결과
OK 앱별 볼륨 (firefox.exe 100% → 42% → 복구)
OK 앱별 음소거
OK 앱별 출력 라우팅 (firefox.exe → ASUS VZ279 → 복구)
OK 기본 장치 전환 · 프로필 · 전역 단축키
— 마이크 (이 PC에 입력 장치 없음)
11 passed, 0 failed, 2 skipped — Windows 10 22H2 빌드 19045
어디서나
쓰는 사람의 말로, 쓰는 사람의 PC에서.
같은 설정을 집과 회사에서 쓰고, 쓰는 언어로 읽고, 필요하면 매크로에서 부릅니다.
12개 언어
Windows 표시 언어를 따라갑니다. 직접 고를 수도 있고, 바꾸면 제어판과 트레이 메뉴가 다시 시작하지 않고 그 자리에서 바뀝니다.
한국어 · English · 日本語 · 简体中文 · 繁體中文 · Español · Português · Français · Deutsch · Русский · Italiano · Tiếng Việt
집과 회사, 같은 설정
프로필·단축키·규칙을 파일 하나로 내보내고 다른 PC에서 가져옵니다. 장치는 이름으로 맞춥니다 — 같은 헤드셋도 PC마다 id가 달라서, 파일을 그냥 복사하면 라우팅만 조용히 사라지기 때문입니다. 이 PC에 없는 장치는 이름을 알려줍니다.
매크로에서 부르기
Stream Deck 버튼이나 AutoHotkey 한 줄에서 그대로 씁니다. 트레이가 떠 있든 아니든 동작하고, 아이콘을 새로 띄우지 않습니다. 바뀌면 종료 코드 0, 아무것도 안 맞으면 1.
SoundDesk.exe --set-app chrome.exe=25
SoundDesk.exe --profile Gaming
SoundDesk.exe --list apps
설치
파일 하나. 설치 프로그램 없음.
SoundDesk.exe 를 원하는 곳에 두고 실행하면 트레이에 아이콘이 생깁니다. 지우고 싶으면 파일과 설정 폴더를 지우면 끝입니다. Python은 필요 없습니다.