Windows タスクトレイ用ユーティリティ
アプリごとに違う音量を、 ワンクリックで。
Chrome は 30%、Teams は 70%、Spotify は 20%。毎回ボリュームミキサーを開いて合わせる代わりに、プロファイル 1 つで戻します。トレイメニューから 2 クリック、コントロールパネルならスライダー 1 つで。
トレイアイコンを押すと開くコントロールパネル。同じ値はメニューからも直接変えられます。
できること
ボリュームミキサーでしていたことを、トレイから 2 クリックで。
アプリ別の音量とミュート
いま音を出しているセッションをアプリ単位でまとめて表示します。Chrome のようにプロセスを複数持つアプリも 1 行です。
アプリごとに違う出力デバイス
ゲームはスピーカー、Discord はヘッドセットへ。既定の出力デバイスの切り替えもメニューから行え、プロファイルにはデバイスまで一緒に保存されます。
アプリを閉じて開き直してもそのまま
アプリ別の音量を覚えておき、そのアプリが もう一度再生を始めたら 自動で戻します。デバイスを抜き差ししても、スリープから復帰してもプロファイルを適用し直します。
マイクも同じ手で
会議中にいちばん急ぐボタン。 CtrlAltK 一度でマイクをオフ・オンします。
コントロールパネル
プロファイルの編集、ショートカットの変更、自動化ルールまですべて画面から。設定ファイルを手で直す必要はありません。
外に出るのは三つだけ
自動アップデート・匿名の利用報告・開発者からのお知らせがすべてです。 既定で有効なのは自動アップデートだけで、取得したファイルは署名を確認してから適用するかを尋ねます。操作パネルは 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 ファイル一つだけです。 インターネットに出る機能は三つ — 自動アップデート、匿名の利用報告、開発者からのお知らせ — だけです。スマートフォンのリモコンは自分でオンにするまでオフで、オンにしても、同じプライベートネットワーク内でペアリングしたスマートフォンにだけアプリ名が見えます。 既定で有効なのは自動アップデートだけです。新しい版が出ているかを尋ね、出ていれば取得したうえで適用するかを尋ねます。送るのは実行中のバージョンと言語だけで、インストール id は送らず、操作パネルから切れます。残りの二つは有効にするまで静かなままです。
| 設定ファイル | %APPDATA%\SoundDesk\config.json |
|---|---|
| ログ | %APPDATA%\SoundDesk\sounddesk.log |
| 自動アップデート | 既定で有効 — 起動ごとに一度、実行中のバージョンと言語のみ。インストール id は送りません。新しい版は取得後に PROJECTTEAMFORYOU の署名かどうかを Windows に確認し、適用は自分で押します |
| 匿名の利用報告 | 既定でオフ — オンにすると 1 日 1 回、ランダムなインストール id・バージョン・Windows ビルド・言語・3 種類の個数 |
| 開発者からのお知らせ | 既定で無効 — 有効にすると実行中のバージョンと言語のみ |
| 決して出ないもの | アプリ名 · デバイス名 · ファイルパス · 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 は必要ありません。
—累計訪問 —累計ダウンロード
ブラウザーや会社の PC が実行ファイルを止める場合は zip をどうぞ。中身は同じファイルで、ハッシュもそれぞれ用意してあります。
もう一度見るブラウザが「疑わしいダウンロード」として止めることがあります。出たばかりでダウンロードした人がまだ少ない、という意味で、ファイルに問題があるという意味ではありません。Chrome ならダウンロード一覧の ⋮ から「継続」、Windows が止めた場合は「詳細情報」→「実行」です。本当に確かめられるのは二つ — 発行元が PROJECTTEAMFORYOU であること、そして上の SHA-256 が受け取ったファイルと一致すること。受け取る人が増えればこの警告は消えます。
変更履歴
何がいつ変わったか。
時刻はすべて韓国標準時(KST)です。全記録はリポジトリの変更履歴ファイルにあります。
-
v1.7.0 最新
- スマートフォンのリモコン。同じ Wi-Fi の Android スマートフォン(SoundDesk Remote)から、音量・ミュート・出力デバイス・プロファイルを操作できます。初期状態ではオフで、オンにすると、QR コードでペアリングしたスマートフォンだけがプライベートネットワーク内から接続できます。
- プライバシーポリシーと利用規約を 12 言語で公開しました。
-
v1.6.0
- 自動アップデート。新しい版が出たら取得しておき、適用するかを尋ねます。既定で有効で、設定から切れます。
- 取得したファイルは公開ハッシュと署名の両方を通過する必要があり、適用する瞬間にもう一度署名を確認します。
-
v1.5.0
- マスター・マイクと再生中のアプリごとに、今出ている音の大きさが描かれます。
- アプリを一つ指定するグローバルショートカット。会議中に一つだけミュートするのに操作パネルを開かなくて済みます。
- 自動で下げる — 選んだアプリから音が出ている間だけ他を下げ、静かになったら戻します。
-
v1.4.0
- 実行ファイルと zip の二通りで受け取れます。中身のバイトは同じで、ハッシュもそれぞれあります。
- アプリが自分の住所を知っています — トレイメニューと操作パネルの「情報」から開きます。
- ランディングの書体を一つにまとめ、ファイルは 870KB から 225KB になりました。
-
v1.3.0
- プロファイルが「このアプリは既定のデバイスに従う」と言えるようになりました。
- このページは 12 言語で公開しています。