在 Sonic Pi 代码中,节奏往往体现为时间(sleep),但在听感设计上,节奏体现为频段的占有(Spectrum Occupation)和空间的塑造(Spatial Design)。
本章的任务,是让你学会根据风格需求,用代码“捏”出这三种形态的鼓。
既然你熟悉频谱分析,构建打击乐的第一原则就是:不要试图用一个采样完成所有频段的任务。 一个好听的电影感大鼓(Cinematic Kick),通常是由 2-3 层声音叠加而成的。
我们将打击乐器分为三个频段层级,编写代码时,建议将这三层写在不同的 live_loop 或函数中,以独立控制混响和音量。
频段 (Hz) | 角色 (Role) | 物理特性与 Sonic Pi 策略
---------------|-------------------------|---------------------------------------------
Low (20-100Hz) | 地基 / Sub | 负责震动裤脚,提供“重量”。
| | 策略:单声道(Mono),无混响(Dry),短包络。
| | 推荐::bd_tek (加 LPF), :drum_heavy_kick
---------------|-------------------------|---------------------------------------------
Mid (200-2k Hz)| 骨架 / Body | 负责听感上的“砰”或“咚”,提供材质感。
| | 策略:可以有一点短混响,带有音高感。
| | 推荐::drum_tom_mid_soft, :drum_snare_soft
---------------|-------------------------|---------------------------------------------
High (2k Hz+) | 空气 / Transient | 负责“咔”或“滋”,提供清晰的拍点定位。
| | 策略:宽立体声(Pan),长混响(Air)。
| | 推荐::drum_cymbal_closed, :elec_tick
常见错误:初学者常觉得鼓不够劲,于是把
:bd_haus的音量开到 2.0。这会导致数字削波(Clipping)和浑浊。 正确做法:叠加一个正弦波合成器(Synth)作为 Sub 层,叠加一个高频的 Noise 作为打击头(Transient),保持总音量不过载。
古风打击乐的核心审美是“清、脆、疏”。它忌讳持续不断的低频轰炸。
中国传统戏曲节奏统称“板眼”。“板”是强拍(通常由板鼓/梆子击打),“眼”是弱拍。
在 Sonic Pi 中,我们用高频木质音色来模拟“板”。
:elec_wood 或 :perc_snap,将 rate 设为 1.5 到 2.0(提调音高),release 设极短(0.1)。:bd_zum,加上 lpf: 100(去掉电子味),放在巨大的 reverb 效果器中。古风的韵味常来自于“不到重拍上”。
古风常用节奏示意 (X=板/重, o=弱起/装饰, . = 休止/留白)
[1] [2] [3] [4]
X . . . . . o X . . . . . . . . (注重第2拍后半拍的切分)
Zimmer 风格(Action Score)的核心驱动力(Drive)。这通常通过 Ostinato(固定音型) 来实现。
这不是简单的“动次打次”,而是一个快速滚动的 16 分音符流。
ring 和 tick 来控制振幅(Amp)或 滤波器截止频率(Cutoff)。# 伪代码思路:Zimmer 脉冲
# 定义一个重音模式环:3+3+2
accents = (ring 1.2, 0.6, 0.6, 1.2, 0.6, 0.6, 1.2, 0.6)
live_loop :zimmer_pulse do
# 使用 tick 读取重音,并叠加一个随机波动让它像真人
vol = accents.tick * rrand(0.9, 1.1)
# 关键:用 lpf (Low Pass Filter) 随时间慢慢打开,制造逼近感
cutoff_val = (line 60, 110, steps: 128).look
sample :bd_tek, amp: vol, lpf: cutoff_val
sleep 0.25 # 16分音符
end
Zimmer 的鼓听起来大,是因为那是“群奏”(Ensemble)。
Rule of Thumb: 当你要写史诗高潮时,不要只加音量。要加层数。在重拍叠加一个 :drum_splash_hard(并将速率调低 rate: 0.5 制造巨大的工业噪音感)。
你是程序员,但你的听众是人。完全精准的网格会让耳朵疲劳(Ear Fatigue)。
真人鼓手从不完全准。在 100 BPM 下,几毫秒的误差就是“律动”。
sleep 时间上加一个极小的随机数。
sleep 0.25 + rrand(-0.01, 0.01)(注意不要累积误差,建议使用 time_warp 或在固定 live_loop 框架内微调 sample 的触发时间,而非 sleep 时间)。amp 和 cutoff 绑定。amp 越大,cutoff 越高。sample :drum_snare_hard, amp: v, cutoff: 80 + v * 40:elec_wood)做“板”,注重留白和弱起,不要填满。ring 定义重音模式(如 3+3+2),利用滤波器自动化(Filter Sweep)制造推进感。rrand 给音量、音色(cutoff/rate)和微时值增加随机性,避免“机器味”。习题 6.1:古风“慢板”构建 目标:写一个 BPM 60 的 4/4 拍古风节奏。
:elec_wood 模拟板鼓,只在第 1 拍(强)和第 3 拍(次强)击打。:drum_cymbal_soft 模拟镲片,在第 4 拍的后半拍(4.5)轻轻击打,作为弱起。习题 6.2:Zimmer 的 3+3+2 脉冲 目标:写一个 BPM 120 的动作片基底。
sleep 0.25)。ring:(ring 1, 0, 0, 1, 0, 0, 1, 0)。:bd_tek);当值为 0 时,播放轻一点的闭镲(:drum_cymbal_closed)或者极轻的 Kick。习题 6.3:自定义“大堂鼓”音色设计 目标:Sonic Pi 自带的鼓都不像中国大鼓。请利用 DSP 知识调制一个。
:bd_zum 或 :drum_tom_lo_hard)。lpf 切掉 400Hz 以上。sample :bd_boom 但把它的 rate 降得很低,音量很小。with_fx :reverb, room: 0.8 中。习题 6.4:自动化过门 (The Build-up) 目标:写一个 8 小节的循环。前 7 小节是平稳的 16 分音符脉冲,第 8 小节进行过门。 要求:
现象:当你叠加了合成器贝斯(Bass)和底鼓(Kick)时,有时声音反而变小了,或者忽大忽小。 原因:两个低频波形在某个瞬间相位相反(一个波峰遇到一个波谷),互相抵消了。 调试技巧:
amp 包络,或者简单的“让位”原则——尽量不要让长音 Bass 的起音(Attack)和 Kick 这种强瞬态完全重合。hpf: 100(高通滤波)。低频空间很挤闲人免进。sleep 的误解现象:代码里写了 sleep 0.25,但加上复杂的 with_fx 后,节奏好像变慢了。
解释:Sonic Pi 的调度是非常精准的,通常不会变慢。如果你觉得慢了,可能是:
pre_amp 或 mix 不要太大。保持鼓点的干脆(Dry)。现象:鼓组听起来像 80 年代的 MIDI 铃声。
原因:所有音符的 amp 都是 1。
Rule of Thumb:永远不要写 amp: 1。习惯写 amp: rrand(0.7, 0.9)。如果是重音,写 amp: rrand(0.9, 1.1)。这一点的差别是巨大的。