Mac(OS 10.7.2)で次のコード(PyAudioドキュメントの例)を実行しようとしています。
import pyaudio
import sys
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 5
p = pyaudio.PyAudio()
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
output = True,
frames_per_buffer = chunk)
print "* recording"
for i in range(0, 44100 / chunk * RECORD_SECONDS):
data = stream.read(chunk)
stream.write(data, chunk)
print "* done"
stream.stop_stream()
stream.close()
p.terminate()
私が与えているエラーは次のとおりです。
Traceback (most recent call last):
File "PyAudioExample.py", line 24, in <module>
data = stream.read(chunk)
File "/Library/Python/2.7/site-packages/pyaudio.py", line 564, in read
return pa.read_stream(self._stream, num_frames)
IOError: [Errno Input overflowed] -9981
Googleでこのエラーを検索したところ、チャンクを大きくしたり小さくしたりすると役立つことがわかりました。私はこれを試しましたが、違いはありませんでした。また、次のコードを追加して、オーバーロード例外をキャッチしようとしました。
try:
data = stream.read(chunk)
except IOError as ex:
if ex[1] != pyaudio.paInputOverflowed:
raise
data = '\x00' * chunk
これでエラーは回避されましたが、入力オーディオを出力する代わりに、大きなカチッという音が聞こえました。
トラブルシューティングのために、output = True行をコメントアウトし、プログラムは正常に実行されましたが、何も出力されませんでした。input = Trueをコメントアウトし、代わりにWaveファイルを読み込んだところ、ストリームはオーディオを出力できました。入力用と出力用の2つのストリームを作成しようとしましたが、どちらも機能しませんでした。
このエラーを回避するために他にできることはありますか?