音声認識させるのを目標として、、次は録音してみる。
まずは録音・再生用デバイスの確認
root@raspberrypi:~# arecord -l **** List of CAPTURE Hardware Devices **** card 1: U0x41e0x30d3 [USB Device 0x41e:0x30d3], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0 card 2: U0x46d0x81b [USB Device 0x46d:0x81b], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0 root@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 IEC958/HDMI] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: U0x41e0x30d3 [USB Device 0x41e:0x30d3], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
録音デバイスは、card:1,device0とcard:2,device:0の2種類検知されている。実際、Logicoolのカメラ(に付いたマイク)と、SoundBlasterのマイク入力の2系統あるのでいずれも検知されていることになる。どっちがどっちか分からないので動かして調べる。
録音のコマンドはググって以下と判明
arecord -f <format> -D hw:<CardID>,<DeviceID> <file>
aplayで怒られたので、フォーマットをS16_LE(Signed 16bit, Little Endian)と指定。1,0と2,0のデバイスをそれぞれ録音デバイスとして録再したところ、SBは1,0で、Logicoolは2,0であることが判明
SBのマイク入力から録音して再生
# arecord -f S16_LE -D hw:1,0 | aplay -D plughw:1,0
Logicookのカメラに付属するマイクから録音して再生
# arecord -f S16_LE -D hw:2,0 | aplay -D plughw:1,0
SBはマイク外付け必要なので、普段はLogicoolの内蔵マイク(2,0)で音声入力する予定。
補足
- 録音時間は10秒を予定しているので、-d オプションでdurationを指定
- 優先順位とか書いている記事があるのだけど、、優先順位を指定しないと何が問題か??
- あと、、recordでは hw:n,nだけど、playでは plughw:n,nだ。。なぜ違うのか!?
■追記
Logicoolのカメラに付属するマイクで10秒間録音、16KHzサンプリングの例(S16_LEは、Signed16bit、LittleEndianの意味)、ch数の指定をしないとデフォルトはモノラル
# arecord -f S16_LE -D hw:2,0 -r 16000 -d 10 > test_16K_10sec.bin # aplay -D plughw:1,0 test_16K_10sec.bin