LoginSignup
5

More than 1 year has passed since last update.

Windowsでバッチファイルを使用してワンクリックでオーディオデバイスを切り替える

Posted at

背景

個人的な趣味として音楽活動(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)

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5