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

如何选择使用哪个设备录制(Python PyAudio)

PyAudio 在 Raspberry Pi 上引发警告

无法用 pyaudio 录制多个波形(无默认输出设备)

PyAudio 输入溢出

如何使用 PyAudio 选择特定的输入设备