python - 获取 IOError : [Errno Invalid number of channels] -9998 when using mic with PyAudio on Raspberry Pi

标签 python raspberry-pi raspbian raspberry-pi2 pyaudio

坏消息,大家好!

我尝试通过 PyAudio 在我的 Raspberry Pi 上使用麦克风,但没有成功。麦克风已连接到 USB 声卡。

当我通过“arecord”时麦克风工作:

pi@raspberrypi ~ $ arecord -D plughw:0,0 -f cd test2.wav
Recording WAVE 'test2.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

但是,当我在 PyAudio 中测试 record.py 时,出现错误。对于使用 PyAudio 的 Python 中的所有程序,该错误都是相同的:

pi@raspberrypi /usr/src/pyaudio/test $ python record.py 
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
Expression 'parameters->channelCount <= maxChans' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 1438
Expression 'ValidateParameters( inputParameters, hostApi, StreamDirection_In )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2742
Traceback (most recent call last):
  File "record.py", line 26, in <module>
frames_per_buffer=CHUNK)
  File "/usr/local/lib/python2.7/dist-packages/pyaudio.py", line 747, in open
stream = Stream(self, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pyaudio.py", line 442, in __init__
self._stream = pa.open(**arguments)
IOError: [Errno Invalid number of channels] -9998

感谢您的帮助

最佳答案

您有连接到 Raspberry PI 的声卡吗? 默认情况下,您会获得音频输出,但不会获得音频输入。 您可以通过运行检查

alsamixer

如果您按 F6,您应该会看到您的声卡已列出。 如果您按 F4,您应该会看到捕获设备(如果有)

我使用了来自 eBay 的廉价 USB 声卡进行测试。

在您拥有带音频输入的声卡后,请确保您配置 pyaudio 以使用正确的声卡索引和声道数(我的是单声道音频输入,而不是立体声)。

pyaudio.PyAudio().open(format=pyaudio.paInt16,
                        rate=44100,
                        channels=1, #change this to what your sound card supports
                        input_device_index=1, #change this your input sound card index
                        input=True,
                        output=False,
                        frames_per_buffer=1024)

您可以使用 pyaudio.PyAudio 的实例方法 get_device_countget_device_info_by_index 来获取索引。

关于python - 获取 IOError : [Errno Invalid number of channels] -9998 when using mic with PyAudio on Raspberry Pi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31073667/

相关文章:

dart - Dart SDK在Raspberry Pi上构建失败

python - Windows下Jupyter中的kernel-1234.json在哪里?

python - 使用相互或循环(循环)导入时会发生什么?

java - 通过 Socket 将字符串从 Java (PC) 发送到 C (Raspberry Pi)

python - 如何在 askopenfilename 中写入远程机器路径

raspberry-pi - 在 Raspberry Pi 上启动时自动启动 deluge 守护进程 1.3.10

python - 将从 HTML 表中抓取的数据写入 CSV 文件

python - PIL 消除颜色区域之间的颜色混合

raspberry-pi - 直接控制软盘驱动器

python-3.x - 升级到 Debian Buster 后,Python splinter 脚本失败,并出现 chromedriver 异常