机の隣にある Windows 11 ホストの音声出力デバイスを、同じ LAN 上のブラウザ(Win11 ゲスト・スマホ・VM)から 1 タップで切り替えるローカルサービス。会議が始まるたびに立ち上がって ホストの前でスピーカーを選び直す作業を消します。
Windows 11 専用 / 単一 exe / フロントエンド依存ゼロ / MIT License
Node.js を持っている人向け。パッケージマネージャ経由なので SmartScreen 警告を避けられる。
# インストール
npm i -g audioremote
audioremote
# または 1 回だけ
npx audioremote
Node.js を入れたくない人向け。audioremote.exe と SHA256SUMS.txt を DL してダブルクリック。
# DL 後
audioremote.exe をダブルクリック
# (SmartScreen が出たら「詳細情報」→「実行」)
Rust stable が入っている前提。開発中はこちら。
git clone https://github.com/ishizakahiroshi/audioremote
cd audioremote
cargo build --release
# target/release/audioremote.exe をホストへコピー
コンソール窓が開き、既定音声デバイスを列挙・トークンを発行して 0.0.0.0:17650 で待ち受け開始。
初回のみ Windows Firewall のダイアログが出るので「プライベート ネットワークを許可」を選ぶ。
ホストの既定ブラウザで http://127.0.0.1:17650/ が自動オープン。
ここは loopback バイパスが効いているのでトークン入力なしで即メイン画面が出る。
ホストの画面には http://192.168.x.y:17650/#t=ar_live_... の形の URL が並ぶ(LAN の NIC ごとに 1 本)。
右の「コピー」ボタンで 1 タップ。緑にフラッシュしたらコピー完了。
Slack DM 自分宛・メモ帳・OneNote など、好きな経路で URL をゲストに渡して開くだけ。
フラグメント #t=... は Web UI が自動で localStorage に保存し URL からクリアする(サーバーログに残らない)。
次からは URL の #t= 抜き版をブックマークしておけば、タップだけで使える。
設定シート → 並び順で state / name / recent を選ぶ。
recent にすると「よく使うデバイスが上に来る」実運用フローにフィットします(履歴は %APPDATA%\audioremote\history.toml に保存)。
ゲスト UI の設定 → 「トークンを入れ直す」で localStorage のトークンを消去。
新しいトークンで開き直したい時(別の人に URL を渡した後の後始末など)に使います。
ホスト側でトークンごと再生成したい時は audioremote setup の対話ウィザードから。
bind = 0.0.0.0 のとき、ヘッダに 「LAN 露出中」バッジが出ます。
誤って公開ネットワーク(喫茶店の Wi-Fi 等)に繋いだ状態で走らせた場合の事故防止用。
持ち出し PC で LAN 開放したくない時は audioremote setup で 127.0.0.1 に切り替え。
以降はホスト自身のブラウザからしか触れなくなり、トークンも不要(loopback バイパス)。
既定では active(今使える)デバイスだけ表示。「他 N 個 (unplugged / disabled) を表示」を押すと 接続待ちの Bluetooth 機器や無効化したデバイスも出て、状態確認に使えます。
設定シート → 言語で 日本語 / English を切替。言語パックは JSON ファイル 1 枚追加で他言語も足せる設計です
(web/lang/<code>.json)。
まず ipconfig でゲストとホストが同じサブネットにあるか確認。
次に Windows Firewall のダイアログで「プライベート ネットワーク」を許可し忘れていないか
(wf.msc → 受信規則 → audioremote を確認)。それでもダメなら
ホストで audioremote setup を叩いて bind が 0.0.0.0 になっているか見てください。
audioremote を RDP セッション内で起動しているのが原因。Windows は RDP セッションに対して仮想的な 「リモート オーディオ」エンドポイントを 1 個だけ見せます。物理コンソール(ホストの前に座って直接ログオン)で 起動し直してください。
まれに IPolicyConfig::SetDefaultEndpoint が 0x80070005(E_ACCESSDENIED) を返すことがあります。
競合するデバイス管理アプリ(メーカー製のオーディオコンソール等)が同時に動いている可能性があるので、
一度そちらを終了してから再試行してください。
audioremote.exe serve --no-open のように --no-open が付いていませんか?
通常起動なら毎回ブラウザが自動オープンする設計です。
それでも開かなければ、コンソールに表示された Open on this host の URL を手動でブラウザに貼ってください。
初回だけトークン付き URL を開けば、その後は localStorage に保存されるので
「トークン抜きの URL」をブックマークしておけば OK です。
例: http://192.168.x.y:17650/ をブックマーク → タップだけで使える。
%APPDATA%\audioremote\config.toml と history.toml を削除して exe を再起動。
新しいトークンで初期化されます。
audioremote は起動時に自動で全 NIC の LAN URL を印字するので、ipconfig を叩く必要はありません。 Web UI の「他のマシンから開く」パネルにも同じ URL が並びます。仮想スイッチ (Hyper-V の vEthernet 等) は グレーで「(仮想スイッチ)」ラベル付きになるので、物理 LAN の方を選んでください。