12 · 声音设计与混音
所有者指示(第1轮):"每个动作都要有轻微音效,涵盖一切。" 效果设计遵循 earshot 的文档化运动设计实践(github.com/Leonxlnx/earshot,MIT;docs/motion-sfx-techniques.md,docs/SFX.md);我们 recipe/tools/sound.py 中的代码是自有的,不使用任何采样。
分层
| 层 | 电平 | 备注 |
|---|---|---|
| 人声 | −16 LUFS(语音参考 ≈ −19 dBFS,400 ms RMS) | 占据运行时长的 93–98% |
| 音乐背景 | 低于人声 18 LU,无闪避 | 原创,C大调(C–Am–F–G,100 BPM):马林巴、拨奏贝斯、垫音、底鼓、沙锤。在重钩子处降至仅垫音(musicDrop: [start, end]) |
| 拟音 | 低于人声约 15 dB(滴答声约 21,鸟鸣约 22) | 每个可见动作都有一个声音 |
| 重音 | 低于人声约 9 dB | 仅限故事节拍,每分钟至多约 20 个,最大重音前 0.35 秒音乐下降 7 dB(stop: true) |
| 母带 | −14 LUFS 集成值,真峰值 −1.5 dBTP | 两遍线性 loudnorm |
效果(24 种,在 sound.py 中)
| 类型 | 层级 | 用途 | 设计 |
|---|---|---|---|
whoosh(大动作时 long: true) | 拟音 | 进入新地点、大摄像机运动 | 通过三个移动频带(1 : 1.6 : 2.5)跟随速度的粉红噪声;声像扫描;峰值落在提示点上 |
swish | 拟音 | 手臂、书本、手势、投掷 | 细亮闪烁,0.2 秒 |
pop | 拟音 | 标题出现、物体上的面部替换、小物件的到来 | 调性尖音向上扫描至主音,滴答声,后续铃声 |
tick | 拟音 | 计数器的每一步 | 细小明亮的敲击声,带有变化的音调(轮循) |
tap | 拟音 | 小物件着陆、计数器归零 | 阻尼木块 |
flip | 拟音 | 日历翻页 | 纸的沙沙声和静止声 |
slap | 拟音 | 通知或纸张拍打上墙 | 宽带拍击和颤动 |
creak(dur) | 拟音 | 门和铰链 | 通过木制共振的粘滑脉冲 |
click | 拟音 | 开关、标志亮起 | 相距 35 毫秒的按压和锁定声 |
light | 拟音 | 标志发光 | 轻柔嗡嗡声和与主音调相符的小钟声 |
chirp | 拟音 | 户外生活(少量使用) | 两个小鸟哨声 |
rattle | 拟音 | 树叶、颤抖 | 以颤抖速率变化的滤波噪声爆发 |
slide | 拟音 | 滑动或侧移 | 轻柔吱嘎滑动声 |
stretch(dur) | 拟音 | 橡胶、琴弦绷紧、表面弯曲 | 渐强的粗糙吱嘎声 |
whir(dur) | 拟音 | 磁带转完、机构转动 | 棘轮卡嗒声叠加颤动 |
chalk(dur) | 拟音 | 在黑板上书写、划掉内容 | 被笔画切割的粗糙频带 |
roll(dur) | 拟音 | 滚动的东西 | 以滚动速率滚动的低沉隆隆声加上表面滴答声 |
thunk | 重音 | 软物体着陆(苹果落在草地上) | 沉闷的落体声加上低通瞬态 |
thud | 重音 | 重物摆放 | 从 90 Hz 降至 42 Hz 的次声,带有主体和瞬态 |
slam | 重音 | 关门 | 木制主体、破裂声、锁闩声以及石拱房间尾音 |
snip | 重音 | 切割 | 两个刀片卡嗒声和金属铮声 |
boing | 重音 | 弹簧、蹦床 | 摇摆下降的音调 |
twang | 重音 | 拨动绷紧的琴弦 | 带有音高摇摆的谐波泛音 |
ding | 重音 | 数字落定、回报 | C6 铃声,带有非谐波泛音 |
要添加效果:编写 fx_<name>(rng, …) 返回单位峰值的单声道或立体声数组(一起峰值的分层需分频带以免冲突;任何移动的元素上使用移动滤波器;调性部分在 C 大调;无前导静音;结尾有短淡出),将其添加到 FX、REL 以及 ACCENT 或拟音集合,如果接受 dur 参数则也添加到 SUSTAINED。
提示(在 film.mjs 中)
{ t: W(17) - LEAD, type: 'slam', gain: 1, stop: true } // 一个带音乐下降的重音
{ t: W(53) - 0.05, type: 'whir', gain: 0.8, dur: 1.4 } // 一个持续拟音
...changes(a, b, value, 0.06).map(t => ({ t, type: 'tick', gain: 0.7 })) // 计数器每次变化一个滴答声
t是声音攻击落地的时间(whoosh:其峰值落地的时间);混音器将其提前 10 毫秒,绝不晚于画面。gain在该类型的电平内调整(0.5 ≈ −6 dB)。每个提示获得 ±1.2 dB 的随机变化和各自的噪声种子,因此重复不会听起来完全相同。- 根据故事板的声音列逐镜头编写提示。每个可见动作都有一个;每个重音落在一个故事节拍上。
电平是测量的,而非猜测的
sound.py 将人声电平调整至 −16 LUFS,测量语音参考(说话时的中值 400 ms RMS),并将每个效果设置为其最大 400 ms 位于与该参考相差 REL[type] dB 处。在第 1 轮第 3 版中,这使重音的中值为 −9 dB,拟音相对于人声为 −15 dB。检查任何混音:
python -I recipe/tools/sfx-levels.py <outDir> <outDir>/cue-sheet.txt
输出
stem-voice.wav,stem-music.wav,stem-sfx.wav,mix.wav(母带完成),cue-sheet.txt(每个放置的效果及其层级和电平),以及最终的 MP4(H.264 从无声渲染复制,AAC 192 kb/s)。
许可
这里的一切都是合成的。如果所有者提供音乐曲目,他们必须持有其许可;将其设置为 −34 LUFS 的背景音乐,无闪避,并保留效果。