diff --git a/docs/test-cases/【测试用例】敲木鱼音频延迟上传与本地标准化-2026-06-06.md b/docs/test-cases/【测试用例】敲木鱼音频延迟上传与本地标准化-2026-06-06.md new file mode 100644 index 00000000..0df29319 --- /dev/null +++ b/docs/test-cases/【测试用例】敲木鱼音频延迟上传与本地标准化-2026-06-06.md @@ -0,0 +1,81 @@ +# 敲木鱼音频延迟上传与本地标准化测试用例 + +## 覆盖目标 + +- 选择上传或录音结束后只在浏览器本地处理,不请求 OSS 上传凭证。 +- 用户点击 `生成` 时才上传处理后的音频 Blob/File,并把确认后的 `WoodenFishAudioAsset` 放入创建 session payload。 +- 上传和录音统一执行前后声音过小片段裁切、最长 1 秒限制、近似 `-15 LKFS` 响度平衡和峰值保护。 +- 音频面板明确显示 `最长 1 秒`,并正确处理上传、录音、重置、禁用和错误状态。 +- OSS 上传 client 只接收 Blob/File,不接受 Data URL,并覆盖上传凭证、OSS POST、资产确认和错误分支。 + +## 音频处理 helper + +- 空文件:`size=0`,报 `音频文件为空,请重新选择。` +- 非音频 MIME:`text/plain`,报 `请选择音频文件。` +- 浏览器没有 `AudioContext`:报 `当前浏览器不支持音频处理。` +- `decodeAudioData` 失败:报 `音频解码失败,请重新选择。` +- 全静音或声音全低于阈值:报 `音频声音过小,请重新录制或上传。` +- 前后静音裁切:低于阈值的头尾帧被裁掉,`startFrame` 和 `frameCount` 正确。 +- 裁切后刚好 `1000ms`:允许通过。 +- 裁切后超过 `1000ms`:报 `音频最长 1 秒。` +- 上传来源 `uploaded` 与录音来源 `recorded`:返回 pending asset 保留对应 source。 +- 原文件名有扩展名:输出 `.wav` 文件名;无扩展名补 `.wav`;空白文件名输出 `creative-audio.wav`。 +- `URL.createObjectURL` 存在:`audioSrc` / `previewUrl` 为 blob URL;不存在时返回空字符串且不阻断处理。 +- 近似响度平衡:低 RMS 样本被拉向 `-15 LKFS` 目标。 +- 峰值保护:高峰值样本增益后不超过 `peakCeiling`。 +- 零能量 section:归一化阶段报声音过小。 +- WAV 编码:写入 RIFF/WAVE/data header、PCM16 数据长度和采样值。 + +## 音频输入面板 + +- 传入 `limitLabel` 时显示 `最长 1 秒`;未传入时不显示限制标签。 +- 无资产时显示默认音效文案。 +- 有资产且 `audioSrc` 存在时渲染 `