ラズパイでUSBマイクによる録音

Page content

目的

ラズベリーパイを用いて音声認識を用いた電子工作で遊んでみたいと思う。
事始めとしてUSBマイクを認識させ、音声を録音する手順について整理する。

実験環境

  • Raspberry Pi 4B(8[GB]版)
  • Raspberry Pi OS Lite(64bit 2022-09-22リリース版)
  • Amazonの安価なUSBマイク 試したのはコレ

USBマイクの設定

まずデバイスを認識しているか確認する。

$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 08bb:2902 Texas Instruments PCM2902 Audio Codec
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

今回試した環境ではUSBマイクは

Bus 001 Device 004: ID 08bb:2902 Texas Instruments PCM2902 Audio Codec

で認識されていることがわかる。このデバイスで録音したい訳であるが、音声系のデバイスには使用する優先度が存在するらしい。下記コマンドでUSBマイクの優先度を確認できる。

$ cat /proc/asound/modules 
 0 snd_bcm2835
 1 vc4
 2 vc4
 3 snd_usb_audio

この数値が小さいほど優先度が高いのでUSBオーディオの優先度が低いのでこれを最上位とする。優先度の設定ファイルは

/etc/modprobe.d/alsa-base.conf

というものを新規作成すれば良い。このファイルに以下のような内容を記載する。

$ sudo vim /etc/modprobe.d/alsa-base.conf 
+ options snd slots=snd_usb_audio,snd_bcm2835
+ options snd_usb_audio index=0
+ options snd_bcm2835 index=1

設定は再起動すると有効になるので再起動し、その後設定を再確認する。

$ sudo reboot
...
$ cat /proc/asound/modules 
 0 snd_usb_audio
 1 snd_bcm2835
 2 vc4
 3 vc4

無事USBオーディオの優先度が高くなっている。

USBマイクによる録音

USBマイクの設定が完了したので録音にチャレンジする。録音用のコマンドはデフォルトで用意されている「arecord」を使用する。 まずコマンド上では何番でUSBマイクが認識されているのかを確認する。

$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

この結果から今回試した環境では「カード:0」「デバイス:0」と分かる。この情報は録音するときに指定する。 今回は下記のようなオプションをつけて実験を行う。

$ arecord -D plughw:0,0 -d 10 -f cd test.wav
  • plughw:0,0 : 録音デバイスの指定 0,0 は先述のカード番号とデバイス番号を示す
  • -d 10 :録音時間を指定、今回は10秒
  • -f cd :録音フォーマットを指定、今回はCD音源仕様(ステレオは意味ない?)

wavファイルが生成されるので、これを母艦に移動し再生する。

感度調整

実験環境では録音はできているが明らかに音が小さかった。そこで感度を調整する。 マイク感度の設定はデフォルトで用意されている「amixer」というコマンドを使用することで設定できる。

$ amixer sset Mic 16 -c 0
Simple mixer control 'Mic',0
  Capabilities: cvolume cvolume-joined cswitch cswitch-joined
  Capture channels: Mono
  Limits: Capture 0 - 16
  Mono: Capture 16 [100%] [23.81dB] [on]
  • 16 : この数字はマイクによって異なる、実験環境だと[0-16]の範囲、16で最大感度
  • -c 0 : 「arecord -l」で取得したカード番号を指定する

参考

Raspberry Piで音声認識・音声合成する方法
Raspberry Piで音声認識