RaspberryPi Zero W でスマートスピーカー的なものを作る上で、USB スピーカーと USB マイクをつなげる必要があり、そのときのメモでも。
調べればどこかに出てくる情報なんだけれども。
デバイスの接続確認
lsusb コマンドで表示される情報を見てもよくわからないので、スピーカーやマイクを抜き差しして増えたデバイスがあれば、多分それという感じで確認。
SANWA のサイコロみたいなスピーカーと SANWA のマイクの場合、下のように表示される。
同じ SANWA で、どっちも同じ IC を使っているっぽいけど上がスピーカーで下がマイクの模様。
挿さっているかどうか確認できるぐらいかな。
$ lsusb Bus 001 Device 004: ID 0d8c:0103 C-Media Electronics, Inc. CM102-A+/102S+ Audio Controller Bus 001 Device 013: ID 0d8c:0134 C-Media Electronics, Inc.
接続されているサウンドデバイスの確認
サウンドの入出力に使えるデバイスとして確認してみるには、/proc/asound/cards というファイルの中身を確認すればいいとのこと。
これまた似たような情報が・・・
$ cat /proc/asound/cards 0 [ALSA ]: bcm2835 - bcm2835 ALSA bcm2835 ALSA 1 [MicroII ]: USB-Audio - Audio Advantage MicroII C-Media INC. Audio Advantage MicroII at usb-20980000.usb-1.1, full speed 2 [Device ]: USB-Audio - USB PnP Audio Device C-Media Electronics Inc. USB PnP Audio Device at usb-20980000.usb-1.3.7, full s
左側に表示されている数値でで接続したデバイスのカード番号がわかったので、/proc/asound/card1/ や /proc/asound/card2 以下の情報を確認してみる。
機能等はそのディレクトリ下の stream0 というファイルを見ればいいらしい。
Playback と出ればスピーカーで、Capture と出ればマイクかな。
$ cat /proc/asound/card1/stream0 (スピーカーの情報) C-Media INC. Audio Advantage MicroII at usb-20980000.usb-1.1, full speed : USB Audio Playback: Status: Stop Interface 1 Altset 1 Format: S16_LE Channels: 2 Endpoint: 6 OUT (ADAPTIVE) Rates: 44100, 48000 $ cat /proc/asound/card2/stream0 (マイクの情報) C-Media Electronics Inc. USB PnP Audio Device at usb-20980000.usb-1.3.7, full s : USB Audio Capture: Status: Stop Interface 1 Altset 1 Format: S16_LE Channels: 1 Endpoint: 2 IN (ASYNC) Rates: 8000, 11025, 16000, 22050, 32000, 44100, 48000
ユーザーを audio グループへ追加
音声関連のコマンドを扱う上で、毎回 sudo で実行するのも面倒なので、自分を audio グループへ追加しておく。
追加後にリブートが必要。
(下の例はユーザー tako2 でログインしている。)
$ sudo gpasswd -a tako2 audio
スピーカーで音声が生成できるか確認
サンプルの wav ファイルがあるので、それを再生させてみる。
plughw: の後に先程のカード番号を指定するっぽい。
調べた情報からするとどこかの設定ファイルでデフォルトのカード番号を指定できるみたいだけど、うまくいかなかったので毎回指定することにしている。
$ aplay -D plughw:1 /usr/share/sounds/alsa/Front_Left.wav
マイクで音声を録音できるか確認
arecord コマンドで録音して、それを aplay コマンドで再生させてみる。
マイクはカード番号が 2 だったので -D plughw:2 という感じでデバイスを指定している。
$ arecord -D plughw:2 test.wav (Ctrl-C で録音終了) $ aplay -D plughw:1 test.wav
スピーカーのボリューム調整
若干グラフィカルな方法とコマンドライン的な方法と 2 つあり。
グラフィカルなほうは alsamixer コマンドで -c でカード番号を指定。
$ alsamixer -c 1
コマンドラインのほうは amixer コマンドでこれも -c でカード番号を指定。
パラメータに get PCM を指定してボリュームを確認できる。
(下の例だと 50% がボリューム)
$ amixer -c 1 get PCM Simple mixer control 'PCM',0 Capabilities: pvolume pswitch pswitch-joined Playback channels: Front Left - Front Right Limits: Playback 0 - 9472 Mono: Front Left: Playback 4736 [50%] [-18.50dB] [on] Front Right: Playback 4736 [50%] [-18.50dB] [on]
set PCM の後にパーセントや on、off を指定することで、ボリュームやミュートを制御可能。
$ amixer -c 1 set PCM 70% (ボリュームを 70% に) $ amixer -c 1 set PCM off (ミュート) $ amixer -c 1 set PCM on (ミュート解除)
マイクの感度調整
スピーカーと同じように、マイクも alsamixer や amixer で設定できる。
$ alsamixer -c 2 -V capture
マイクの場合、get Mic や set Mic を指定。
$ amixer -c 2 get Mic Simple mixer control 'Mic',0 Capabilities: cvolume cvolume-joined cswitch cswitch-joined Capture channels: Mono Limits: Capture 0 - 62 Mono: Capture 44 [71%] [13.64dB] [on]