ubuntu OSError:[Errno-9996] Invalid input device(Ubuntu安装pyaudio踩的坑)

在Ubuntu虚拟机中,作者遇到了安装pyaudio后运行程序时报错的问题。尝试了两种安装方法,分别是通过apt和pip,但分别出现了不同的错误。经过排查,作者怀疑是portaudio19-dev的手动安装导致的问题。最终,作者选择使用apt安装portaudio19-dev和python3.6-dev,解决了问题。博客强调了根据环境正确安装依赖和避免手动安装的必要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇到问题及经历:

1月5日,6日安装pyaudio成功,但是运行程序的时候会报错ubuntu OSError:[Errno-9996] Invalid input device,表示找不到输入设备。
google查找错误原因是没有查找到,csdn上也没有相关的帖子和错误。
(吐槽:搜的还全是四五年前的帖子,都是僵尸贴,都没个有用的,呸!)
在这里插入图片描述

检查ubuntu虚拟机功能,录音和播放功能都是正常的。开始怀疑是配置的问题。
转过头看一下我安装配置的步骤,我的pyaudio安装配置步骤是按照我5号写的博客(点击查看原文)上面的方法安装的。

按照方法一:

sudo apt-get install python-pyaudio python3-pyaudio 

安装以后,pyaudio的确是安装上去了,安装是pyaudio0.2.8的版本。在运行demo程序的时候会报错:
Please build and install the PortAudio Python bindings first

按照方法二:
安装好portaudio19-dev和python-dev后再pip3 install pyaudio
会自动安装最新版的pyaudio·版本是0.2.11。
运行程序的时候就会报错
ubuntu OSError:[Errno-9996] Invalid input device

两种方虽然都把pyaudio安装成功了,但是在运行程序的时候都是会报错的。方法一报错的Please build and install the PortAudio Python bindings first。我后面追加安装了portaudio19-dev还是会报错,然后我把pyaudio0.2.8的包卸载后,重新pip自动安装的就是0.2.11的版本,在0.2.11环境下就是报错ubuntu OSError:[Errno-9996] Invalid input device。按这个来看就是我在安装portaudio19-dev和python-dev的时候不对。根据官方文档的说法就是这两个东西是必不可少的。
在这里插入图片描述

解决过程:

回顾我之前安装这两玩意儿的步骤,安装portaudio19-dev的时候是下载tgz的压缩包,解压后在进行配置安装,步骤是没有问题。也显示success install portaudio了。安装python-dev的时候是使用apt安装的。
最有可能出问题就是安装portaudio19-dev到的时候,手动安装。虽然检查好几遍,所有步骤都是没问题的,也不用自行修改什么配置文件。但难说就是那一处有问题了。那就重头再来一下吧。幸好之前有拍过快照,直接转到上一次快照。
网上所有的帖子和官网都是说下载压缩包,解压进入portaudio目录,./configuremakemake install
在这里插入图片描述

再来一次我偏不,我就要用apt来!!!!
自动他不香咩,手动受罪干嘛????

sudo apt-get install portaudio19-dev

在这里插入图片描述
portaudio19-dev安装好就是安装python-dev了

sudo apt-get install python3.6-dev

在这里插入图片描述
如果会出现连接超时,下载不了的问题。后面加上点东西。

sudo apt-get install python3.6-dev --fix-missing

在这里插入图片描述
下载安装成功。
接下来就是pip下载pyaudio
pip3 install pyaudio在这里插入图片描述
测试一下:
在这里插入图片描述
调用未报错:Please build and install the PortAudio Python bindings first

用个demo测试一下:
在这里插入图片描述
在这里插入图片描述
成功!!!!

写在文末:官网上面写的是要python-all-dev,本来应该是使用

sudo apt-get install portaudio19-dev python-all-dev python3-all-dev

一次性都给他下载了,但是我下载的时候发现ubuntu日志信息中python3他给我下是3.5的。
在这里插入图片描述
我的环境是python3.6的(别问我为什么不用ubuntu自带的python3.5 ╭(╯^╰)╮)。赶紧伸出我的黄金无名指和中指,Ctrl+Z给他终止妊娠。最后下载python3.6-dev就可。

遇到同样的问题的朋友一定看清楚自己的环境和配置在搞,不然坑真的多(ಥ﹏ಥ)

这个错误通常是由于你的电脑上没有默认的输出设备引起的。你可以尝试在程序中指定输出设备,以解决这个问题。以下是使用PyAudio库和NumPy库同时录制扬声器和麦克风的声音并输出波形,并指定输出设备的示例代码: ```python import pyaudio import numpy as np import matplotlib.pyplot as plt # 配置参数 CHUNK = 1024 * 2 # 每个缓冲区的帧数 FORMAT = pyaudio.paInt16 # 采样位数 CHANNELS = 2 # 通道数 RATE = 44100 # 采样率 RECORD_SECONDS = 5 # 录制时长 # 初始化PyAudio p = pyaudio.PyAudio() # 获取默认的输出设备 default_output_device = p.get_default_output_device_info() # 打开扬声器的音频流,并指定输出设备 output_stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, output=True, output_device_index=default_output_device["index"]) # 打开麦克风的音频流 input_stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) # 创建一个NumPy数组来存储录制的音频数据 frames = [] # 录制音频 for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): # 从麦克风读取数据 data = input_stream.read(CHUNK) # 将数据发送到扬声器 output_stream.write(data) # 将数据添加到NumPy数组中 frames.append(np.frombuffer(data, dtype=np.int16)) # 关闭音频流 input_stream.stop_stream() input_stream.close() output_stream.stop_stream() output_stream.close() # 关闭PyAudio p.terminate() # 将NumPy数组转换为二维数组 samples = np.vstack(frames) # 绘制波形图 plt.plot(samples) plt.show() ``` 在这个示例中,我们使用 `p.get_default_output_device_info()` 函数获取默认的输出设备,并使用 `output_device_index` 参数指定输出设备。如果你的电脑上有多个输出设备,你需要根据自己的情况选择正确的设备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值