はじめに
RaspberryPi上でAlexaで遊ぶために、USBスピーカーをデフォルトの出力にしたいなあと思って設定したメモ。Alexa自体はUSBスピーカーじゃなくても使えますが、デフォルトではイヤホンジャックの出力が優先になっているので、それを変えます。
環境
- RaspberryPi3 Model B RS版 日本製
- LOGICOOL ウェブカム HD画質 200万画素 C510
- サンワサプライ USBスピーカー(ブラック) MM-SPU8BK
- TOSHIBA microSDHCカード MSDAR40N16G
全部買ってからだいぶ経っている古いものなので、手に入りにくいものもあるかもしれません。手元にUSBマイクがないのでWebカメラを使います。
RaspberryPiの設定
毎回毎回設定が面倒くさいので、巷にはすでにあると思いますが、自分でセットアップツールを作りました。使用方法もReadmeに書いてあります。普通に使えますが、他の環境で試していないので、人柱になっていただいてもかまいません。 -> https://github.com/jumjamjohn/Raspian
流れ
- 動作確認のための音源作成
- スピーカーの動作確認
- USBスピーカーをデフォルトの出力にする設定
動作確認のための音源作成
- 録音デバイスの一覧
arecord -l
# =>
# card 2: U0x46d0x81d [USB Device 0x46d:0x81d], device 0: USB Audio [USB Audio]
# Subdevices: 1/1
# Subdevice #0: subdevice #0
RaspberryPi上のどこのUSBポートに挿すかによって、card カード番号: ..., device: デバイス番号: ...
の番号が変わります。USB Audio
などとなっているデバイスのカード番号とデバイス番号を控えておきます。
- 録音
cd ~
arecord -D plughw:1,0 -d 10 -f cd test.wav
Recording WAVE 'test.wav'
と表示されて録音が始まるので、「テスト、テスト」とつぶやいてみましょう。コマンドの解説として、arecord -D plughw:カード番号,デバイス番号 -d 録音する秒数 -f cd 音源のファイル名
です。上のコマンドで~/test.wav
が作成されているはずです。
USBスピーカーの動作確認
- 音源の確認
RaspberryPiのイヤホンジャックにイヤホンを挿し、
aplay test.wav
で先程の音源が再生されます。音源が正しく録音されていて、かつ音声出力がデフォルトの状態で、かつイヤホンとイヤホンジャックが正常に動作していれば、聞こえるはずです。聞こえなかったらそのどこかが正常に動作してません。
- 音声出力デバイスの一覧
aplay -l
arecord -l
のときと同様に、USB Audio
となっているもののカード番号とデバイス番号を控えておきます。
- USBスピーカーの動作確認
aplay -D hw:1,0 test.wav
音源が正しく録音されていて、USBスピーカーとUSBポートが正常に動作していれば、聞こえるはずです。聞こえなかったらそのどこかが正常に動作してません。コマンドの解説として、aplay -D hw:カード番号,デバイス番号 音源のファイル名
です。
USBスピーカーをデフォルトの音声出力デバイスにする設定
USBスピーカーがRaspberryPi上で正常に動作していることが確認できたら、音声出力デバイスの優先順位を変更します。上のように順々に動作を確認していかないと、うまくいかなかったときにどこが動いていなくてうまくいかないのかわからなくなるので、順番にやります。慣れてたらすっ飛ばしても良いと思いますが。
- バックアップを取っておく
システム上重要なファイルを編集します。何かあったときに復元できないと困るので、バックアップを取ります。
cp /usr/share/alsa/alsa.conf /usr/share/alsa/alsa.conf.bak
- alsaの設定ファイルを編集
viでもnanoでも良いです。
sudo vi /usr/share/alsa/alsa.conf
aplay -l
で確認したUSBスピーカーのカード番号とデバイス番号を入れます。
...
defaults.ctl.card 1
defaults.pcm.card 1
defaults.pcm.device 0
...
- 再起動
sudo reboot
- 再びSSHして音源再生
aplay test.wav
これでUSBスピーカーから再生されれば成功です。予想した動作でなかった場合、/usr/share/alsa/alsa.conf
の設定に問題があるかもしれません。
参考