背景
個人的な趣味として音楽活動(mixing)とPCゲームをしています。
音楽をするときはオーディオインターフェースを経由したちゃんとした音を聞きたいし、
ゲームをするときは友人とVC(ボイスチャット)をするのでヘッドセットを使いたい。
いちいち既定のオーディオデバイスをポチポチ変えるのは面倒くさい。
ワンクリックで切り替えたい!
結論
- コマンドプロンプトではできないっぽいのでPowerShellを使用する
- PowerShellからオーディオデバイスをごにょごにょするためにAudioDeviceCmdletsコマンドレットを使用する
(素晴らしいコマンドレットに感謝)
How to
- PowerShellを管理者権限で起動する
- 以下コマンドを実行してコマンドレットをインストールする
PowerShell
Install-Module -Name AudioDeviceCmdlets
- 以下コマンドを実行して切り替えたいオーディオデバイスの名前をそれぞれ調べる(ここではAとBとします)
- このとき、
Type:Playback
となっているものは再生デバイス、Type:Recording
となっているものは録音デバイスです
- このとき、
PowerShell
Get-AudioDevice -List
出力例
Index : 1
Default : True
Type : Playback
Name : ライン (Steinberg UR24C) # ← ★★(A:再生)★★
ID : {0.0.0.00000000}.{e629262c-ac93-401b-9f8f-20db5a2cdcf8}
Device : CoreAudioApi.MMDevice
Index : 2
Default : False
Type : Playback
Name : ヘッドホン (Arctis 5 Game) # ← ★★(B:再生)★★
ID : {0.0.0.00000000}.{fcb48e51-eb73-4cb8-9563-6d3d59dda8d4}
Device : CoreAudioApi.MMDevice
Index : 3
Default : True
Type : Recording
Name : ライン (Steinberg UR24C) # ← ★★(A:録音)★★
ID : {0.0.1.00000000}.{126b19fd-18cc-4fe2-9eea-4c85ee7f82a8}
Device : CoreAudioApi.MMDevice
Index : 4
Default : False
Type : Recording
Name : マイク (Arctis 5 Chat) # ← ★★(B:録音)★★
ID : {0.0.1.00000000}.{26d2d285-8b0c-4231-9487-7eac0c8df80d}
Device : CoreAudioApi.MMDevice
- 以下
.ps1
ファイルを作成して保存(ファイル名はお好みで)-
.ps1
ファイルはUTF-8 with BOM
エンコードで保存しないと日本語が処理できないので注意
-
ChangeAudioDevice.ps1
$playback1 = "ライン (Steinberg UR24C)" # ← A:再生
$recording1 = "ライン (Steinberg UR24C)" # ← A:録音
$playback2 = "ヘッドホン (Arctis 5 Game)" # ← B:再生
$recording2 = "マイク (Arctis 5 Chat)" # ← B:録音
$currentAudio = Get-AudioDevice -playback
if ($currentAudio.Name.StartsWith($playback1)) {
(Get-AudioDevice -list | Where-Object Name -like ("$playback2*") | Set-AudioDevice)
(Get-AudioDevice -list | Where-Object Name -like ("$recording2*") | Set-AudioDevice)
}
Else {
(Get-AudioDevice -list | Where-Object Name -like ("$playback1*") | Set-AudioDevice)
(Get-AudioDevice -list | Where-Object Name -like ("$recording1*") | Set-AudioDevice)
}
実行したら切り替わる!
その他
-
.ps1
ファイルが実行できない場合はポリシー違反の可能性が高いです
ありがたい記事 → PowerShell のスクリプトが実行できない場合の対処方法 -
今回は分かりやすいようにデバイス名でスクリプトを作成しましたが、本来は公式サンプルのようにIDで管理する方が望ましいです
-
スタートメニューに登録するには以下手順でできます
- 作成した.ps1ファイルへのショートカットを作成
- ショートカットのプロパティの「リンク」の先頭に以下を追加
powershell
※最後に半角スペース - 右クリックメニューから「スタートメニューにピン留め」
-
再生デバイスと録音デバイスが一致している場合は
Set-AudioDevice
の実行は1回で良いです(例ではヘッドセットが2デバイス判定になっているため2回実行している)
例
$audioDevice1 = "ライン (Steinberg UR24C)"
$audioDevice2 = "ヘッドホン (hogehoge)"
$currentAudio = Get-AudioDevice -playback
if ($currentAudio.Name.StartsWith($audioDevice1)) (Get-AudioDevice -list | Where-Object Name -like ("$audioDevice2*") | Set-AudioDevice)
Else (Get-AudioDevice -list | Where-Object Name -like ("$audioDevice1*") | Set-AudioDevice)