为什么别人写的 Sonic Pi 代码听起来像电影配乐,而你的代码听起来像 80 年代的 8-bit 游戏机?
根本原因不在于和弦有多高级,而在于声音的物理质感。 在声学物理中,一个迷人的声音通常包含以下特征:
本章不讲复杂的信号处理数学公式,而是提供一套基于直觉的调音法则。我们将学习如何通过 use_synth 选择材质,通过 ADSR 雕刻形状,通过 cutoff 和 res 模拟共振峰,最终为你的古风旋律或史诗配乐注入灵魂。
在 Sonic Pi 中,use_synth :name 本质上是在选择波形(Waveform)。波形决定了声音的基频与泛音(Harmonics)的比例。
你可以把波形想象成雕塑的原材料:
波形 (Waveform) | 频谱特征 (Spectrum/Harmonics) | 听感与风格应用
--------------------|-----------------------------------|---------------------------------------
正弦波 (Sine) | | | 【水、光、纯净】
:sine | 1 (仅基频) | 听:无质感、圆润、甚至由于太纯而显得“假”。
| | 用法:Sub-Bass (超低频垫底)、模拟口哨、
| | 叠加在其他声音上增加“厚度”。
--------------------|-----------------------------------|---------------------------------------
三角波 (Triangle) | | . . . | 【木头、竹子、温润】
:tri | 1 3 5 7 | 听感:比正弦波多一点“鼻音”,柔和但不刺耳。
| (奇数泛音,快速衰减) | 用法:久石让式的长笛、马林巴、
| | 柔和的类比合成器主奏 (Lead)。
--------------------|-----------------------------------|---------------------------------------
方波/脉冲 (Square) | | | | | | 【簧片、空心管、游戏感】
:pulse / :square | 1 3 5 7 | 听感:中空、像单簧管/双簧管、有明显的“嗡嗡”声。
| (奇数泛音,衰减较慢) | 用法:古风里的“笙/管”类音色、
| | 调整脉宽可做 8-bit 复古音效。
--------------------|-----------------------------------|---------------------------------------
锯齿波 (Sawtooth) | | | | | | | | | 【弦乐、铜管、电流、能量】
:saw / :dsaw | 1 2 3 4 5 6 7 8 | 听感:极其明亮、刺耳、占据整个频谱。
| (包含所有整数泛音) | 用法:Hans Zimmer 式的史诗低音 (Braaam)、
| | 模拟小提琴/大提琴组、Trance 舞曲。
💡 专家提示:
:dsaw(Detuned Saw) 的魔力 Hans Zimmer 的声音之所以厚重,是因为他很少使用单一个:saw。:dsaw模拟了两个音高有微小差异的锯齿波叠加,产生了相位抵消与增强(Phasing),听起来自带天然的立体声宽度和合唱感。
如果波形是材质,ADSR 就是你如何演奏它。
它是 play 命令中 attack, decay, sustain, release 四个参数的物理意义。
音量 (Amplitude)
^
| /\ (Peak Level)
| / \
| / \ <--- Decay (衰减): 从最大音量落到保持音量的时间
| / \_______________________
| / | |
|/ | <--- Sustain (保持): |
+ | 按住琴键时的音量 | \
| Attack | (注意是音量级) | \ <--- Release (释音):
| (起音) | | \ 松手后声音消失的时间
|_________|_______________________|____\_____> 时间
在 Sonic Pi 中,这四个参数决定了你是在模仿古筝还是大提琴。
这类乐器的特点是:能量在瞬间爆发,然后不可逆地衰减。没有“保持”阶段。
attack: 0 (或极短), sustain: 0, decay: 短, release: 长# 古筝/琵琶感
play :c4, attack: 0.01, decay: 0.2, sustain: 0, release: 2
这类乐器需要物理激发时间(弓摩擦弦、气流建立驻波)。
attack: 中/长, sustain: 1 (满音量保持), release: 中# 弦乐群/Pad
play :c4, attack: 0.5, sustain: 2, release: 1
陷阱: 如果
attack设为 0,弦乐听起来就会像手风琴或电子琴,瞬间失去了“史诗感”。
虽然是弦乐,但作为节奏使用时,需要强的颗粒感。
attack: 短, release: 短 (切断残响,留出空间给下一拍)# 动作片里的紧张弦乐
play :c2, attack: 0.05, release: 0.3
这是从“物理波形”通向“真实乐器”的关键一步。 Filter (滤波器) = 减法(切掉不需要的频率)。 Resonance (共振/Q值) = 强调(在切断点附近产生尖峰)。
在 Sonic Pi 中,cutoff: 控制切哪里,res: 控制切口的锋利度。
cutoff 的情绪色彩cutoff: 60-80 (暗/远/厚):像是蒙着被子听声音,或者远处的雷声。适合 Bass 和背景铺底 (Pad),不抢占主角位置。cutoff: 90-110 (中/暖/木):大部分原声乐器的主体区域。cutoff: 120-130 (亮/近/刺):完全打开,泛音丰富,甚至带有滋滋声。res 的魔法:制造“材质”与“元音”当 res 过 0.7 时,滤波器就不再只是“变暗”,而是开始啸叫。这种特定的频率凸起,非常像人类口腔改变形状产生元音(a, o, e)的原理,即共振峰(Formant)。
:noise 或 :bnoise,配合高 Resonance 的带通滤波器。
# 模拟一阵穿过竹管的风声
use_synth :bnoise
play :c4, attack: 1, release: 2,
cutoff: 80, res: 0.8, amp: 0.5
解析::bnoise 是宽频噪音,高 res 强行把噪音聚焦在 cutoff 附近,形成一种类似吹管的“嘘嘘”声。
cutoff 动起来,声音就会有“哇-哇”的动态感。真实世界没有两个完全相同的音符。电脑合成之所以“假”,是因为太完美。
不要写死数值,给参数一个范围。
amp: rrand(0.8, 1.0)cutoff: rrand(90, 110)sleep 0.25 + rrand(-0.01, 0.01) (模拟演奏者的节奏摇摆)Sonic Pi 的许多 Synth (如 :prophet, :blade) 自带 LFO 参数。
pitch)。让长音像二胡或歌唱家一样抖动。amp)。这里提供三个针对本书目标风格的“预制菜”。
目标:营造云雾缭绕的背景,不抢戏腔。
:hollow (自带类管乐特征) 或 :dark_ambienceattack: 2, release: 4 (极慢的呼吸)cutoff: 80 (保持暗淡)amp: 0.6use_synth :hollow
play_chord [:c4, :g4, :a4], attack: 2, release: 4, cutoff: 80, amp: 0.5
目标:像《千与千寻》中那种温暖、甚至带点木头味的旋律音色。
:tri (三角波) 或 :pluck (如果需要颗粒感)attack: 0.05 (稍微有一点点头,不完全软)cutoff: 100 (适度明亮)with_fx :reverb, room: 0.6 do
use_synth :tri
play :e5, attack: 0.05, sustain: 0.2, release: 0.4, cutoff: 100
end
目标:电影预告片里那种震撼低音。
:dsaw (失谐锯齿波)detune: 0.2 (加大失谐,制造宽度和粗糙感)cutoff: 70 (低沉) 但 attack 时让 cutoff 瞬间打开 (Filter Envelope) - 注:这需要 automation,简单做法是直接给一个中等的 cutoff。low_note: 必须在 :c2 或 :c1 八度。use_synth :dsaw
play :c2, attack: 0.1, release: 1.5, detune: 0.25, cutoff: 70, amp: 1.5
这是本书最重要的声学概念之一。 频谱掩蔽 (Masking):如果两个声音频率相近且音量相当,人耳只能听到较响的那个,较弱的会被“吃掉”。
# 使用 band_stop (带阻滤波器) 切掉人声频段
with_fx :bpf, centre: 80, mix: 0.5 do # 这里的 centre 是 MIDI 音符
# 播放伴奏
end
control 命令降低伴奏 synth 的 cutoff。:tri/:pulse (木/管),Zimmer 多用 :saw/:dsaw (弦/铜)。attack 决定是“击打”还是“拉奏”;release 决定空间感。cutoff 做背景,高 cutoff 做主角。res 可以模拟物理腔体共鸣和风声。rrand 给音量、音色和时间微小的随机性。amp: 1 的锯齿波叠加,总能量会轻易超过 1。amp 降到 0.4 - 0.6。with_fx :compressor do ... end。with_fx :hpf, cutoff: 50 do # 切掉 50Hz 以下的隆隆声
play :c4 # 旋律
end
amp: amp: rrand(0.9, 1.1)cutoff: cutoff: rrand(100, 110)room 开到 1,mix 开到 1。结果声音像在下水道。mix 通常不要超过 0.4-0.5。保留干声(Dry Signal)是保证乐器“贴耳”和“清晰”的关键。古风的空灵更多来自休止符(留白),而不是混响。