Ubuntu 20.04通过PyAudio录制音频失败问题求助
解决Ubuntu 20.04下PyAudio录音ALSA错误及无音频问题
针对你遇到的ALSA报错、录制文件无音频的问题,可按以下步骤排查解决:
1. 确保PyAudio支持PulseAudio
你的系统默认使用PulseAudio作为声音服务器,但当前PyAudio可能仅基于ALSA编译,导致直接调用ALSA时找不到硬件声卡报错。
- 卸载现有PyAudio:
pip uninstall pyaudio - 安装系统提供的带PulseAudio支持的版本:
若使用conda环境,先安装依赖再重新编译:sudo apt install python3-pyaudiosudo apt install libpulse-dev pip install pyaudio --no-binary :all:
2. 调整代码适配PulseAudio设备
你指定的设备索引1虽为默认设备,但可优化代码逻辑,确保和PulseAudio兼容:
修改后的代码示例:
import wave import pyaudio CHUNK = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 1 # 改用PulseAudio默认采样率44100(若麦克风支持16000可改回) RATE = 44100 RECORD_SECONDS = 5 p = pyaudio.PyAudio() # 不指定设备索引,自动匹配系统默认输入设备 stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) print('Recording...') frames = [] for _ in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) print('Done') stream.stop_stream() stream.close() p.terminate() with wave.open('output.wav', 'wb') as wf: wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames))
也可先遍历设备列表,明确指定PulseAudio设备:
import pyaudio p = pyaudio.PyAudio() for i in range(p.get_device_count()): dev_info = p.get_device_info_by_index(i) print(f"Index {i}: {dev_info['name']}")
找到名称含pulse或default的设备索引,替换到代码的input_device_index参数中。
3. 检查音频设备权限
确认当前用户拥有访问音频设备的权限:
groups $USER
若输出不含audio组,执行以下命令添加并重新登录:
sudo usermod -aG audio $USER
4. 测试系统录音功能
先排除系统层面问题,用arecord测试:
arecord -f S16_LE -r 44100 -c 1 test.wav
录制完成后播放test.wav,若有声音则系统录音正常,问题仅出在PyAudio配置;若无声音,检查麦克风连接状态及系统声音设置中是否选中正确输入设备。
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

