Ai_GirlFriend/xuniYou/调试步骤.md
2026-03-02 18:57:11 +08:00

3.9 KiB
Raw Permalink Blame History

NO_VALID_AUDIO_ERROR 调试步骤

🔍 问题分析

从日志来看ASR 连接已打开,但是报错 NO_VALID_AUDIO_ERROR,说明服务器没有收到有效的音频数据。

已完成的修复

  1. 添加了 ptt_on 信号发送(在 startTalking 方法中)
  2. 添加了 frameSize: 5 参数(启用实时音频帧传输)
  3. 已有 onFrameRecorded 回调(实时发送音频帧)
  4. 已有 onStop 回调(作为备用方案,发送完整文件)

📋 重新编译和测试

1. 重新编译项目

在 HBuilderX 中:

  1. 停止当前运行
  2. 清理缓存:菜单 -> 运行 -> 清理缓存
  3. 重新运行到手机/模拟器

2. 测试步骤

  1. 打开 App进入语音通话页面
  2. 按住"按住说话"按钮
  3. 说话 3-5 秒
  4. 松开按钮
  5. 观察日志

3. 预期日志(成功的情况)

✅ 开始说话, isTalking 设置为: true
📤 发送 ptt_on 信号
✅ ptt_on 信号发送成功
录音未启动,开始启动录音
=== startRecording 被调用 ===
✅ 录音已开始
🎤 收到音频帧 #1, isTalking: true, frameBuffer size: 3200
✅ 发送音频帧到服务器, 帧号: 1
✅ 音频帧发送成功, 帧号: 1
🎤 收到音频帧 #2, isTalking: true, frameBuffer size: 3200
...
=== stopTalking 被调用 ===
❌ 停止说话, isTalking 设置为: false
🛑 停止录音并准备发送...
⏹️ 录音已停止

4. 如果还是没有 "🎤 收到音频帧" 日志

说明 onFrameRecorded 在你的设备上不支持,这时会自动降级到 onStop 方案:

预期日志(降级方案):

✅ 开始说话, isTalking 设置为: true
📤 发送 ptt_on 信号
✅ ptt_on 信号发送成功
录音未启动,开始启动录音
✅ 录音已开始
=== stopTalking 被调用 ===
🛑 停止录音并准备发送...
⏹️ 录音已停止
📁 文件路径: /xxx/recorder/xxx.pcm
✅ 文件读取成功
📊 是否为 ArrayBuffer: true
📊 文件大小: 160000 bytes
📦 开始分片发送
📤 发送第 1 片,大小: 3200 bytes
✅ 第 1 片发送成功
...
✅ 所有音频片段发送完成
✅ ptt_off 信号发送成功

🐛 如果还是报错

检查点 1确认 ptt_on 信号是否发送

在日志中搜索:

  • 📤 发送 ptt_on 信号
  • ✅ ptt_on 信号发送成功

如果没有这些日志,说明代码没有重新编译。

检查点 2确认音频数据是否发送

在日志中搜索:

  • 🎤 收到音频帧(实时方案)
  • 📤 发送第 X 片(降级方案)

如果没有这些日志,说明音频数据没有发送到服务器。

检查点 3WebSocket 连接状态

确认日志中有:

WebSocket onOpen

并且在发送音频前WebSocket 状态为 1OPEN

🔧 临时调试方案

如果上述都正常,但还是报错,可以尝试:

方案 1增加延迟

在发送 ptt_on 后,等待 500ms 再开始录音:

// 发送 ptt_on 信号
this.socketTask.send({ data: 'ptt_on' })

// 等待 500ms让服务器准备好
await new Promise(resolve => setTimeout(resolve, 500))

// 开始录音
if (!this.isRecording) {
    this.startRecording()
}

方案 2检查服务器日志

查看服务器日志中是否有:

INFO - ASR connection opened
INFO - mic_enabled set to True

如果没有 "mic_enabled set to True",说明服务器没有收到 ptt_on 信号。

方案 3手动测试 WebSocket

使用 WebSocket 测试工具(如 Postman连接到

ws://你的服务器地址/voice/call?token=你的token&ptt=true

然后手动发送:

  1. 文本消息:ptt_on
  2. 二进制消息:一些音频数据
  3. 文本消息:ptt_off

看服务器是否正常响应。

📞 联系支持

如果以上步骤都无法解决,请提供:

  1. 完整的客户端日志(从连接到报错)
  2. 完整的服务器日志(从连接到报错)
  3. 设备信息Android 版本、手机型号)
  4. uni-app 版本和 HBuilderX 版本