ヘッドフォンとスピーカーを瞬時に切り替える

# ゲームするときはヘッドフォン、ゴロゴロするときはスピーカー
自分のPC周りでは、オーディオの出力を瞬時に切り替えたい状況が多い。

<details><summary>20231121追記 : WscriptではなくPowerShellを使おう</summary>
[[PowerShell]再生デバイスの「既定のデバイス」をワンアクションでトグルする](https://qiita.com/heliojack/items/1cf3cc74f180374618ce)
PowerShellも考えていたんですけど,当時オーディオ関連のモジュールが見つけられなかったんですよね.いいもの見つけれました！ありがとうございます！
</details>

### 通常の方法だとどうするか
- サウンド設定を開く
- サウンドをスピーカーからヘッドフォンに切り替える
のような作業が必要。(めんどくさい)

<details><summary>画像で解説　こんな感じ</summary><div>
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

サウンド設定を開く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/fb408056-aaa8-f35c-1c9d-60a85888a3c5.png)

サウンドをスピーカーからヘッドフォンに切り替える

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/6b0c1cff-2205-809b-f03a-030f20d3c1a0.png)

のような作業が必要。
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝
</div></details>

# ワンクリックで切り替えたいよなぁ

参照URL : [既定のサウンド設定を瞬時に変えるショートカット作成法](https://jutememo.blogspot.com/2012/08/windows.html)
簡潔に書いてあるのでわかる人はこっちのほうが早い

### 手順1 **changeSoundDevice.jsを作成する。**
拡張子がjsのファイルだが、JavaScriptではなく、J(ジェイ)Scriptである。
Windowsで動くSystem系のもの
なおこのJScriptは`Shift_JIS`でないと動かない。
エラーパターンの参考 : https://oshiete.goo.ne.jp/qa/8213411.html

中身は以下のようにする

``` js changeSoundDevice.js
var wait = function(title){
    do {
	WScript.Sleep(100);
    } while(!WshShell.AppActivate(title));
};

var WshShell =  WScript.CreateObject("WScript.Shell");
WshShell.Run("control mmsys.cpl");
wait("サウンド")
WshShell.SendKeys("{DOWN " + 
	WScript.Arguments.item(0) +
	"}%{s}{TAB 3}{ENTER}");
```

VSCodeだと右下の項目のどれかが文字のエンコード方法である(UTF-8とか)
そこをクリックして検索したりああだこうだすると変更できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/227c0194-5993-57f4-be46-c81cb472a6dc.png)
メモ帳だったら名前を付けて保存時に指定できる？(できなさそうやん...)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/12c1754e-182b-15a2-ec04-cb95b60acacc.png)

### 手順2 ショートカット作成
作成したファイルを右クリックでショートカットを作る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/e097d93e-7607-80d4-7680-70ad97464586.png)
プロパティを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/e22e4343-76cd-dbf5-a76d-32660ccb8374.png)
リンク先のぶぶんを変えるぞ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/38d553b7-692c-b4ac-5666-1ab31edcf15d.png)

### 手順3 リンク先を変える
リンク先は以下のように変える。

``` 
リンク先設定方法
C:\Windows\System32\wscript.exe C:\Users\ユーザー名\Desktop\changeSoundDevice.js オーディオの番号
参考例
C:\Windows\System32\wscript.exe C:\Users\XXX\Desktop\changeSoundDevice.js 5
```

これは、jsファイルを wscript.exe で起動してくださいという意味
オーディオ番号は引数で、実行されるときに入れれる変数

番号はどう決まるのか？
おそらくサウンド設定のこれの順番(開き方は普通の切り替えの時と同じ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/d871e744-f3aa-d35f-62be-e84cb5b124d4.png)


あとは、ショートカットファイルの名前をいい感じに変更
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/483471de-e7ba-03f3-d116-f65aadbdff6b.png)

### 手順4 あとはショートカットクリックするだけ
ショートカットをデスクトップとかにおいて起動するだけ
一瞬で切り替わります。

- 注意点
PS：新しいデバイスを接続したり解除したりしたら順番変わるから設定しなおしになるかもね。

### 手順5 デスクトップに行って起動もだるい、ショートカットコマンドだ
変更すべきはこの項目 : ショートカットキー(K)
いい感じに使わないキーを設定するといいと思います。(設定方法よくわからん)
自分はスピーカーを`Ctrl + Alt + F10`
自分はヘッドフォンを`Ctrl + Alt + F11`
としてみた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/24b1e678-4f52-f960-7a95-d1dbb4c3c4ee.png)

- 注意事項
ショートカットキーが反映されるためには、デスクトップにショートカットのファイルがある必要がある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1505183/464dbc63-9193-ed6b-5891-c0e20ee1285b.png)


参考URL : [「ショートカット」の「ショートカットキー」とは](https://www.724685.com/word/wd190925.htm)

「スタート」メニューの階層でもいいらしいけど、自分はうまくいかなかった...

### 最後に
デスクトップが荒れるので、スタートメニューに置きたいが、うまくいったら誰か教えて。