You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派Zero上PvRecorder读取速度不足问题求助

在树莓派Zero上使用Picovoice(Rhino语音转意图+PvRecorder)的缓冲区溢出问题

我在树莓派Zero上使用Picovoice的Rhino语音转意图工具和PvRecorder录音模块,代码如下:

from pvrecorder import PvRecorder
import pvrhino

# 我的Picovoice密钥
key='my_access_key' # 已移除实际密钥

# 创建Rhino实例
rhino = pvrhino.create(
    access_key=key,
    context_path='/home/aashvikt/Desktop/MiniMate/Contexts/Mini-Mate-Commands_en_raspberry-pi_v2_1_0.rhn'
)

# 创建录音器
recorder = PvRecorder(device_index=-1,frame_length=512)
recorder.start()

def getNextAudioFrame():
    return recorder.read()

while True:
    audioFrame = getNextAudioFrame()
    isFinalized = rhino.process(audioFrame)
    if isFinalized:
        inference = rhino.get_inference()
        if inference.is_understood:
            recorder.stop()
            intent = inference.intent
            slots = inference.slots
            print(f"intent: {intent}\nslots: {slots}")
            recorder.start()
        else:
            print('无法识别')

rhino.delete()

运行代码时出现警告:[WARN]- Overflow: Reader not reading fast enough,使用的是USB麦克风,请问可能是什么问题?


可能的原因及解决办法

1. 树莓派Zero性能瓶颈

树莓派Zero的CPU性能较弱,rhino.process()处理音频帧的速度跟不上录音器采集音频的节奏,导致音频缓冲区数据堆积溢出。

解决措施:

  • 降低frame_length参数值,比如从512调整为256,减少单次处理的数据量,降低CPU单次计算负载
  • 移除循环中不必要的录音启停操作:代码里的recorder.stop()和recorder.start()会额外消耗系统资源,保持录音持续运行即可,只在程序退出时停止录音

2. 采样率不匹配

Rhino默认使用16kHz采样率,如果USB麦克风的采样率与此不符,PvRecorder需要额外进行采样率转换,进一步消耗CPU资源。

解决措施:

  • 用arecord --dump-hw-params命令查看USB麦克风的硬件采样率
  • 创建PvRecorder时显式指定16kHz采样率:
recorder = PvRecorder(device_index=-1, frame_length=512, sample_rate=16000)

3. 系统音频缓冲区配置不合理

树莓派默认的ALSA音频缓冲区可能过小,导致录音数据来不及处理就溢出。

解决措施:

  • 修改/etc/asound.conf配置文件,增大缓冲区大小(替换card 1为你的USB麦克风设备编号):
pcm.!default {
    type hw
    card 1
}
ctl.!default {
    type hw
    card 1
}
pcm.dmixer {
    type dmix
    ipc_key 1024
    ipc_perm 0666
    slave {
        pcm "hw:1,0"
        period_time 0
        period_size 1024
        buffer_size 4096
        rate 16000
    }
}
  • 重启树莓派使配置生效

4. 后台进程占用CPU资源

树莓派Zero本身性能有限,若后台运行其他高CPU占用程序,会导致音频处理线程无法及时读取音频帧。

解决措施:

  • 用top命令查看CPU占用情况,关闭不必要的后台进程
  • 给Python脚本设置更高优先级,比如用nice -n -10 python3 your_script.py运行(替换your_script.py为你的脚本文件名)

内容的提问来源于stack exchange,提问作者aashvikt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:35:19