PyAudio IOError:没有可用的默认输入设备
Posted
技术标签:
【中文标题】PyAudio IOError:没有可用的默认输入设备【英文标题】:PyAudio IOError: No Default Input Device Available 【发布时间】:2011-06-08 00:19:58 【问题描述】:我在 Ubuntu 10.10 x64 的 Enthought Python Distribution (Python 2.6.6) 下使用 PyAudio。
>>> import pyaudio
>>> pa = pyaudio.PyAudio()
>>> pa.get_default_input_device_info()
Traceback (most recent call last):
File "<pyshell#24>", line 1, in <module>
pa.get_default_input_device_info()
File "/usr/lib/python_epd/lib/python2.6/site-packages/pyaudio.py", line 936, in get_default_input_device_info
device_index = pa.get_default_input_device()
IOError: No Default Input Device Available
这与我尝试打开输入流时遇到的错误相同。有相应的错误“IOError: No Default Output Device Available”
【问题讨论】:
试试pa.get_device_count()
会得到什么?
@mtrw pa.get_device_count() 返回 0
pyaudio
安装通过 sudo apt-get install python-pyaudio
在 Ubuntu-11.10 上工作
所以它告诉你没有你想要的东西,或者它找不到你想要的东西,或者你没有权限访问你想要的东西。在我看来是合理的。也许你真的没有输入设备?
DIY!嗨。获取资源 - 编译 - ... - 利润!
【参考方案1】:
好的,这是一个不太漂亮但对我有用的解决方案。 根据我对 ulidtko 回答的评论,pyaudio 不是问题,而是 pyaudio 应该绑定到的底层 PortAudio。
在 ubuntu 上,portaudio 驱动程序与此软件包一起安装:
sudo apt-get install python-gnuradio-audio-portaudio
你必须已经有了这个,因为你说你的股票 ubuntu 可以很好地运行你的代码(尽管有一些可以忽略的调试消息)
如果你在运行 enthought 的 python 时查询你的 portaudio 模块的位置,你会发现如下:
>>> import pyaudio
>>> pyaudio.pa.__file__
'/opt/epd-7.2-2-rh5-x86_64/lib/python2.7/site-packages/_portaudio.so'
以及股票 ubuntu 上的以下内容:
In [1]: import pyaudio
In [2]: pyaudio.pa.__file__
Out[2]: '/usr/lib/pymodules/python2.7/_portaudio.so'
我将 enthought _portaudio.so 移开,并将其替换为系统 _portaudio.so 的链接,现在包括 chaco demo/advanced 目录中可爱的频谱分析仪在内的所有内容都可以正常工作:
cd /opt/epd-7.2-2-rh5-x86_64/lib/python2.7/site-packages/
mv _portaudio.so _portaudio.so.originalEPD
ln -s /usr/lib/pymodules/python2.7/_portaudio.so
【讨论】:
我在 Ubuntu 12.04 中使用 EPD 7.3(64 位)时遇到了同样的问题,并且该解决方案有效。一个区别:我安装了 python-pyaudio 而不是 python-gnuradio-audio-portaudio。 找不到包python-gnuradio-audio-portaudio
甚至更新apt-get【参考方案2】:
我会推荐PYO 用于音频 I/O 和合成,我发现它真的很容易上手。 这里有一些代码来说明我如何让 PYO 在处理它以改变它的音高之后获取和输出音频输入:
from pyo import *
serv = Server(duplex=1).boot()
serv.start()
shiftfreq = 329.63
# 329.63 is the frequency for the E note
mic = Input(chnl=0)
shift = FreqShift(mic, shift=shiftfreq, mul=.5).out()
serv.gui(locals())
PYO 还允许您动态更改合成器、发生器或任何东西的频率和参数,这对我来说是最大的吸引力,因为我主要使用它来编程现场合成器乐器。
它还有一个很棒的manual...
【讨论】:
【参考方案3】:终于为我工作了:
从源代码构建和安装 portaudio 并安装最新版本的 pyaudio。 然后在 /usr/local/lib 中将 libportaudio.so.2.0.0 重命名为 oldlibportaudio.so.2.0.0 并在 /usr/lib/x86_64-linux-gnu 中创建了一个新的软链接sudo mv libportaudio.so.2.0.0 oldlibportaudio.so.2.0.0
sudo ln -s /usr/lib/x86_64-linux-gnu/libportaudio.so.2.0.0 libportaudio.so.2.0.0
在 Ubuntu 20.04 x64 上测试
【讨论】:
这对我有用【参考方案4】:PyAudio 为跨平台音频 I/O 库 PortAudio 提供 Python 绑定。
http://people.csail.mit.edu/hubert/pyaudio/
您是否安装了 PortAudio 软件? pyaudio
需要它才能工作。
【讨论】:
是的,PortAudio 已安装。我认为这与 Enthought Python 发行版有关。在标准发行版下,PyAudio 可以正常工作。 问题在于 Enthoughts portaudio,因为 pyaudio 模块是相同的。【参考方案5】:检查这个 https://github.com/shichao-an/soundmeter/issues/7
你所要做的就是
安装 ALSA:sudo apt-get install libasound-dev
然后构建portaudio(这个版本pa_stable_v190600_20161030.tgz
)
http://www.portaudio.com/download.html
然后获取root权限(在Ubuntu下sudo su root
普通su root
不起作用。)
将 portaudio 存档放在 /usr/src
中并使用 tar xvfz pa_snapshot.tgz
解压缩它,这将生成目录 /usr/src/portaudio
。
进入该目录并执行以下命令:
./configure
make
make install
ldconfig
必须在成功安装 portaudio 后运行 linrad
配置脚本,以使 Linrad 知道 portaudio 可用这一事实。
确保在 ./configure
文件中将 ALSA 设为 yes
Target ...................... x86_64-unknown-linux-gnu
C++ bindings ................ no
Debug output ................ no
ALSA ........................ yes
ASIHPI ...................... no
OSS ......................... yes
JACK ........................ no "
安装最新版pyaudio
(PyAudio-0.2.11.tar.gz
)
【讨论】:
【参考方案6】:从以下来源安装 pyaudio 对我有用
conda install nwani::portaudio nwani::pyaudio
reference : Mamun Or Rashid 的回答... OSError: No Default Input Device Available
【讨论】:
以上是关于PyAudio IOError:没有可用的默认输入设备的主要内容,如果未能解决你的问题,请参考以下文章
获取 IOError: [Errno Input overflowed] -9981 将 PyAudio Stream 输入和输出设置为 True