Skip to content

fix(audio): 优先麦克风原生格式并拦截空录音 - #1135

Merged
H-Chris233 merged 4 commits into
Open-Less:betafrom
cassieliang6709:fix/microphone-native-format-recovery
Oct 7, 2026
Merged

H-Chris233 merged 4 commits into
Open-Less:betafrom
cassieliang6709:fix/microphone-native-format-recovery

Conversation

@cassieliang6709

@cassieliang6709 cassieliang6709 commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

摘要

麦克风设备存在但其默认格式无法构造/播放时,当前录音立即失败;持续全零的 PCM 又会被当作存活输入送入后续识别。本 PR 优先尝试所选麦克风的原生格式,再尝试设备实际支持的其他格式及可用输入设备;转写结束前拒绝空/全零录音。

修复 / 新增 / 改进

  • 原生采集格式优先,保留设备声道和采样格式;不再为 Android 强制改成硬件未声明的单声道配置。ASR 仍接收转换后的 16 kHz/mono/i16 PCM。
  • 默认格式构造或播放失败后,尝试同设备明确支持的格式/采样率,再按系统默认及其他输入设备恢复。权限拒绝立即停止尝试;未成功启动的候选不会把 PCM 或运行期错误送入当前会话。
  • 在共享 BufferedTranscriptionSession 检查音频证据,拒绝空/全零数据;微弱非零音频不受语音阈值误杀。取消和原有服务故障保留原来的错误语义。
  • 补充格式候选、恢复顺序、权限拒绝、空/全零录音、弱信号及取消回归测试,并提供独立录音模块测试脚本。

兼容

  • 不修改用户保存的首选设备;恢复后实际使用的设备和格式记入已有录音诊断日志。
  • 不把“有非零 PCM”当作“确认有语音”。这不是 VAD,也不保证 ASR 不会对噪声产生错误内容。
  • 不在录音中途自动切设备;运行期掉线继续走现有错误/取消路径,避免把用户没说话误判成设备故障。
  • 不包含实时 ASR 写入、最终文本自动替换或编号处理;这些见实时输入与结构化校验 PR fix(dictation): 长按实时原文、受保护替换与编号校验 #1134。

测试计划

  • 成功录音的 API、辅助语音和 Host 面板集成夹具显式提供非零 PCM;保持既有成功、取消、历史及资源释放断言,不修改生产空音频保护。
  • 新增 Less Computer 上层回归:没有 PCM 或全零 PCM 必须返回不可重试错误、发布失败状态、不生成聊天错误,并释放会话。
  • 本地 Core 单元:1084 项通过、1 项既有忽略;全部 15 个集成测试目标:181 项通过;doc tests 通过。
  • 改动的三个测试文件 rustfmt --check、git diff --check 通过。
  • 原生录音模块与听写引擎的既有针对性测试在前次审查中分别通过 12 项和 28 项;本轮未重复无改动的模块测试。
  • 新 head 5779e9f 已推回原贡献者分支,合入 beta@24a9a446。CI run 37657300405 已 completed / success,全部 7 项检查通过,包括此前失败的 Linux Core 和 macOS Host 单元测试。
  • macOS 麦克风切换与 Android 原生采集仍未做实机验收。

@cassieliang6709
cassieliang6709 marked this pull request as ready for review October 2, 2026 16:03
@H-Chris233 H-Chris233 self-assigned this Oct 7, 2026
@H-Chris233

Copy link
Copy Markdown
Collaborator

我来认领这个 PR 的代码审查,避免重复工作。接下来会基于最新 beta 与当前 PR head,检查需求符合度、实现正确性和回归风险。

@H-Chris233
H-Chris233 merged commit d51006c into Open-Less:beta Oct 7, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants