はじめに
Interface2017年8月号のお菓子認識記事におけるお菓子の音を判定するプログラム(eval_snack.py)を実行したところ、私の環境ではIOErrorとなりました。
結果的に回避できましたので、その方法の紹介です。
環境
- Raspberry Pi 3
- Linux raspberrypi 4.9.36-v7+ #1015 SMP Thu Jul 6 16:14:20 BST 2017 armv7l GNU/Linux
- USBマイク
- MXL USBバウンダリマイクロフォン AC-404
発生事象
記事の通りもろもろ準備をして、P.39に従ってお菓子の音を判定するプログラム(eval_snack.py)を実行すると以下の通りIOErrorになりました。
$ python eval_snack.py -m result/snack.model
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection refused
ALSA lib pulse.c:243:(pulse_connect) PulseAudio: Unable to connect: Connection refused
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
recording...
Traceback (most recent call last):
File "eval_snack.py", line 152, in <module>
main()
File "eval_snack.py", line 133, in main
data = stream.read(CHUNK)
File "/usr/lib/python2.7/dist-packages/pyaudio.py", line 605, in read
return pa.read_stream(self._stream, num_frames)
IOError: [Errno Input overflowed] -9981
やったこと
- eval_snack.pyの104行目のCHUNKの値を1000から1024に変更
- eval_snack.pyの135行目もrecording finishに修正(エラーとは関係ありません)
エラーになった当初は「PulseAudio: Unable to connect: Connection refused」や「IOError: [Errno Input overflowed] -9981」の線からggりまして、pyaudioを再インストールするなど2日ほど悩んでおりました。結果的に録音の設定の問題だろうと考えまして、pyaudio動作確認を行ったサンプルプログラムとeval_snack.pyのコードを調べてみたという流れです。
マイクの設定を行って、pyaudioのサイトに示されているサンプルコードがエラーなく実行できれば、準備に問題はないと思います。
おまけ
当該記事のプログラムは、Macでも動作しました。
特に悩んだところはありませんが、Chainerのバージョンは1.24.0でないと動きませんでした。