Pepper机器人用NAOqi/qi录音频存本地遇SignalLink无订阅问题求助
Pepper机器人音频录制存储本地的问题排查与实现修正
现有代码的核心问题定位
- 路径认知偏差:
ALAudioRecorder、ALAudioDevice都是运行在Pepper机器人端的后台常驻服务,调用接口时传入的文件路径,默认指向Pepper机器人内部Linux文件系统,并非运行脚本的本地机器路径。此前代码执行后生成的wav文件,实际已经保存在Pepper的/tmp/pepper/目录下,不会自动同步到本地。 - 第二版代码的调用错误:
- 服务绑定错误:代码中
sound变量被绑定到ALAudioDevice服务,该服务仅支持音频设备参数配置,没有音频录制的相关方法,实际录制需要绑定ALAudioRecorder服务。 - 未定义变量调用:代码末尾执行的
tts.stopMicrophonesRecording()中,tts变量全程未初始化,本该抛出未定义错误,只是因为前面的服务逻辑没有触发实际录制,才没有弹出明确报错。 - 终端输出的3条警告为qi框架的非致命提示:未创建qi Application实例、信号解绑时无对应订阅记录的提示,完全不影响功能运行,不需要额外排查处理。
完整实现录制+本地存储的操作步骤
- 第一步:在机器人端完成录制,确保文件生成在机器人内部存储
适配所有Pepper系统版本的可靠录制代码:
import naoqi from naoqi import ALProxy from time import sleep ROBOT_IP = '192.168.0.169' ROBOT_PORT = 9559 # 绑定正确的音频录制服务 recorder = ALProxy("ALAudioRecorder", ROBOT_IP, ROBOT_PORT) # 录制参数:机器人内部存储路径、wav格式、16kHz采样率、启用中央麦克风通道 recorder.startMicrophonesRecording( "/tmp/pepper/test.wav", "wav", 16000, [0, 0, 1, 0] ) sleep(3) recorder.stopMicrophonesRecording()
- 第二步:通过scp协议将机器人内部的录制文件拉取到本地机器
录制完成后,直接在本地终端执行scp命令即可完成文件传输(Pepper默认登录用户名为nao,默认密码为nao):
scp nao@192.168.0.169:/tmp/pepper/test.wav ./本地目标存储路径/
注意:需提前确保本地机器与Pepper处于同一局域网,无网络访问限制。
- 可选优化方案:如果需要跳过机器人内部文件中转环节,可在本地脚本中直接订阅
ALAudioDevice输出的原始音频流,边接收边写入本地文件,实现录制内容直接落地本地。
内容的提问来源于stack exchange,提问作者Zaid Afaneh
相关产品推荐
相关产品推荐

