2011-12-19 11 views
10

Przepraszam za pytanie o newbie, ale próbuję uruchomić poniższy kod (przykład z dokumentacji PyAudio) na moim Macu (OS 10.7.2):Odczyt IOError: [Przepełnione wejście Errno] -9981 podczas ustawiania wejścia i wyjścia PyAudio Stream na True

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() 

błąd, który daję jest:

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 

zrobiłem poszukiwanie tego błędu w Google i okazało się, że albo czyniąc kawałek większe lub mniejsze może pomóc . Próbowałem tego i nie robiło to różnicy. Próbowałem również dodanie w poniższym kodzie złapać wyjątek przeciążeniem:

try: 
    data = stream.read(chunk) 
except IOError as ex: 
    if ex[1] != pyaudio.paInputOverflowed: 
     raise 
    data = '\x00' * chunk 

Że uniknąć błędu, ale zamiast wyprowadzania moje wejście audio, słyszałem kilka głośne kliknięcie.

Aby rozwiązać problem, zakomentowałem wyjście output = True line, a program działał poprawnie, ale nic nie wyświetlił. Skomentowałem input = True i zamiast tego odczytałem plik Wave, a strumień był w stanie wyprowadzić dźwięk. Próbowałem utworzyć 2 strumienie, jeden dla wejścia i jeden dla wyjścia, który też nie działał.

Czy jest coś jeszcze, co mogę zrobić, aby uniknąć tego błędu?

Z góry dziękuję.

+1

Zobacz http://stackoverflow.com/questions/33837097/pyaudio-recorder-script-ioerror-errno-input-overflowed-9981/34021599#34021599 – am70

Odpowiedz

1

biegnę w takiej samej sytuacji, kiedy ręcznie zainstalować pyaudio (zbudowany portaudio od źródła), nie tak idealne obejście jest pobranie pyaudio dla Apple Mac OS X (Universal) zainstalować go, co będzie tylko zainstalować go dla Pythona 2.6 i poprzednich wersji . jeśli uruchomisz swój kod za pomocą /usr/bin/python2.6, to jesteś gotowy. , ale jeśli naprawdę chcesz 2.7, skopiuj zainstalowany moduł (pyaudio.py, _portaudio.so) do folderu 2.7 /Library/Python/2.7/site-packages/.

Nie wiem, dlaczego nie działa budowanie modułu ze źródła.

0

Wystąpił błąd w portaudio, który do niedawna powodował wiele fałszywych błędów przepełnienia w OS X (patrz http://music.columbia.edu/pipermail/portaudio/2012-June/014167.html).

Potwierdziłem, że codzienna migawka portaudio z dnia 2012-08-06 naprawia błąd.

+0

mam najnowszą portaudio (wersja 19.20111121_4) wraz z py27 -pyaudio 0.2.7_0 i nadal otrzymuję ten błąd, niezależnie od tego, jak próbuję zmienić rozmiar porcji. używam mac os x 1.7.5 z python 2.7, czy możesz udostępnić więcej informacji o tym, jak uzyskać codzienną migawkę portaudio do pracy, jeśli jesteś id? – samkhan13

+0

cóż, jest to odległy czas, od tak dawna, ale też chciałbym wiedzieć ... – lollercoaster

Powiązane problemy