Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pyaudio-OSError: [Errno -9999] Unanticipated host error

I just want to run a simple python audio code:

import pyaudio
import wave
import sys

CHUNK = 1024
wf = wave.open("4.wav", 'rb')
# instantiate PyAudio (1)
p = pyaudio.PyAudio()
# open stream (2)
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True)

but I got the following error:

Traceback (most recent call last):
  File "rec2.py", line 17, in <module>
    output=True)
  File "C:\Users\Surena\Anaconda3\lib\site-packages\pyaudio.py", line 750,  in open
    stream = Stream(self, *args, **kwargs)
  File "C:\Users\Surena\Anaconda3\lib\site-packages\pyaudio.py", line 441, in __init__
    self._stream = pa.open(**arguments)
OSError: [Errno -9999] Unanticipated host error

I tried another pyaudio record too, the same error came up. I also tried uninstall pyaudio and install it again using pip install pyaudio, but it did not help. I even uninstalled anaconda3 and reinstall it.nothing changed.

what is the problem?

like image 210
RahimEnt Avatar asked Jan 07 '17 07:01

RahimEnt


2 Answers

I had the same problem, and I fix it just by enable/disable the access to the microphone in Setting>Confidentiality>Microphone (on Windows 10)

like image 126
Nair Avatar answered Nov 20 '22 08:11

Nair


You need to collect additional information to understand the problem. From Portaudio docs:

PortAudio usually tries to translate error conditions into portable PaError error codes. However if an unexpected error is encountered the paUnanticipatedHostError code may be returned. In this case a further mechanism is provided to query for Host API-specific error information. If PortAudio returns paUnanticipatedHostError you can call Pa_GetLastHostErrorInfo() to retrieve a pointer to a PaHostErrorInfo structure that provides more information, including the Host API that encountered the error, a native API error code and error text.

If you have this error on Linux, most likely it is caused by incompatible sample rate you are trying to request from the driver. This value

            rate=wf.getframerate()

can be changed to 16000, 44100 and 48000 to test which rate is actually supported.

like image 45
Nikolay Shmyrev Avatar answered Nov 20 '22 09:11

Nikolay Shmyrev