AIスピーカーをRaspberryPiで作ってみよう!準備編1

まず、下記を用意
1. RaspberryPi3(element14 製を使用しましたがRS製でもほぼ同じ)
2. MicroUSBケーブル(RaspberryPiとUSB ACアダプタを繋ぐ)
3. USB ACアダプタ(RaspberryPiへの5V電源供給)
4. USBキーボード
5. USBマウス
6. スピーカー(ダイソーの300円USBスピーカーを使用しました)
7. マイク(ウェブカメラのマイクを使用しました)
8. HDMIケーブル
9. モニタ(HDMIが使用できるもの)

RaspberryPi3へのOS Raspbianのインストール方法は、ネット上にたくさんあるため
割愛させていただきます。

それでは、上記用意したものをRaspberryPiにセットし、電源ON(MicroUSBに電気を流す)
無事モニタに下記デスクトップ画面が表示されたら起動完了

まず、今回はスピーカーとマイクの動作確認をして、録音テストまで行います。
【スピーカー】
スピーカーが認識されているかをaplay -lで確認
カード番号0、デバイス番号0にスピーカーが認識されています。

pi@raspberrypi:~ $ aplay -l							
**** List of PLAYBACK Hardware Devices ****							
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]							
Subdevices: 8/8							
Subdevice #0: subdevice #0							
Subdevice #1: subdevice #1							
Subdevice #2: subdevice #2							
Subdevice #3: subdevice #3							
Subdevice #4: subdevice #4							
Subdevice #5: subdevice #5							
Subdevice #6: subdevice #6							
Subdevice #7: subdevice #7							
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC95	8/HD	MI]					
Subdevices: 1/1							
Subdevice #0: subdevice #0

次に音声を出して、音声確認をしてみましょう。フロントセンターと聞こえればOKです。

pi@raspberrypi:~ $ aplay /usr/share/sounds/alsa/Front_Center.wav							
Playing WAVE '/usr/share/sounds/alsa/Front_Center.wav' : Signed 16	bit	Little	Endian,	Rate	48000	Hz,	Mono

【マイク】
マイクについては手持ちがなかったので、ウェブカメラに埋め込めれているマイクを流用します。
スピーカーが認識されているかをarecord -lで確認。
カード番号1、デバイス番号0にマイクが認識されています。

pi@raspberrypi:~ $ arecord -l							
**** List of CAPTURE Hardware Devices ****							
card 1: Camera [PC Camera], device 0: USB Audio [USB Audio]							
Subdevices: 1/1							
Subdevice #0: subdevice #0

ここで、音声を録音しようと

pi@raspberrypi:~ $ arecord test.wav							
arecord: main:788: audio open error: No such file or directory

としても、エラーになります。

【録音】下記のように録音(4秒)してみます

arecord -D plughw:(カード番号),(デバイス番号), -d (秒数) -f (サンプルフォーマット) (ファイル名)

pi@raspberrypi:~ $ arecord -D plughw:1,0 -d 4 -f cd test.wav
Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

ちなみにarecordのオプションの意味は下記、他にもオプションがあるので、-hでヘルプを読んでください
【arecordのオプション(一部)】
-l : 全てのサウンドカードとオーディオデバイスの番号を表示する
-D : 使用するPCMを指定する
-d : 指定の秒数後に終了する
-f : サンプルフォーマットを指定する(下記は環境によって変わります)
-f cd (16bit little endian, 44100, streo)
-f cdr (16bit big endian, 44100, streo)
-f dat (16bit little endian, 48000, streo)
-h : ヘルプを表示する

【マイクボリューム調節】マイクのボリュームを必要に応じて調節します

まずは現状のマイク(シンプルコントロール名 ‘Mic’ )の設定音量を確認。
$ amixer -c 1 sget Mic
※(-c でカード番号を指定)

pi@raspberrypi:~ $ amixer sget Mic -c 1							
Simple mixer control 'Mic',0							
Capabilities: cvolume cvolume-joined cswitch cswitch-joined							
Capture channels: Mono							
Limits: Capture 0 - 3							
Mono: Capture 0 [0%] [30.00dB] [on]

0%になっていたので、60%へと変更してみる

$ amixer -c 1 sset Mic 60%

pi@raspberrypi:~ $ amixer -c 1 sset Mic 60%							
Simple mixer control 'Mic',0							
Capabilities: cvolume cvolume-joined cswitch cswitch-joined							
Capture channels: Mono							
Limits: Capture 0 - 3							
Mono: Capture 0 [67%] [50.00dB] [on]

となり67%になりました。

60%指定したのに67%になった理由は、今回使用したウェブカメラのマイクが4段階しかコントロールできないもののため、0%⇒33%⇒67%⇒100%のレベルでしか設定できない事が理由。

繰り上げで設定されるので、もし70%と指定したら100%に指定されます。

このように、”-c” でマイクのカード番号を指定して、 ”sset”でボリュームを調整します

ちなみに同じようにスピーカーも設定が可能です

スピーカー(シンプルコントロール名 ‘PCM’、カード番号0 )の音量を確認
$ amixer -c 0 sget PCM

スピーカー(シンプルコントロール名 ‘PCM’ )の音量を 50% に設定する
$ amixer -c 0 sset PCM 50%

ただ、スピーカーは下記を使うとGUIでキーの上下操作で簡単に音量調整できます

alsamixer //Escで設定が保存され、元の画面に戻ります

 

【マイクの音をそのままスピーカーから出力する】

arecord | aplay
ではエラーとなるので、下記を入力すると、ハウリングがでますが録音ファイルを作成せずに
マイクの音がそのままスピーカーより出力されます

arecord -f cd -D plughw:1 | aplay -D hw:0
※Ctrl+Cで終了します。

ちなみにplugをつけないと、モノラル音声は再生できないというようなエラーが発生します。
なのでリサンプリングを行う”plug”をデバイスの前につけて解消しましょう

plugをつけると指定のフォーマット、ビットレートになるよう自動でリサンプリング処理を行ってくれます。
ただ、ハウリングはけっこうひどかったりします。