私のノートパソコン:
- Windows 10 (バージョン 20H2) を実行
- スピーカー内蔵
- ヘッドフォン用のジャックポート付き
- 通常はスピーカー付きのモニターに接続されます
音が鳴るようにしたい:
- ヘッドフォンが接続されている場合
- モニターから、ヘッドフォンが接続されていない場合
- 他に何も接続されていない場合は内蔵スピーカーから
これに応じて再生デバイスを自動的に切り替える方法はありますか?
なぜこれが些細なことではないのか
オーディオ出力デバイスは次のようになるため、単純なデフォルトのオーディオ出力構成ではこれを実現できないと思います。
希望する再生の優先順位は です1. Headphones, 2. Monitor, 3. Built-in speaker
。ノートパソコンの内蔵スピーカーとヘッドフォンの両方に再生デバイスが 1 つしかないため (2 つ目のデバイスはモニター)、優先順位をそれぞれ個別に設定することはできません。
答え1
以下のスクリプトはテストされておらず、あなたの環境では確かにテストされていませんが、役立つかもしれません。
ここでは 3 つのツールを使用します。
- 非常に便利なNirSoft による NirCmd。
- のオーディオエンドポイントコントローラ インターネットアーカイブからダウンロードできる ここ(ツールはサブフォルダ「Release」にあります)。略して AEPC と呼びます。
- オートホットキー。
まずツールをダウンロードし、フォルダーに解凍します。
次に、3 つのデバイスすべてが接続されている状態で AEPC をパラメータなしで実行すると、デバイス名が一覧表示されます。名前、または少なくとも名前内の識別用サブ文字列を書き留めます。この時点では、「スピーカー/ヘッドフォン」が 1 つのデバイスとして表示されるか、2 つのデバイスとして表示されるかはわかりません。デバイスが 1 つの場合は、ヘッドフォンが自動的に優先されるため、スクリプトを短くする必要があると考えられます。私のスクリプトでは 3 つのデバイスを想定していますが、AEPC を実行するまでは、デバイス名は推測にすぎません。
AutoHotKey をインストールしたら、以下のテキストを.ahk
ファイルに入れてダブルクリックしてテストします。トレイバーの緑の H アイコンを右クリックして [終了] を選択すると、スクリプトを停止できます。ログイン時に実行するには、 のスタートアップ グループに配置します
C:\Users\USER-NAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
。
以下の文字列を確認して置き換えてください。 findstr コマンド:
#Persistent ; prevents the script from exiting when it reaches 'return'
SetTimer, detectDevices, 1000 ; check every second
return
detectDevices: ; this is the timer routine
RunWait, %ComSpec% /c "C:\Temp\AudioEndPointController\Release\EndPointController.exe" | findstr Headphone
if (%ErrorLevel% = 0) { ; found headphone
Run, "C:\Program Files\Nirsoft Package\NirSoft\x64\nircmd.exe" setdefaultsounddevice Headphones
} else {
RunWait, %ComSpec% /c "C:\Temp\AudioEndPointController\Release\EndPointController.exe" | findstr Monitor-device
if (%ErrorLevel% = 0) { ; found monitor device
Run, "C:\Program Files\Nirsoft Package\NirSoft\x64\nircmd.exe" setdefaultsounddevice Monitor-name
} else { ; only speaker is left
Run, "C:\Program Files\Nirsoft Package\NirSoft\x64\nircmd.exe" setdefaultsounddevice Speaker
}
}
Return ; end of timer routine
答え2
これは、Windowsに組み込まれているタスクスケジューラを使用することで可能です。PCのハードウェアレベルで何かが変更されるたびに、Windowsログにイベントが記録されます。タスクスケジューラはすでにこのログを監視しているので、別のイベントを探すだけではパフォーマンスの違いに気付かないはずです。このフォーラムエントリーこれは同様の問題を説明しており、ノルウェー解決方法について非常に良い説明をしてくれました。このソリューションを使用すると、モニターを接続したときに起動するタスクを作成し、オーディオデバイスを変更するスクリプトを開始できます。深く調べなければ、cmdまたはpowershellでこれを行う方法は見つかりませんでしたが、もっと時間をかけて調べれば何かが見つかると思います。私が見つけた唯一のことはこの郵便受けStackOverFlow では、いくつかのソリューションが紹介されており、その中には非常にシンプルなスクリプト言語である AutoHotKey を使用したソリューションもあります。
これが役に立つことを願っています。将来的にはさらに何か見つかるかもしれません。これは私が遭遇した問題でもありますので、その場合は回答を更新します。
答え3
個人的には、ソフトウェアのみのルートを選択した場合、この問題に永遠に悩まされる可能性があると直感しています。
出力デバイスを自動的に構成するソフトウェアは可能だと思いますが、必要な機能をすべて実行できる単一のソフトウェアは存在しないと思います。また、ソフトウェア ソリューションが機能するようになったとしても、セットアップとメンテナンスに多くの時間を無駄にすることになると思います。より信頼性が高く、簡単に構成できるハードウェア ソリューションを試してみるべきだと思います。次にいくつかのオプションを示します。
ほぼすべての画面には入力オーディオ ジャックがあり、出力オーディオ ジャックが付いているものも多数あります。モニターに出力ジャックがある場合は、画面をデフォルトのオーディオに設定し、ヘッドフォンを画面の出力オーディオに接続することをお勧めします。ヘッドフォンを接続するとヘッドフォンから音が聞こえ、ヘッドフォンを外すと画面から音が聞こえ、画面を外すとラップトップから音が聞こえます。(画面の設定を確認してください。外部デバイスを接続したときに画面のスピーカーから音が聞こえるかどうかのオプションがある場合があります)
同様のオプションですが、オーディオ延長コードを入手し、ラップトップをデフォルトに設定し、ラップトップからのコードを画面入力ジャックに接続します。ヘッドフォンを使用する場合は、ラップトップから延長コードを取り外し、ヘッドフォンを接続するだけです。
2 番目にお勧めするオプションは、オーディオ スイッチまたは外部サウンド カードを入手することです。音質が重要だと感じますか? そうであれば、音質を向上させるために、いつか良いサウンド カードを購入することをお勧めします。今すぐ購入して、両方の問題を一度に解決してください。必要なのは、少なくとも 2 つの出力と、どの出力を選択するかを選択する手動スイッチだけです。選択肢は数多くありますが、オーディオ スイッチははるかに安価ですが、手動スイッチとボタンがいくつか付いたハードウェアにすぎません。
もっとお役に立てればよいのですが、自分の PC でいくつかテストしてみましたが、同じ問題がありました。つまり、何かを接続したり取り外したりするときに出力を完全に自動的に変更しようとするのは面倒です。私だったら、ハードウェア ルートを選択すると思います。見た目は美しくないかもしれませんが、最も信頼できるオプションだと思います。