# 湖山有回声 · V9 声音设计

这份是诗径三维体验的原创合成配乐设计稿，不是古琴、洞箫的真实演奏，也不是杭州景区的现场录音。没有引用现成歌曲、商业录音或下载音效。

## 如何听

进入 V9，点右上角「开启声音」。旁边「混音」可分别调节音乐与风物；音乐为零时仍可单独听环境。每次重新加载都先静音，保留两路音量，不因之前开启过就自动播放。

一段原创旋律，58 BPM，96 拍循环；D、E、G、A、B 的音高集合，保留长休止。它不是任何传统琴曲的改编。拨弦与气息声是合成音色，采用衰减谐波、柔和起音与少量空间尾音。

| 空间 | 编配 | 环境与回应 |
| --- | --- | --- |
| 湖上 | 疏弦为主，少量高音气息 | 近岸水声、柳叶风声；白天点击鸟意象，先闻其声，再见飞鸟 |
| 山中 | 拨弦退后，气息音略突出 | 风沿竹列传递，偶发短竹声；无持续敲击节拍 |
| 檐下 | 两种乐器都更稀淡 | 上天竺新增写意小风铃；「忘言」一类诗句让音乐进一步退后 |

三种编配共用同一个播放时钟，切换路线不从头播。站间飞行只保留较远的配乐，水声和叶声淡出；不会在航拍时播放脚步声。到站阅读自动降低音乐，点诗句再降低一层，为局部声音让位。

上天竺小檐铃与现有净慈钟楼的深钟是两种不同音色。深钟复用 V4 的本地原创合成器，不新增一份未授权录音。上天竺新增的小铃模型与声音均为艺术解释，不声称当地确有对应小铃。

## 声音安全与性能

- 点击开启后才创建一个 AudioContext；没有首屏音频下载。
- 音符按音频时钟提前 12 秒调度，为首次路线准备的同步计算留余量；采样缓存后重复使用。极端长时间的主线程阻塞仍不作绝对不断音保证。
- 音乐、环境独立增益，使用渐变和总线压缩器；切换、静音不是硬切波形。
- 两个持续环境声源，少量短暂响应声，随相机方位做空间定位。场景单位换算为米。
- 静音与切到后台会停止调度并暂停音频上下文；快速开关有代际检查，避免旧回调误关新会话。
- 诗句只触发当时合适的回应：夜间没有白昼鸟叫，不修改用户设定的时间或天气。
- 波形边缘归零，循环环境声有宽渐变；各短音有冷却，避免连续点击叠成噪声。

## 文件与授权边界

- `audio-model.js`：原创音高、节奏、音色与场景混音参数。
- `soundscape.js`：运行时 Web Audio 播放、空间定位、混音、静音控制。
- `audio-preview.wav`：48 秒试听，依次展示湖上／山中／檐下三种配比。试听为离线展示，不含实时相机定位；网页不会加载它。
- `render-sound-preview.mjs`：可重复生成试听文件。

本次未嵌入前一轮参考的 Chris Rippey、Scott Buckley 录音，也不把可试听链接视为使用授权。若以后替换真实乐器录音，需要另外落实曲谱、表演与录音的使用许可；声音控制结构可以保留。

技术依据：[MDN Web Audio 最佳实践](https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Best_practices)、[PannerNode](https://developer.mozilla.org/en-US/docs/Web/API/PannerNode)、[AudioParam 平滑控制](https://developer.mozilla.org/en-US/docs/Web/API/AudioParam/setTargetAtTime)。
