RaspberryPiで家の騒音をグラフ化
- POSTS
赤ちゃんがいつ泣いているのかログを取りたい 用意するもの RaspberryPi 2 or 3 USBマイク 環境準備 Elasticsearch×kibana×Fluentdのインストール グラフ化するために以下環境を用意します
Python3のインストール Pythonは2系と3系がありますが、今後主流になっていく3系を使います。
普通はpyenvやvenvを挟んで環境を切り替えることが多いですが、
RaspberryPi上だとうまくできなかったので、 シンプルに直接Python3系とモジュールをインストールします。
$ sudo apt-get install python3 python3-numpy python3-pyaudio マイクデバイスの認識 こちらのサイトにマイクデバイスの設定方法が書いてあるので、参考にさせていただきました。
設定後以下のようにUSBデバイスが優先されていればOKだとおもいます
$ cat /proc/asound/modules 0 snd_usb_audio 1 snd_bcm2835 マイクのサンプリング周波数を確認 マイクから信号を受け取りにあたりサンプリング周波数を設定する必要があります。
マイクに合った設定をしないとエラーが出て取得できません。
サンプリング周波数はUSBマイクを一度Macに挿して
システム情報->ハードウェア->オーディオ->デバイスにUSB PnP Sound Deviceの欄で確認できました。
※Windowsの場合は試していませんがデバイスマネージャなどから確認できるかもしれません
騒音をログ化する 動作のながれ マイクからのストリーミングデータをCHUNK分(1024*2)ずつ抜き出してその中で最大振幅を配列max_dataに入れる。 Thredingを使って指定時間ごとに割り込み処理(sendlog)を実行 割り込み処理では配列max_dataの平均値を計算してFluentdに送り、max_dataを初期化 Pythonでの割り込み処理はThredingモジュールで実装
Fluentdへはsubprocessでechoを使って実装
コード # -*- coding:utf-8 -*- import pyaudio import numpy as np import threading import subprocess max_data=[] CHUNK=1024*2 # マイクによって変わる。上手くいかない場合色々試してください RATE=48000 # 事前に確認したサンプリング周波数 p=pyaudio.