2011-12-19 14 views
10

Ci scusiamo per la domanda newbie, ma sto cercando di eseguire il seguente codice (un esempio della documentazione PyAudio) sul mio Mac (OS 10.7.2):Get IOError: [Errno Input overflow] -9981 quando si imposta PyAudio Stream input e output su 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() 

l'errore che sto dando è:

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 

ho fatto una ricerca per questo errore su Google e ho trovato che sia rendendo il pezzo più grande o più piccolo potrebbe aiutare . Ho provato questo e non ha fatto differenza. Ho anche provato ad aggiungere nel seguente codice per intercettare un'eccezione di sovraccarico:

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

che evitava l'errore, ma invece di emettere il mio audio in ingresso, ho sentito un sacco di forte clic.

Per risolvere il problema, ho commentato l'output = True line e il programma è andato bene, ma non ha prodotto nulla. Ho commentato l'input = True e ho letto invece un file Wave e lo stream è stato in grado di emettere l'audio. Ho provato a creare 2 flussi, uno per l'input e uno per l'output, e anche questo non ha funzionato.

C'è qualcos'altro che posso fare per evitare questo errore?

Grazie in anticipo.

+1

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

risposta

1

ho eseguito nella stessa situazione quando installo manualmente pyaudio (PortAudio costruito dalla fonte), una soluzione non così perfetto è quello di scaricare il pyaudio per Apple Mac OS X (Universal) installarlo, che installerà solo per Python 2.6 e versioni precedenti . se esegui il tuo codice con /usr/bin/python2.6, allora hai finito. ma se si vuole veramente 2.7, copiare il modulo installato (pyaudio.py, _portaudio.so) nella cartella 2.7 /Library/Python/2.7/site-packages/.

Non so perché non funziona la creazione del modulo dalla sorgente.

0

C'è stato un errore in portaudio che fino a poco tempo fa ha causato molti errori di overflow spuri in OS X (vedere http://music.columbia.edu/pipermail/portaudio/2012-June/014167.html).

Ho confermato che lo snapshot giornaliero di portaudio dal 2012-08-06 corregge il bug.

+0

Ho l'ultima PortAudio (versione 19.20111121_4) insieme a py27 -pyaudio 0.2.7_0 e ottengo ancora questo errore, non importa quanto provo a cambiare la dimensione del blocco. sto usando mac os x 1.7.5 con python 2.7, puoi condividere più informazioni su come hai ottenuto che lo snapshot giornaliero di portaudio funzioni, se tu id? – samkhan13

+0

beh questa è una lunga attesa da così vecchia, ma sarei curioso di sapere anche ... – lollercoaster

Problemi correlati