当前位置: 代码迷 >> 综合 >> 报错:OSError: [Errno -9998] Invalid number of channels(成功解决、采坑经历)
  详细解决方案

报错:OSError: [Errno -9998] Invalid number of channels(成功解决、采坑经历)

热度:43   发布时间:2023-12-15 05:14:38.0

目录

  • 1. 问题
  • 2. 解决
    • 2.1 更改 代码中的 channels 数目
    • 2.2 尝试重装 pyaudio

1. 问题

使用 Mac、 jupyter notebook、pyaudio,想要实现音频录制和播放,出现报错:

---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
<ipython-input-12-accd48de8cc7> in <module>51 52 if __name__ == '__main__':
---> 53     instantial_recorder()54 55     # voice_record_save_pretest()<ipython-input-12-accd48de8cc7> in instantial_recorder()26     # 此测试中录音播放均需硬件支持,无法通过 CI 的build27     global recorder_main
---> 28     recorder_main = AudioRecorder(sonic_conf, input_device_index=1)29 30 def voice_record_save_pretest():<ipython-input-8-2bac85483130> in __init__(self, sonic, block_size, **kwargs)41             frames_per_buffer = self.block_size,42             input = True,
---> 43             **kwargs44         )45 ~/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/pyaudio.py in open(self, *args, **kwargs)748         """749 
--> 750         stream = Stream(self, *args, **kwargs)751         self._streams.add(stream)752         return stream~/software/anaconda3/envs/tensorflow/lib/python3.6/site-packages/pyaudio.py in __init__(self, PA_manager, rate, channels, format, input, output, input_device_index, output_device_index, frames_per_buffer, start, input_host_api_specific_stream_info, output_host_api_specific_stream_info, stream_callback)439 440         # calling pa.open returns a stream object
--> 441         self._stream = pa.open(**arguments)442 443         self._input_latency = self._stream.inputLatencyOSError: [Errno -9998] Invalid number of channels

2. 解决

2.1 更改 代码中的 channels 数目

channels 由 1 改为 2 ,尝试失败
接着查看本地声卡支持的最大channels

import pyaudiop = pyaudio.PyAudio()
for i in range(p.get_device_count()):dev = p.get_device_info_by_index(i)print((i,dev['name'],dev['maxInputChannels']))
(0, 'MacBook Pro 麦克风', 1)
(1, 'MacBook Pro 扬声器', 0)

没毛病啊?

后来,回过头才发现,就是这里有问题啊:

应该将 input_device_index=1 改为 input_device_index=0

然后,就弹出了 使用麦克风权限的 界面…

兜兜转转,google来百度去,一把鼻涕一把泪,唉

Well done!

2.2 尝试重装 pyaudio

在这里插入图片描述

尝试使用 conda ,不再用 pip 安装:

在这里插入图片描述
意思是,使用pip来安装只能保证 portaudio 正确的安装,而使用conda安装的pyaudio,会同时确保 portaudio 和 pyaudio 同时正确安装(portaudio作为pyaudio的依赖项),或者告诉你安装失败的原因。

参考:Python package installation issues: PyAudio, PortAudio

这是一条不归路,浪费了我半天的时间!!

参考:[Pyaudio] Error: invalid number of channels -9998

  相关解决方案