はじめに

respeaker mic array

 スマートスピーカー,ホームスピーカーなるものが流行っているので,DIYできるスマートスピーカーことRespeakerで遊んでみることにした. 購入はSeedstudioからできて,注文からだいたい1weekぐらいで届いた.

 買ったのはRespeaker CoreというOpenWRTが入っていて音声認識関連ソフトもインストール済みのやつではなく,マイクが7個搭載してあるRespeaker Mic Arrayというやつ.

 マイクアレイだけ買った理由としては,多チャンネル録音に興味があったのと,Coreに入っているソフトウェアは大体オープンソースで使えて,準備したRaspberry PiみたいなやつにマイクアレイをUSBで接続して普通に使えるからです.

Respeaker Mic Array

 Respeakerは色々関連製品が出ているので興味のある方はお好きなものを買うと良いと思います.CoreについてはV2が出そうな気配があるので待つのも良いかも知れない.

 ということでソフトウェアは公式?githubにまとまっているので,これで遊んでみる.

respeaker/respeaker_python_library

 まずは,Coreに入っているらしいrespeaker_python_libraryというのをRaspberry Pi3にインストールして遊ぶ.環境は以下の通り.

$ uname -a
Linux raspberrypi 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux
$ python -V
Python 2.7.9

 基本的にはレポジトリのREADME.mdに従うが,記載していない依存ライブラリのインストールが必要だったりしたのでメモしておく.

依存ライブラリインストール

 apt, pipを用いて依存ライブラリをインストール.また,pyaudioで使用するために,portaudioをダウンロードしてきてビルド,インストールする.

$ sudo apt install swig python-dev libpulse-dev
$ sudo pip install pocketsphinx webrtcvad

build & install portaudio

$ wget http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz
$ tar -xvzf ./pa_stable_v190600_20161030.tgz
$ cd portaudio
$ ./configure
$ make
$ sudo make install

install pyaudio, pyusb

$ sudo pip install pyaudio pyusb

実行

 準備ができたら実行してみる.このライブラリは sudo pip install respeakerでも入るが,ワーキングディレクトリにcloneしてきて実行した方がわかりやすかった.

$ git clone https://github.com/respeaker/respeaker_python_library.git
$ cd  respeaker_python_library
$ cd examples
$ sudo python ./offline_voice_assistant.py

 初期状態では、”respeaker”,”alexa”,”play music”の文字列に反応する.このデータはrespeaker_python_library/respeaker/pocketsphinx-data/以下に入っている,

respeaker/mic_array

 次に,Respeaker Microphone Array用のユーティリティーであるこのレポジトリを試してみる. READMEによると.DOA(Direction of Arrival), VAD(VoiceActivity Detection), KWS(Keyword Spotting or Keyword Search)を行うコードが入っているとのこと.

Requirementsに書いてあるように,まずは8chで生音源取得ができるようにマイクアレイのファームウェアを書き替えなければならない.

ファームウェア書き替え

 というわけで,これを使って以下の手順でファームウェアを書き替える.

$ sudo apt install libusb-1.0-0-dev 
$ git clone https://github.com/respeaker/mic_array_dfu.git
$ cd mic_array_dfu/
$ make
$ sudo ./dfu --download respeaker_mic_array_8ch_raw.bin

実行

 書き換えが終わったら,普通にクローンしてきてREADME.mdのGet startedを参考に以下のように実行すればOK.依存ライブラリは基本的にrespeaker_python_libraryを実行する段階で入れてあるので特に追加でインストールする必要は無かった.

$ git clone https://github.com/respeaker/mic_array.git
$ sudo python pixel_ling.py

arecordを利用して8chで録音

 最後にarecordを利用して8chで録音してみる.まず,上で実行したファームウェアの書き換えをやっていない場合はやる.そして,ホストコンピュータにてマイクアレイのデバイスを確認する.

$ arecord --list-devices
card 1: Array [Respeaker Microphone Array], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

 この場合は,カード1のデバイス0を指定すれば良いので,以下のように実行すると録音できる.

# 32k, 8chで録音
$ arecord -v -D hw:1,0 -f S16_LE -r 32000 -c 8 audio-8ch-32k.wav

 録音した音声の波形をaudacityなどで確認すると,マイク位置によって波や振幅にずれがあるのを確認できる.

audacity screenshot

感想

  • サクッと音声認識とか録音とかできて楽しい,売っているスマートスピーカだとどうしても制限があるので色々やりたい場合はこちらの方が楽しい.
  • マイクの数が7個なのに8chなのはなぜ???