PCのオーディオ出力先は、USBのサウンドブラスターと外付けスピーカーの2つを使い分けているのですが、切り替えをWindows上のオーディオデバイスから行うのが面倒くさくて、以前よりPowerShellのスクリプトを導入していました。
AudioDeviceCmdlets というサードパーティー製のライブラリです。
これがなかなか便利で、次のようなスクリプトを作っておくだけでバッチファイル経由でオーディオ出力先をきりかえられていました。
Import-Module AudioDeviceCmdlets Set-AudioDevice -Index 2
ところが、これは弱点があって、PCを再起動するとデバイスのIndexが変わることがあるのです。スリープモードからの復帰時は問題ないのですが…
デバイスID({0.0.0.00000000}.{d45bcf7e-6b9e-4be4-bb95-6cbf85b8e042} みたいなやつ)を使えばいいかと思いましたが、こちらも変わっちゃうんですね。
唯一変わらないのはNameプロパティなんですが、Set-AudioDevice にはName指定がないんですよね。。
ということで、慣れないPowerShellをいじってIndex値が変わっても対応できるようにしてみました。
Import-Module AudioDeviceCmdlets $devices = Get-AudioDevice -List $device = $devices.Where({ $_.Name -eq "スピーカー (USB Audio Device)" }) Set-AudioDevice -Index $device.Index
最初、$_.Name == “スピーカー (USB Audio Device)” としてだめだったり、SJISで保存してたのでヒットしなかったりしましたが、無事動作しました。