Raspberry Pi4B にUSBマイクを刺し、
マイク入力をPython で扱いたくて PyAudio で以下のようなコードを記述した。
# PyAudio インスタンス化
audio = pyaudio.PyAudio()
# 引数情報に従って、PyAudio ストリーム生成・開始
stream = audio.open(
format=pyaudio.paInt16, # 振幅:ビット解像度
rate = 44100, # サンプリング周波数
channels = 1, # モノラル
input_device_index = 1, #USBインデックス1にUSBマイク
input = True, # マイク入力
frames_per_buffer=4096) # チャンクサイズ:1フレーム4096バイト
stream.start_stream()
# 指定秒数の音声をchunkサイズごとに取得し、配列framesへ追加
for _ in range(0, 3600): # 6分間読み込み
# チャンクサイズ分読み込み
buf = stream.read(4096)
:
:
# クローズ
stream.stop_stream()
stream.close()
audio.terminate()
Windows10 上で実行すると問題なく動作するのだけど、
Raspberry Pi4B(8GBmem/bullseye64bit)で動かすと、
buf = stream.read(4096) の行で
OSError: [Errorno -9981] Input overflowed
というエラーで止まってしまった。
発生する箇所は、毎回違うが4分以降5分半くらいでだいたい止まってしまう..
エラーの内容が Input overflowed となっており、例外が出ているので
overflow時に例外を発生させないように
buf = stream.read(4096, exception_on_overflow=False)
として実行したら発生しなくなった。
p.s.
あとで調べたら、StackOverflowにも同じ内容が出てました。