Files
rhinelab-ui/verification/AUDIO-DESIGN.md
T

91 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 声音重设计与验证
日期:2026-09-09。交付为原创配乐「Observatory / 观测室」、16 种程序合成音效、原片短音重构的逐字输入音效及实际终端集成。
## 依据和边界
查看本地《明日方舟》特别映像 [莱茵生命:访问] 的 6.76–40 秒画面联系表及现有逐帧记录;从原文件提取并测量同段声音。当前代理不能直接听辨音频,因此这些结果是画面观察、音轨数值分析与原创编配,不是对原曲旋律、乐器或 BPM 的听写。后续根据用户复刻逐字输入音效的要求,单独引入三个 38ms 原片短音,详见下文。
设定参照 [PRTS 收录的赫默档案](https://prts.wiki/w/赫默)、[克丽斯腾图鉴](https://prts.wiki/w/克丽斯腾),以及项目既有 `reference/LORE-SOURCES.md`。将科研秩序、探索与独行感转译为精细脉冲、开放和声和稀疏动机,是本次声音设计的解释,并非官方对莱茵生命音乐风格的规定。
原片为 25 fps、48 kHz 双声道 AAC。`scripts/analyze-reference-audio.mjs` 将左右声道各取 0.5,解码为 24 kHz 浮点 PCM 后按视觉段落计算 RMS;输出见 `reference/audio-analysis.json`。验证段 11.12–22.76 秒约 −25 dBFS RMS,欢迎页 22.76–26.92 秒约 −15.92,阵列 26.92–30.68 秒约 −13.05。由此保留「克制验证 → 欢迎渐强 → 阵列展开 → 特写收敛」的动态结构;音乐不直接照搬原片的峰值响度。
## 编配
- 原创 72 BPM、4/4、16 小节、53⅓ 秒循环。72 BPM 是本次选择,不是原片测定速度。
- Dmaj9、Bm11、Gmaj9、Asus2 的开放和声,后半段以轻微配音变化回答;音符与休止直接写在生成脚本中。
- `atmosphere.ogg`:低饱和度、缓慢交叠的和声;`motif.ogg`:带衰减谐波的键音及交错延迟;`pulse.ogg`:稀疏低频呼吸与设备点击。
- 所有音符尾音和早期反射按环形缓冲叠加,三轨使用同一音频时钟启动、同一循环长度。场景切换只改变声部音量,不重启音乐。
- 浏览状态三轨比例为 0.9 / 0.72 / 0.65;详情为 0.72 / 0.36 / 0.12;模型查看为 0.8 / 0.24 / 0.28。启动段随原片时间 22.76、26.92、34.3 秒调整编配,约 0.9 秒过渡。
- 总输出有余量与压缩保护;抽取、欢迎、阵列和拆组时音乐短暂降低到 65%,约 0.9 秒恢复。
## 音效
| 操作 | 声音构成 |
| --- | --- |
| 窗口打开 / 关闭 | 180ms 轻空气上扫与低音抬升 / 130ms 下扫收束 |
| 标签切换 / 系统操作 | 52ms 无长共鸣的电子点击 |
| 启动标志 | 约 720ms 低频 D–A 和声逐层点亮,缓起音与轻空气声 |
| 整块文字显现 | 64ms 低音量的数据脉冲,每块一次 |
| 输入 | 原片截取的三个 38ms 短音轮替,保留原攻击与频谱 |
| 上下切档 | 1.68 kHz 主共鸣,短促清脆的薄玻璃轻碰 |
| 左右切列 | 稍低的玻璃碰击与很轻的第二次接触,按方向轻微左右定位 |
| 抽取 / 返回 | 较长、明亮的悬起余音 / 阻尼更强、收束更快的落定声 |
| 确认 | 640 / 960Hz 两次电子短音,作为授权及保存的标识 |
| 权限扫描 | 轻扫声与四次等距电子脉冲 |
| 欢迎 / 阵列 | 缓起音的开放和声 / 错开的薄玻璃碰击 |
| 特写读取 | 两次极短的同频电子脉冲 |
| 拆解 / 重组 | 三次渐高的玻璃分离声 / 渐低、短尾的接合声 |
键音至少间隔 24ms,以通过 25fps 输入的连续触发;切档与切列至少 55ms、其他同类事件至少 120ms;活动音效组限制为 10。冻结、倒退或跳转超过 0.3 秒不补播历史事件;离开启动时停止残留启动音效。
## 设置与生命周期
系统设置提供音效、音乐各自的开关与音量,自动保存。旧版本关闭界面声音的用户升级后继续保持静音;首次使用会在首次点击或按键后解锁声音。浏览器禁止无交互自动播放时,先点击页面,再重播启动即可听到完整流程。
隐藏页面、离开页面或全部静音时暂停音频上下文,音乐保留位置。重新开启串行等待先前的 suspend 完成,修复快速切换造成的 resume / suspend 竞争。音乐加载期间再次关闭不会迟到起播;载入失败可在下一次交互重试,音效独立工作。音量拖动只保存声音偏好,不触发画质重建。
## 验证结果
- TypeScript 与 Vite 生产构建通过;原有大 bundle 提示仍存在。
- `reference/audio-check.html` 的浏览器检查全部通过:17 音效的有限样本、非静音、峰值与尾端归零;三轨解码时长和双声道接缝;启动事件;冻结与倒退;快速输入;切场景保留音乐;音乐独立开关;连续开关后的三轨恢复;全静音暂停和音效清空。
- 解码后每声道循环边界差值小于 0.01,时长误差小于 2ms;不把该数值结论等同于主观无缝听感。
- 在真实主界面检查了独立开关、音量控件和设置布局,并操作切档、切列、读取、模型拆解与重组。
- 完整开场实机播放结束后:输入声 71 / 71,进入详情、残留音效为 0,恢复原静音设置;再次含配乐重播时恰好启动三轨,中途停止后恢复静音、上下文暂停、轨道与音效均为 0。
- 听感尚未由代理人工试听确认,最终需要用户以耳机和扬声器试听。试听页提供 17 种音效按钮、配乐播放器和原片对照播放器。
## 2026-09-09 · 玻璃质感修订
用户进一步明确:交互对象像玻璃,声音应该清脆。当前音效按这一方向修订。使用约 1.2ms 接触起音和五组不等间隔共鸣频率;高阶共鸣更快衰减,最高模式限制在 8.5kHz 以下,加入很轻的 13ms 接触噪声。切档名义尾长 240ms,抽取 580ms,归位 220ms;指数衰减使实际主体更短。目标是薄玻璃轻碰的清亮感,属于合成音色设计,不宣称等同于真实玻璃录音。
保留原有输入节流与活动音效上限。试听页新增连续 40 次、间隔 55ms 的离线叠音检查,验证延长共鸣后仍有峰值余量。背景音乐的音符、声部与文件沿用上一版。
## 系统反馈与玻璃对象的触发修订
用户接受切换档案的玻璃方向,并要求检查作为 OS 的页面打开、Logo 和文字出现是否使用了合适的音效。当前按操作含义重新绑定:档案实体的切换、抽取、落定、阵列入场和拆组继续使用玻璃;检索、收藏、设置窗口及独立查看器开合采用电子升降音;内容标签和模型视角重置采用短电子点击。没有给悬停或所有文字更新逐一添加声音。
开场按原片时间码触发:9.16 秒标志启动和声,11.84 秒身份确认,19.48 秒扫描,21.84 秒授权确认,22.76 秒欢迎和声,23.52 / 25.04 秒整块文字显现,26.92 秒玻璃阵列,30.68 秒档案抽取,34.30 秒读取标记。14.68 / 16.92 秒的通用玻璃点击已删除,避免与逐字输入声重复。Logo、欢迎、扫描和读取均不再附加玻璃共鸣。
`reference/boot-audio.html` 提供真实界面的完整开场试听,从 6.76 秒白场开始;点击按钮解锁浏览器声音,可选择包含背景音乐。试听只临时开启音效,结束或停止后恢复保存的偏好;不写入本地设置。同步面板显示实际发出的输入声数量、音频状态与完成情况,可与 71 个输入揭示帧核对。
## 复现
### 逐字输入的原片短音复刻
用户指出原视频中已有逐字输入声音,明确要求复刻。本次从视频约 6.864、6.906、6.948 秒各截取 38ms,位于 `ACCESS PERMISSION REQUIRED` 的开头。频谱可见约 40–50ms 间隔的宽频瞬态,在约 6–11kHz 有较强能量;此前玻璃模式不足以表达这一特征。
短音只做去直流、0.35ms 入端淡变、3.5ms 出端淡变和统一增益;三个样本之间保留原相对强弱,不做变调、去噪或速度调整。源音来自成片混音,不保证获得了原制作中的独立音效分轨;代理未能进行直接人工听辨。三段原始 PCM 共约 11KB,随代码嵌入,首次输入不依赖异步下载;每个音频上下文只解码一次并轮替播放。保留原片来源与处理记录,见 `public/audio/typing-source.json`。
输入帧从真实 `bootMotion` 的文字揭示推导,覆盖首句、ID、姓名、请求、处理和省略号。修正 65ms 节流使 40ms 相邻输入漏拍的问题;新行首字也有声音,19.16 秒附近的故障闪动与文字恢复不视为新输入。多字符同帧显示只触发一个短音;帧卡顿不积压补发一串声音。试听页新增原片 0.55 秒片段和重排输入串,方便核对音色。
检查增加 25Hz 密集输入的波形峰值、所有字段首字、文字恢复不误触发,以及正常播放时输入帧数量。此前玻璃卡片交互继续使用独立的合成音色。
```powershell
node scripts/extract-typing-audio.mjs 'D:/Program Files/CueWeave/resources/tools/ffmpeg.exe'
node scripts/render-audio.mjs 'D:/Program Files/CueWeave/resources/tools/ffmpeg.exe'
node scripts/analyze-reference-audio.mjs 'D:/Program Files/CueWeave/resources/tools/ffmpeg.exe'
npm run build
```
生成器仅需要 Node.js;参数为本机 FFmpeg 路径,用于 Ogg / MP3 编码。省略参数仍可在 `.tools/audio-render/` 生成无损 WAV 母带。生成脚本使用固定随机种子;同一工具版本可复现。生产只读取原创三轨 Ogg(合计约 1.6MB),试听 MP3 另约 1.3MB,不在运行时加载原视频。