web-dev-qa-db-ja.com

オーディオエンドポイントデバイスをアプリケーション固有に設定する(プログラムで)

「フィードバックハブ」の バグレポート へのリンク


これ以降「エンドポイント」と呼ばれるオーディオエンドポイントデバイスは、物理的または仮想的なオーディオ出力または入力デバイスです。


Windows 10 April Update 1803では、長い間延期されていた「アプリのボリュームとデバイスの設定」が導入されました。これらの設定により、特定のアプリケーションにエンドポイントが選択されているかどうかに関係なく、アプリケーションごとに異なるエンドポイントを設定できるようになったため、オーディオストリーム管理をより細かく制御できます。

ただし、エンドポイントがデフォルトではないプログラムのオーディオが、エンドポイントが設定で正しく表示されているにもかかわらず、閉じて再度起動した後、デフォルトのエンドポイントを介してストリーミングされる(またはまったくストリーミングされない)という問題があります。 :

Issue Recreation

私の知る限り、この問題は、仮想または物理エンドポイントと影響を受けるプログラムを使用して、Windows 10マシン(バージョン1803以降)で再現できます。この例では「VLCMediaPlayer」を使用しました(エンドポイントの選択が付属しているという事実は無視します)。これはよく知られており、広くアクセスできるため、問題の再現が容易になるはずです。


私が探しているもの...

...は、エンドポイントを切り替えるプログラムによるソリューションです。理想的には、スクリプトの形式で起動して、アプリケーションの起動時に正しいエンドポイントを設定できます。

私の目的では、デバイスは常に同じであるため、デバイスインスタンスパスを手動で調整する必要がありますが、レジストリからデバイスインスタンスパスを取得するソリューションについても文句を言うつもりはありません。

  • 定義されたエンドポイントとそれらが使用しているデバイスのデバイスインスタンスパスは、キー_HKEY_USERS\# YOUR SID #\Software\Microsoft\Multimedia\Audio\DefaultEndpoint_のサブキーから取得できます。 Windowsがサブキーの名前をどのように生成するのか、またはサブキーがどこにあるのかわかりません。私が大げさな推測をしなければならなかったとしたら、これらはアプリケーションIDだと思います(間違っている場合は遠慮なく訂正してください)。
  • デバイスインスタンスパス自体は、デバイスマネージャにあります([オーディオ入力と出力]の下で目的のデバイスをダブルクリックし、[詳細]タブに移動して、[プロパティ]ドロップダウンメニューから[デバイスインスタンスパス]を選択します) 。
  • さらに、Microsoft Docsの Audio Endpoint Devices および Stream Management に関するエントリが役立つかもしれませんが、それは私の頭上にあります。

可能ですが非現実的な回避策...

...は、アプリケーションの別のエンドポイントを手動で設定し、そのアプリケーションを起動するたびに目的のエンドポイントに切り替えることです(上記を参照)。

ただし、起動のたびに少なくとも10秒かかるだけでなく、オーディオがデフォルトのエンドポイント__を介してストリーミングされる可能性があるため、これを忘れることもあります。

後者の代替手段は、オーディオがまったくストリーミングされないことです__、または場合によっては実際に動作します__。

__例:VLC Media Player、TomClancyのRainbowSix Siege(ただし、音声はスプラッシュ画面中に正しくストリーミングされます)

__例:Call of Duty 4:Modern Warfare、Call of Duty:Modern Warfare 2、Call of Duty:Modern Warfare 3

__例:Window Media Player、Microsoft Edge、Firefox

観測

  • VLC Media Playerにはエンドポイントの選択が付属していますが、TeamSpeak 3も付属しており、VLCとは異なり、Windowsの設定を完全にスキップします。
  • オーディオをストリーミングしていないCallof Dutyは、他のアプリケーションが同様のことをしているのに遭遇しなかったため、エンジンに接続されている可能性があります。
  • Windows Media Player、Microsoft Edge、Firefoxは、正常に動作する唯一のプログラムです(これまでにテストしました)。それらにはエンドポイントの選択がなく(私は知っています)、それを閉じて再度起動した後、正しいエンドポイントを使用します。ただし、FirefoxとMicrosoft Edgeは、エンドポイントを調整するときに、「アプリのボリュームとデバイスの設定」に複数のインスタンスを表示することに注意してください。

免責事項

私はすでに2つのサードパーティソフトウェアを試しました。「AudioRouter」はまったく機能しませんでした。「CheVolume」は問題を解決せず、その間常にクラッシュします。

この質問は、スーパーユーザー( ここ )で尋ねた質問に基づいていますが、実際の知識が不足しているため、回答が得られませんでした。プログラミング(私はバッチとPowerShellにある程度精通しているだけです)。 Stack OverflowもSuperUserもスクリプト作成サービスではないことはよく知っていますが、この問題はWindows 10 October Update 1809で修正されておらず、これは私だけでなく影響している問題だと考えています。私の後の複数の人に役立ちます。見方が違う場合は、コメントを書くか、編集を提案してください。

また、タグ「audio-streaming」と「endpoint」をこのコンテキストで使用する必要があるかどうかもわかりません。使用しない場合は編集を提案してください。そうしないと、もっと良いことが考えられます。



編集-05/11/18

サードパーティのソフトウェア「EarTrumpet」を使用して、「Call of Duty」ゲームの問題を克服できました(再起動後にオーディオがまったく表示されません)が、デフォルト以外のエンドポイントを割り当てた後、「VLCMediaPlayer」が再起動しませんでした「EarTrumpet」を再び閉じるまで「EarTrumpet」を使用し、「Tom Clancy's RainbowSixSiege」の問題は同じままです。


編集-18/01/19

2か月前に「フィードバックハブ」で作成した バグレポート へのリンクを追加しました。


編集-20/01/19

いくつかのテストを再度行った後、「EarTrumpet」をバックグラウンドで実行すると、再起動後も「VLC Media Player」のデフォルト以外のエンドポイントが維持されますが、「VLC MediaPlayer」は(確実に)再起動しない場合にのみ再起動することに注意してください。 -デフォルトのエンドポイントは「アプリのボリュームとデバイスの設定」で設定されました。

19
FatalBulletHit

このようなイベントを処理するためのプログラミング言語に関する解決策はありません。

しかし、この変更をより迅速に処理するために、EarTrumpetアプリをお勧めできます https://www.theverge.com/2018/6/13/17457778/eartrumpet-windows-10-audio-app

(Windowsの店: https://www.Microsoft.com/en-us/p/eartrumpet/9nblggh516xp?ranMID=24542&ranEAID=nOD%2FrLJHOac&ranSiteID=nOD_rLJHOac-h​​Un6PgKuMKwQLdrzRqnPTA&epi=nOD_rLJHOac-h​​Un6PgKuMKwQLdrzRqnPTA&irgwc=1&OCID=AID681541_aff_7593_1243925&tduid=%28ir__qwqlg6jd0jba3y9hpnbvikaite2xk6kuyv9udtr100 %29%287593%29%281243925%29%28nOD_rLJHOac-h​​Un6PgKuMKwQLdrzRqnPTA%29%28%29&irclickid = _qwqlg6jd0jba3y9hpnbvikaite2xk6kuyv9udtr100&activetab = pivot:overviewtab

各アプリで出力の変更をスクリプト化/プログラムする簡単な方法を見つけたら、回答を更新します。

2
Large