LoginSignup
4
2

More than 5 years have passed since last update.

raspi3(jessie)とsoundmeterで騒音レベルを検知しようと思ったら躓いたのでその時のメモ

Posted at

経緯

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

にしたらなんかエラーは出るものの動き出しました。
とりあえずこれで良しとします。

以上です。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2