Funny Snowman

FunnySnowman > Geek<ギーク>なコトをやってみよっと

ラズパイにマイクを実装したら、音声認識でコマンド受付出来たりするらしいのでやってみよう。調べによるとマイクはUSB接続が無難らしい。

ゴール設定(ラズパイで音声認識するためにマイクを実装してみる)

ラズパイにマイクを実装したら、音声認識でコマンド受付出来たりするらしいのでやってみよう。調べによるとマイクはUSB接続が無難らしい。というかUSB以外の方法が見つからない。どうせならラズパイ本体よりも小さいマイクの方がカッコいいよね、と思って超小型のマイクをオンライン注文。すると台湾からエアメールでUSBマイクが届いた。輸入だったらしい。ところでこの小型マイクを選んだ事が、後で大変なことになるキッカケだったことを知る。

超小型USBマイク

ラズパイでマイクを認識させる(USBマイクの設定)

こちらでも色々なモジュールをインストールしたり設定したり悩んだ結果、何が正しかったのかは今後の宿題とし、認識した結果を以下に記載する。

[lsusb]コマンドを実行すると、Bus001のデバイス004に"C-Media Electronics"というマイクを認識した。

$ lsusb
Bus 001 Device 004: ID 0d8c:013c C-Media Electronics, Inc. CM108 Audio Controller
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
  

マイクはUSB入力を優先させるので[/etc/modprobe.d/alsa-base.conf]の優先順位を設定する。snd_usb_audioの順位を上げる。

$ cat /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
  

再起動したのち、[/proc/asound/modules]を表示してsnd_usb_audioが優先されていることを確認する。

$ cat /proc/asound/modules

 0 snd_usb_audio
 1 snd_bcm2835
  

マイクのボリュームを[amixer]コマンドで設定する。[Mic 16]という数字がボリュームで、62は最大ボリュームの意味。出力結果に100%と表示される。

$ amixer sset Mic 62 -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]
  

マイクのボリュームは、GUIでも設定できる。[alsamixer]コマンドを実行。キーボードの矢印(上・下)でボリュームの大小を調整。

$ alsaamixer
  

マイクのボリューム設定

実験(マイクで録音する)

録音する前に、USBマイクのHWデバイスを確認する。カード番号0、デバイス0だということが分かる。

$ arecord -l

**** ハードウェアデバイス CAPTURE のリスト ****
カード 0: Device [USB PnP Sound Device], デバイス 0: USB Audio [USB Audio]
  サブデバイス: 1/1
  サブデバイス #0: subdevice #0
  

録音は、[arecord]コマンドを実行する。-Dオプションでハードウェアのカード番号0、デバイス0を指定する。-dオプションは録音時間で、この例だと3秒間。録音したサウンドデータは、output.wavに出力とした。このファイル名は自由に定義できる。うまく録音できれば以下の"録音中"が表示される。

$ arecord -D plughw:0,0 -d 3 output.wav

録音中 WAVE 'output.wav' : Unsigned 8 bit, レート 8000 Hz, モノラル
  

サウンドデータの再生は、[aplay]コマンドを実行。ややジーという雑音が混じるのと音声が小さいけれど、録音とサウンドの再生が成功した。小型マイクを使って、ちゃんと音声を録音できる。録音は、できる。

$ aplay -D hw:1,0 output.wav

再生中 WAVE 'output.wav' : Unsigned 8 bit, レート 8000 Hz, モノラル
  

しかし、この後で、Juliusという音声認識システムをインストールして、声を認識するプログラムを作るのだが、これらの小型マイク専用USBデバイスではうまく認識できなかった。試行錯誤の結果、ガラクタ箱の中からUSBカメラを発見。さきに画像認識を試してみようと思い、ラズパイにUSBカメラを接続したら、なんと、このUSBカメラは、マイクも内蔵していることが判明。しかも、音声認識も丁度いい具合に認識できた。安物がダメだったのかよく分からないけど、次からはUSBカメラ内蔵マイクでやろうっと。

USBカメラ with マイク

まとめ(ラズパイにマイクを実装して音声を録音する)

ラズパイに接続するマイクは、Linux用サウンドドライバが豊富なUSBタイプが良い。なぜなら、調べたところによると、どうやらアナログ音声をデータに変換する事は、物凄く大変な事らしい。ところが、USBマイクを買いに秋葉原に行ったのだが、いまどきUSBマイクなんてものは売っていないらしい。せいぜい棒のついたスタンド付きマイクくらい。ビデオ会議をやりたい訳ではないので、小型USBマイクを買おうと思ったら、オンラインショッピングしかない。ところが、注文したマイクは台湾から5日かかる輸入通販だった。そして、後で音声認識をやってみるのだが、これらの超小型USBマイクで録音したデータは、音声データの認識具合がめちゃめちゃ悪くて、試行錯誤の結果、価格が安いこともあって、結局3個も買ってみて実験したがどれも音声認識には向かないようだった。しかし、USBカメラはいい。ちょっと場所をとるが、マイクの性能はいい。

調達を失敗したマイク達

マイク専用デバイスがダメなら、次は"USBカメラ with マイク"で音声認識を実験してみよう。ということになった。

▲上に戻る