fix(voice-input): 修复跨音频块重采样的异常零值 - #3976
Conversation
Signed-off-by: Dash <125997726+dashhuang@users.noreply.github.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
| Filename | Overview |
|---|---|
| apps/desktop/src/renderer/voice-input/WebMicAudioEngine.ts | 为 ScriptProcessor 回退重采样保存上一块末样本,并在停止录音时清除该状态。 |
| apps/desktop/src/renderer/voice-input/pcm16k-worklet.js | 修正 Worklet 跨块插值的负索引读取,并将新增状态纳入录音重置流程。 |
| apps/desktop/src/renderer/voice-input/tests/audioResampling.test.ts | 为两条采集路径新增共享回归矩阵,以离线连续插值结果验证波形、尾包和状态隔离。 |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart LR
A[连续输入音频] --> B{采集路径}
B -->|AudioWorklet| C[Worklet 分块重采样]
B -->|ScriptProcessor 回退| D[Renderer 分块重采样]
C --> E[使用 previousSample 处理跨块插值]
D --> E
E --> F[累积 PCM16 输出]
G[录音停止或重启] --> H[清除 pending、carry 与 previousSample]
H --> C
H --> D
Reviews (1): Last reviewed commit: "fix(voice-input): 修复跨音频块重采样的异常零值" | Re-trigger Greptile
|
命中 UI 路径(apps/desktop/src/renderer/voice-input/WebMicAudioEngine.ts / apps/desktop/src/renderer/voice-input/pcm16k-worklet.js)但 description 未附界面效果证据——建议补充改动后效果:截图/录屏,或改动后界面的 HTML 页面(```html 代码块、.html 附件或在线预览链接),便于确认界面符合 DESIGN.md 设计规范 |
MagicLizi
left a comment
There was a problem hiding this comment.
代码重审通过:跨音频块重采样负索引已用上一块尾样本插值,当前 head 没有 P0/P1,conversation 已 resolve。
|
合了。跨音频块那一下负索引会插出一串零,听感上像吞字;现在用上一块尾样本接着插,这块不用再猜。 |
这次改了什么
摘要
连续音频块重采样时,跨块插值位置可能落在前一块的最后一个样本。原实现读取当前块的负索引,得到 NaN,转成 PCM16 后产生异常零值。48kHz 恒定输入分成 100 个 128 样本块时,修复前的 4,267 个输出样本中可复现 33 个异常零值。
AudioWorklet 和 ScriptProcessor 回退路径现在都保留上一块末样本供跨块插值,并在录音重置时清除该状态。新增同一套输出回归矩阵覆盖两条路径,确保分块后的波形与离线连续插值一致。
变更类型
fix缺陷修复范围
UI 变化
怎么验证的
自动验证
回归包含 48k/44.1k/32k/16k/8kHz 输入、128/1024/混合单样本分块、恒定与变化波形、尾包只发送一次、录音重启状态隔离。波形使用绝对位置的离线插值作为独立基准。
手工验证
进程内加载实际 Worklet,以合成输入复现并核对 PCM 输出;另对完整 diff 做独立审查,未发现 P0/P1。
未执行的验证
未启动真实麦克风、未运行端到端 ASR 准确率测试,也未进行 Windows 设备实测。本修复为共享的纯计算路径,回归使用内存输入,不访问设备、账号或云服务。全量单测由 CI 执行。
风险
风险分类
影响与回滚
提交前检查
git commit -s,见 DCO)