树莓派 4B/5、RK3568/RK3588 音频输入代码示例统一用Python pyaudio wave适配USB 麦克风、I2S 麦克风、板载音频输入一套代码通用。一、先装依赖bash运行sudo apt update sudo apt install portaudio19-dev python3-pip pip3 install pyaudio wave二、通用音频录制代码录音保存为 wavpython运行import pyaudio import wave # 配置参数 FORMAT pyaudio.paInt16 # 16位采样 CHANNELS 1 # 单声道 语音够用 RATE 16000 # 语音标准16k采样率 CHUNK 1024 # 每次读取帧数 RECORD_SECONDS 5 # 录音时长 WAVE_OUTPUT_FILENAME audio_in.wav # 初始化 p pyaudio.PyAudio() # 打开音频流 stream p.open( formatFORMAT, channelsCHANNELS, rateRATE, inputTrue, frames_per_bufferCHUNK ) print(开始录音...) frames [] # 循环读取音频输入 for _ in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data stream.read(CHUNK) frames.append(data) print(录音结束) # 关闭流 stream.stop_stream() stream.close() p.terminate() # 保存为wav文件 wf wave.open(WAVE_OUTPUT_FILENAME, wb) wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b.join(frames)) wf.close()三、实时读取音频流不存文件直接拿数据流适合做语音识别、降噪、AI 实时推理python运行import pyaudio import numpy as np FORMAT pyaudio.paInt16 CHANNELS 1 RATE 16000 CHUNK 512 p pyaudio.PyAudio() stream p.open( formatFORMAT, channelsCHANNELS, rateRATE, inputTrue, frames_per_bufferCHUNK ) print(实时获取音频输入按CtrlC退出) try: while True: # 读取原始字节 data stream.read(CHUNK) # 转成numpy数组方便算法处理 audio_np np.frombuffer(data, dtypenp.int16) # 这里可以做音量检测、VAD静音检测、送入AI模型 print(当前音频音量均值, np.abs(audio_np).mean()) except KeyboardInterrupt: print(停止采集) finally: stream.stop_stream() stream.close() p.terminate()四、选择指定麦克风设备多麦共存时用1. 先查看所有音频设备python运行import pyaudio p pyaudio.PyAudio() for i in range(p.get_device_count()): print(i, p.get_device_info_by_index(i)[name])2. 指定设备编号录制在stream.open加input_device_index设备号python运行stream p.open( formatFORMAT, channelsCHANNELS, rateRATE, inputTrue, input_device_index2, # 改成你查到的麦克风编号 frames_per_bufferCHUNK )五、平台适配说明树莓派 4B/5USB 麦、USB 声卡、I2S ReSpeaker 阵列 都能用采样率固定16000适配语音识别最佳RK3568/RK3588板载模拟麦、I2S、PDM 阵列 全部兼容自带 NPU可把读到的音频流直接送入本地语音模型六、常见问题报错找不到设备apt install alsa-utils执行arecord -l看麦克风是否被系统识别杂音大降低增益、改用 I2S/PDM 数字麦不用模拟麦采样率报错强制用 16000 或 8000 标准语音采样率