経緯
Raspi君で騒音レベルが高いのを検知したら、別のRaspiのAPIをトリガーしようと思ったので準備していたらつまらんところで躓いたのです。
結論としては一応乗り越えたっぽいのでメモです。
先生(参考にしたサイト)
http://ariarijp.hatenablog.com/entry/2016/07/17/232752
ですが、色々と手間取ったのでそのノウハウ書きます。
インストール時の注意点
https://github.com/shichao-an/soundmeter
のReadmeを見ると
sudo apt-get install portaudio19-dev python-dev alsa-utils
pip install soundmeter --allow-all-external --allow-unverified pyaudio
となるのですが、
sudo apt-get install libav-tools
コレ入れておいて下さい。無いと後でエラーがでるのです。
実行時の注意点
./soundmeter
ってやっても動きません。実行ファイルなし。どこだよ。
~/.local/bin/soundmeter
でした。そうなんだ。
そして、実行してもエラーがダダダーっとでます。
~/.local/bin $ ./soundmeter
connect(2) call to /tmp/jack-1000/default/jack_0 failed (err=No such file or directory)
attempt to connect to server failed
Expression 'parameters->channelCount <= maxChans' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 1514
Expression 'ValidateParameters( inputParameters, hostApi, StreamDirection_In )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2818
Traceback (most recent call last):
File "./soundmeter", line 11, in <module>
sys.exit(main())
File "/home/pi/.local/lib/python2.7/site-packages/soundmeter/meter.py", line 319, in main
m = Meter(**kwargs)
File "/home/pi/.local/lib/python2.7/site-packages/soundmeter/meter.py", line 65, in __init__
frames_per_buffer=FRAMES_PER_BUFFER)
File "/home/pi/.local/lib/python2.7/site-packages/pyaudio.py", line 750, in open
stream = Stream(self, *args, **kwargs)
File "/home/pi/.local/lib/python2.7/site-packages/pyaudio.py", line 441, in __init__
self._stream = pa.open(**arguments)
IOError: [Errno -9998] Invalid number of channels
こちら(https://github.com/shichao-an/soundmeter/issues/13) をみて、
>>> p.get_default_input_device_info()['maxInputChannels']
1L
となったので設定ファイルのchannelsを1にすることにします。
それでも
~/.local/bin $ ./soundmeter
connect(2) call to /tmp/jack-1000/default/jack_0 failed (err=No such file or directory)
attempt to connect to server failed
Traceback (most recent call last):
File "./soundmeter", line 11, in <module>
sys.exit(main())
File "/home/pi/.local/lib/python2.7/site-packages/soundmeter/meter.py", line 320, in main
m.start()
File "/home/pi/.local/lib/python2.7/site-packages/soundmeter/meter.py", line 120, in start
record = self.record()
File "/home/pi/.local/lib/python2.7/site-packages/soundmeter/utils.py", line 51, in start
g.next()
File "/home/pi/.local/lib/python2.7/site-packages/soundmeter/meter.py", line 94, in record
data = self.stream.read(FRAMES_PER_BUFFER)
File "/home/pi/.local/lib/python2.7/site-packages/pyaudio.py", line 608, in read
return pa.read_stream(self._stream, num_frames, exception_on_overflow)
IOError: [Errno -9981] Input overflowed
というようにエラーが出ました。
いろいろ調べて、ここ(https://www.raspberrypi.org/forums/viewtopic.php?t=97821) によると、Chunkサイズを8192にしたらよろしいとありました。(chunkサイズがframes_per_bufferかなーと気付きました)
なので、最終的にconfigファイルを~/.soundmeter/config
というファイル名で作成し、
[soundmeter]
frames_per_buffer = 8192
format = 8
channels = 1
rate = 44100
audio_segment_length = 0.5
rms_as_trigger_arg = False
にしたらなんかエラーは出るものの動き出しました。
とりあえずこれで良しとします。
以上です。