Windows タスクトレイ用ユーティリティ
アプリごとに違う音量を、
ワンクリックで。
Chrome は 30%、Teams は 70%、Spotify は 20%。毎回ボリュームミキサーを開いて合わせる代わりに、プロファイル 1 つで戻します。トレイメニューから 2 クリック、管理画面ならスライダー 1 つで。
トレイアイコンを押すと開く管理画面。同じ値はメニューからも直接変えられます。
できること
ボリュームミキサーでしていたことを、トレイから 2 クリックで。
アプリ別の音量とミュート
いま音を出しているセッションをアプリ単位でまとめて表示します。Chrome のようにプロセスを複数持つアプリも 1 行です。
アプリごとに違う出力デバイス
ゲームはスピーカー、Discord はヘッドセットへ。既定の出力デバイスの切り替えもメニューから行え、プロファイルにはデバイスまで一緒に保存されます。
アプリを閉じて開き直してもそのまま
アプリ別の音量を覚えておき、そのアプリが もう一度再生を始めたら 自動で戻します。デバイスを抜き差ししても、スリープから復帰してもプロファイルを適用し直します。
マイクも同じ手で
会議中にいちばん急ぐボタン。 CtrlAltK 一度でマイクをオフ・オンします。
管理画面
プロファイルの編集、ショートカットの変更、自動化ルールまですべて画面から。設定ファイルを手で直す必要はありません。
外に出るのはオンにしたものだけ
匿名の利用報告・更新確認・開発者からのお知らせの 3 つがすべてで、 どれも既定でオフです。管理画面は 127.0.0.1 からのみ開き、実行のたびに作り直すトークンがなければ開きません。
プロファイル
状況が変われば、アプリの音量もすべて変わるべきです。
既定で 3 つ入っていて、いまの状態をそのまま新しいプロファイルとして保存できます。自動切り替え(アプリの起動・デバイスの接続・時間帯)は既定でオフです。
| プロファイル | マスター | アプリ設定 |
|---|---|---|
| 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 のフォルダーと作業ディレクトリを外します |
| ミューテックス squatting 別のセッションが名前を先取りして起動を妨げる |
単一インスタンスのオブジェクトを Local\ 名前空間に |
| 設定ファイル経由の注入 | endpoint id は正規表現の検証を通ったものだけ COM 呼び出しへ渡します |
| ログの偽造 プロセス名に改行を入れて偽のログを差し込む |
アプリ名・デバイス名は制御文字を取り除いたうえで長さを制限 |
| 引用符のない自動起動パス | Run キーの値は常に引用符で囲んだ絶対パス、 HKCU のみ使用 |
| 管理画面への不正操作 同じ PC の別のプログラム、または Web ページ |
127.0.0.1 専用 + 実行ごとに新しい 256 ビットトークン + Host・Origin 検査。トークンは最初の読み込みで HttpOnly クッキーに変わり、アドレスバーから消えます |
プライバシー
外に出るのは、オンにしたものだけです。
アプリ名とセッション情報はこの PC の中だけで扱い、設定は JSON ファイル 1 つとして残ります。外に出る機能は 3 つ — 匿名の利用報告、更新確認、開発者からのお知らせ — だけで、すべて既定でオフです。管理画面でオンにするまで、リクエストは 1 件も出ません。
| 設定ファイル | %APPDATA%\SoundDesk\config.json |
|---|---|
| ログ | %APPDATA%\SoundDesk\sounddesk.log |
| 匿名の利用報告 | 既定でオフ — オンにすると 1 日 1 回、ランダムなインストール id・バージョン・Windows ビルド・言語・3 種類の個数 |
| 更新確認 · 開発者からのお知らせ | 既定でオフ — オンにしても実行中のバージョンと言語だけ。インストール id は送りません |
| 決して出ないもの | アプリ名 · デバイス名 · ファイルパス · Windows のアカウント名 |
| 使用する API | IMMDeviceEnumerator · IAudioSessionManager2 · ISimpleAudioVolume · IPolicyConfig · AudioPolicyConfig |
| 自動起動 | HKCU\Software\Microsoft\Windows\CurrentVersion\Run(任意) |
自己診断
自分の PC で動くかどうか、アプリに直接聞いてください。
本来の機能を実際のオーディオスタックで 1 つずつ動かし、 触れたものは元に戻します。音が出る変更はそもそも行いません — マスター音量はいまの値をそのまま書き直す形で、呼び出し経路だけを証明します。
| コマンド | 確認する内容 |
|---|---|
| --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
家と職場で、同じ設定
プロファイル・ショートカット・ルールをファイル 1 つに書き出し、別の PC で読み込みます。デバイスは 名前で 合わせます — 同じヘッドセットでも PC ごとに id が違うため、ファイルをそのままコピーするとルーティングだけが静かに消えてしまうからです。この PC にないデバイスは名前で知らせます。
マクロから呼ぶ
Stream Deck のボタンや AutoHotkey の 1 行からそのまま使えます。トレイが出ていてもいなくても動作し、アイコンを新たに出しません。変わったら終了コード 0、何も一致しなければ 1。
SoundDesk.exe --set-app chrome.exe=25
SoundDesk.exe --profile Gaming
SoundDesk.exe --list apps
インストール
ファイル 1 つ。インストーラーなし。
SoundDesk.exe を好きな場所に置いて実行すると、トレイにアイコンが出ます。消したいときはファイルと設定フォルダーを削除するだけです。Python は必要ありません。