10

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つのストリームを作成しようとしましたが、どちらも機能しませんでした。

このエラーを回避するために他にできることはありますか?

4

2 に答える 2

1

pyaudio (ソースからビルドされた portaudio) を手動でインストールするときに同じ状況に遭遇します。完全ではない回避策は、Apple Mac OS X (ユニバーサル)用の pyaudio をダウンロードして インストールすることです。これは、python 2.6 および以前のバージョンに対してのみインストールされます。 . /usr/bin/python2.6 でコードを実行すると、完了です。ただし、本当に 2.7 が必要な場合は、インストールしたモジュール (pyaudio.py、_portaudio.so) を 2.7 フォルダー /Library/Python/2.7/site-packages/ にコピーします。

ソースからモジュールをビルドできない理由がわかりません。

于 2012-01-12T02:15:45.007 に答える
0

portaudio にはバグがあり、ごく最近まで OS X で多くの誤ったオーバーフロー エラーが発生していました ( http://music.columbia.edu/pipermail/portaudio/2012-June/014167.htmlを参照)。

2012-08-06 時点の portaudio の毎日のスナップショットでバグが修正されていることを確認しました。

于 2012-08-06T23:49:22.387 に答える