音声の再生コマンド
Linux と WSL (Windows Subsystem for Linux) のコマンドラインで、WAV形式の音声ファイルを再生する方法を説明する。 https://gyazo.com/29b33a544ce7937c01d2329648a88909
Linux
コマンドaplay -lで、サウンド出力デバイスの一覧を表示し、cardとdeviceの番号を調べる
code:sh
% aplay -l
**** List of PLAYBACK Hardware Devices ****
Subdevices: 1/1
Subdevice #0: subdevice #0 :
中略
:
Subdevices: 1/1
Subdevice #0: subdevice #0 この例の場合、一番上の出力先はcard 0のdevice 3、一番下はcard 1のdevice 0だと分かる
コマンドaplay --device=plughw:カード番号,デバイス番号 ファイル名.wavで、指定の出力先で再生する
code:sh
% aplay --device=plughw:0,3 ok_google.wav # 一番上の出力先で ok_google.wav を再生
% aplay --device=plughw:1,0 alexa.wav # 一番下の出力先で alexa.wav を再生
シェルスクリプトを作っておけば、cardやdeviceの番号を調べ直す必要がなく便利
code:say.sh
aplay --device=plughw:1,0 $1
この場合 ./say.sh ok_google.wav を実行すれば、一番下の出力先に「OK Google」と喋らせられる
WSL (Windows Subsystem for Linux)
Windows付属のメディアプレイヤーを、コマンドラインから実行すれば再生できるが、以下の点に配慮が必要
再生が終了しても、居残り続けるメディアプレイヤー
音声ファイルのパスの書き方
メディアプレイヤーはWindowsのアプリなので、WSL上の音声ファイルも、Windows用のパスで指定
以下のシェルスクリプトを作っておけば、例えば./say_win.sh alexa.wavでalexa.wavを再生できる
code:say_win.sh
voice=\\\\wsl\$\\Ubuntu\\home\\$USER\\TriggEye\\$1 # WSL上のファイルへのWindows用のパス
/mnt/c/Program\ Files/Windows\ Media\ Player/wmplayer.exe $voice &
sleep 2 # 2秒待つ
/mnt/c/Windows/System32/taskkill.exe /IM wmplayer.exe # wmplayer.exe を終了させる
ただし、簡単のため、このスクリプトでは以下の3点を決め打ちしているので、用途に合わせた編集が必要
WSLのディストリビューション名 Ubuntu
音声ファイルの置き場所 ~/TriggEye
再生時間 2秒
Windows用のパスの調べ方
WSL上のファイルのあるディレクトリに移動 ( cd 音声ファイルのあるディレクトリ )
WSL上のディレクトリを、Windowsのエクスプローラーで表示 ( explorer.exe . )
エクスプローラーの窓の左上に、Windows用のパスが表示されている (例: ¥¥wsl$¥Ubuntu¥home)
シェルスクリプトでは、$ や \ をエスケープする必要があることに注意
このスクリプトは say_win というファイル名で TriggEye に同梱済み 2019/8/21