ReSpeakerは複数のマイクを搭載していて、音がどの方向から来たのか判定できたり、LEDがリング状に並べられていて複数の色を発光できる、ちょっと毛色の変わったデバイスです。製品名にspeakerが入ってますが主な機能はマイクです。
ReSpeaker 4-Mic Array for Raspberry Piはマイクが四隅に搭載され、ラズパイのGPIOピンに挿して使う形になっています。
この製品はシリーズになっていて、USB接続のもの(これが本筋?)やマイクの数も2や6,8のものもあります。
プラットフォームもMacやWindows、Linux(Jetson Nano) などに対応しています。
使ってみます。
目次
RaspberryPi4BでReSpeaker 4-Mic Array for Raspberry Piをセットアップ
ReSpeaker 4-Mic Array for Raspberry Piがマイクであることを確認
ラズパイ4Bの場合
OSイメージは32-bitのBusterでも64-bit Bullseye でもどちらでもいいです。
注:ラズパイ3B+ を使いたい場合は、Raspberry Pi OS(Legacy) Debian Buster desktop (32-bit) を使います。Bullseye の場合、Micのセットアップに失敗します。
MicroSDに焼いて、セットアップしておきます。
ラズパイ4BでReSpeaker 4-Mic Array for Raspberry Piをセットアップ
seeed-voicecardをクローンしておきます。
1 2 3 4 5 |
cd ~ git clone https://github.com/respeaker/seeed-voicecard.git cd ~/seeed-voicecard |
インストール
32-bit OSの場合
1 |
sudo ./install.sh 4mic |
64-bit OSの場合
1 |
sudo ./install_arm64.sh 4mic |
再起動
1 |
sudo reboot |
以下のコマンドでac108やCARD=seeed4micvoicec,DEV=0が見えているのを確認
1 |
arecord -L |
ODAS(Open embeddeD Audition System)を使ってみる
Real-time Sound Source Localization and Trackingという触れ込みです。
この製品の特長をよく表していると思いますが、音がどの方向から来ているかを可視化してくれるそうです。
こんな感じ
マイク(source)から音を拾っている様子です。高さと方角を時系列で示しています。
ただ、Elevation は負値にはならないようです。
ではセットアップします
ODAS Studio はNode.js を使いますが、node/npmのバージョンによっては「require is not defined」というエラーが出ます。
インストール後、Local System Monitor が空のままだったら大抵このエラーです。
メニュ -> View -> Toggle Developper Tools で確認できます。
こんな感じ
Node.js からインストールしていきます。
「require is not defined」というエラーは新しめのnode/npmで出るようですので、
公式ではversion12が指定されていますが、ちょっと古めのバージョンを指定してみます。npmは個別にインストールする必要があります。
1 2 3 |
cd ~ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt install nodejs npm -y |
32-bit Buster だとなぜかバージョンはこうでした。
node –> v10.24.0
npm –> 5.8.0
64-bit Bullseye だとこう。
node –> v12.22.5
npm –> 7.5.2
ODAS をインストール
1 2 3 4 5 6 7 8 9 10 11 12 |
sudo apt-get install libfftw3-dev -y sudo apt-get install libconfig-dev -y sudo apt-get install libasound2-dev sudo apt-get install libgconf-2-4 -y sudo apt-get install cmake -y git clone https://github.com/introlab/odas.git cd ~/odas mkdir build cd build cmake .. make |
odas_webをクローンしてインストール
1 2 3 4 5 |
cd ~ git clone https://github.com/introlab/odas_web cd ~/odas_web npm install |
多分エラーが出ます。
以下で対処して再インストール
1 2 3 4 |
npm cache clean --force rm -rf node_modules package-lock.json npm install |
脆弱性の警告がでたらfixしておきます
1 2 |
npm audit fix npm audit fix --force |
起動します。
1 2 3 |
cd ~/odas_web npm start & |
Local System Monitor に表示があればOKです
ReSpeaker 4-Mic Array for Raspberry Piのodasliveからデータを送信します。
soundcard番号とデバイス番号を確認しておきます。
1 |
arecord -l |
IPアドレスを確認しておきます。
1 |
ifconfig |
設定ファイルをodasliveのあるフォルダーにコピーしておきます。
1 |
cp ~/odas/config/odaslive/respeaker_4_mic_array.cfg ~/odas/bin |
設定ファイルを開いて修正
1 2 3 |
cd ~/odas/bin sudo nano respeaker_4_mic_array.cfg |
3か所
1:interfaceのcard番号を更新
2:127.0.0.1が記述された部分が2つあります。これを確認したIPアドレスに変更
データを送信
1 2 |
cd ~/odas/bin ./odaslive -c respeaker_4_mic_array.cfg |
こんな感じになります。
これはサーバー・クライアント型のsocket通信なので、odas_webとodasliveが別のコンピュータ上にあってもネットワークが同じならデータを送れます。
Mic-Arrayで音声方向を測位
音声のLocalizationで、もう一つ別の方法をやってみます。
どの方角かを判定します。
依存ライブラリなどをインストール
1 2 3 4 5 6 7 8 9 10 |
sudo apt-get install swig -y sudo apt-get install libboost-python-dev -y sudo apt-get install libpulse-dev -y pip3 install webrtcvad sudo apt-get install python3-pyaudio -y sudo apt-get install libasound-dev -y sudo pip3 install pyaudio respeaker --upgrade sudo apt-get install portaudio19-dev -y sudo pip3 install --pre pyusb sudo pip3 install numpy |
mic_arrayをクローン
1 2 |
cd ~ git clone https://github.com/respeaker/mic_array.git |
mic_array.pyを編集しておきます。
1 2 3 |
cd ~/mic_array sudo nano mic_array.py |
3か所
1:import Queue —> import queue
2:self.queue = Queue.Queue() —> self.queue = queue.Queue()
3:最終行8micをコメントアウトして、4micのコメントアウトは外す
測位してみます
1 |
python3 vad_doa.py |
音が来ている方向角です。
0は音が無い方向、1が音のある方向だそうです。
多分ですが、こういう感じで音をパッシブにソナーしてるっぽいです。
ReSpeaker 4-Mic Array for Raspberry Piがマイクであることを確認
改めて確認してみましょう。
1:Audacityを使用して音声の録音・再生の確認
1 2 3 4 |
sudo apt-get update sudo apt-get install audacity -y audacity & |
起動
設定
録音デバイスを選択
ac108を選択
マイクのチャンネルを設定
4を選択
デバイスを設定
HDMIじゃない方を選択
レコーディング
5 3mくらい離れていても音声を拾えるそうです。
再生
ラズパイの3.5mmオーディオジャックにスピーカーを接続しておきます。
2:コマンドを使用して音声の録音・再生の確認
デバイスはac108、音声ファイルのフォーマットはSigned 32bit、16kHz、チャンネル数4として録音、hello.wavに出力
1 |
arecord -Dac108 -f S32_LE -r 16000 -c 4 hello.wav |
再生
1 |
aplay hello.wav |
音が再生されない場合、以下をやってみます。
soxインストール
sudo apt-get install sox
hello.wavをstereo.wavにコンバート
sox hello.wav -c 2 stereo.wav
上記の「デバイスを設定」で表示されたhwのカード番号,デヴァイス番号を確認
以下のコマンドでも確認可)
1 |
aplay --list-devices |
以下を実行
aplay -D plughw:1,0 stereo.wav
こんなこともできます、Lチカ
12個のLEDがリング状に並んでいます。
これを点灯
1 2 3 4 5 |
pip3 install spidev gpiozero cd ~ git clone https://github.com/respeaker/4mics_hat.git cd ~/4mics_hat/interfaces python3 pixels.py |
Appendix
ODAS_web はJetson Nanoにもインストールできます(Jetpack 4.6)。
Node.jsのインストールはこういう具合です。
1 2 |
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt install nodejs -y |
バージョンはこうです。
node –> v8.17.0
npm –> 6.13.4
odas studio を起動すると以下のエラーが発生しますが動作に問題はないようです。
Error: Can’t initialize nvrm channel
ラズパイのodasliveとsocket通信で接続します。
ODAS はROS版もあるようです…まだ使ってないですが。
ラズパイ4B + Ubuntu 20.04 + ROS1 (Noetic) の環境でodas_rosのcatkin_makeインストールは可能でしたがReSpeaker 4-Mic Array for Raspberry Piのセットアップができませんでした。多分対応しているReSpeakerはUSB接続するタイプのものが必要なのかも…..。
ちょっとワザを使ってみました。
ラズパイ4B + ODAS_ROS でReSpeaker 4-Mic Array for Raspberry Piを使ってみる
Leave a Reply