科研与技术前沿

收到一个音符事件之后:数字音源的四十年

你按下 MIDI 控制器上的中音 C 琴键,力度中等。这一瞬间,设备送出的信息只有三种数字:note on、音高 60、velocity 90。但从耳机里出来的东西远不止这三种数字。一声钢琴有弦槌击弦的瞬间脆响,有琴弦振动的主体,有余音在止音器落下前的收束,有踏板踏住时其他琴弦的轻微共振,有箱体和空间的混响。三种数字和这整片声音之间的鸿沟,就是音源要填的。

MIDI 做的事情是把演奏动作标准化成事件消息。它传的是 “C4 按下了,力度 90,用钢琴音色”,而不是已经录好的声音。MIDI Association 对 General MIDI 的说明也停在这一层:GM 规格定义的是兼容 MIDI 设备的最低配置和共享音色集,让同一份 MIDI 文件在不同设备上获得更一致的播放效果,但不保证音质。把事件变成声音的工作落在音源上。而音源回答那个问题的方式,过去四十年换了不止一次。

算出来

最早的答案是:直接算。

模拟合成器用电信号生成波形,但要让电路稳定地产生复杂到像真实乐器的谐波结构,很难。1983 年 Yamaha 推出的 DX7 用了一种叫 FM 合成的纯数字方法:让一个振荡器去调制另一个振荡器的频率,被调制的振荡器就会催生出一整套新的谐波。几个简单的正弦波,经过调制关系和包络控制,就能生成铃铛、铜管、电钢琴、拨弦贝斯的质感。参数少得惊人,但音色变化极丰富。

FM 的成功说明了一件事:复杂音色不一定来自复杂声源,也可以由简单的振荡器和调制关系推算出来。但这种从算式中生成的音色有一个特征:它太干净了。真实的乐器有弦噪、气声、琴槌机械响动、随机的微小偏差;FM 生成的声音像精密的钟表,每一击都近乎一致。而且控制 FM 参数来调出特定音色是一件很反直觉的事。演奏者想要的是一台 Steinway,调音师面对的却是波形、包络和调制指数。

随后几年,另一种思路也试图用少量数据换取逼真感:波表合成。它不是从零算波形,而是用一小段数字化波形作为原始材料,通过改变读取速度、方向、插值来变调变音色。Korg 的 DW-8000(1985)和 Ensoniq 的 ESQ-1(1986)都走了这条路。波表比纯 FM 更容易接近真实乐器的静态音色,但它们同样缺少乐器演奏时的行为感。你按一次 C4 和再按一次 C4,声音是一样的;踏板踩下去和抬起来,它没有记忆。

抓住最难合成的瞬间

1987 年,Roland D-50 走了一步很聪明的中间路线。

真实乐器最难合成的部分,通常集中在声音开始的瞬间。弦槌敲击琴弦的前几十毫秒,弓毛擦过提琴弦的瞬间摩擦,管乐器吐音时的气声爆发,都比持续音更难用公式稳定生成。一旦声音进入延音阶段,波形反而规律得多。Roland 的 LA 合成沿着这个判断往前走:用极短的采样片段捕捉 attack 瞬间,然后用数字合成做 sustain 部分。采样只存不到一秒,但那一秒正好存下了听众耳朵最敏感的信息。

这个做法很经济。完整录制一台钢琴的每个音、每个力度,在当时既贵又不实际。但只录 attack 瞬态,一张小小的 ROM 就能装下,合成部分接着算出延音和衰减。效果出奇地好。D-50 的音色比纯 FM 多了真实乐器的呼吸感,同时又保留了合成器的可控性和丰富度。它是一种组合策略:把最难算的部分交给录音,把规律的部分还给算式。

同一时期,ROMpler(ROM-based sampler)开始出现。厂商把一大套 PCM 波形固化在 ROM 里,不是全采样,但足够覆盖钢琴、贝斯、弦乐、管乐的常见音区。这个思路在 1991 年 Roland SC-55 把 General MIDI 做成可购买的多声部音源时被进一步放大。GM 规定 128 类乐器分类和鼓组映射,SC-55 让 MIDI 文件有了可预期的播放基准。代价是音色被钉在 GM 预设的水平上:可以听,但经不起对照真实乐器。

装下全部录音

到了 1990 年代末,一个问题已经悬了多年:如果存储和运算成本一直在降,为什么不直接录下真实乐器的每一个音符,然后播放回去?

这个问题的瓶颈不是想法,是内存和带宽。完整录制一台钢琴的 88 个键,每个键录上十几种不同力度,再加上踏板抬起和踩下的两种状态,算下来已经是几千个样本。每个样本如果只取一两秒然后 loop 剩下的部分,细节就丢了;如果全部录满,容量大到当时的硬件内存装不下。

1998 年 Tascam 的 GigaSampler / GigaStudio 改变了这个限制。它不从内存加载全部样本,而是直接从硬盘实时串流。一个库可以是几个 GB,系统只在需要时调取当前音符的一小段。采样从此不再受内存约束。Native Instruments 后来把这条路走成了 Kontakt 平台:多力度层、多麦克风位置、release 采样(琴键释放时止音器接触琴弦的声音)、round robin(多次击打同一音符时轮换不同采样以避免机械重复感)、内建脚本控制踏板行为。

采样音源在真实感上达到了此前无法企及的高度。你听到的每个 C4 都是一台真实 Steinway 的 C4 被录下来的,力度 90 的样本和力度 60 的样本是不同的录音。VI Labs 的 Ravenscroft 275 甚至标榜 “100% sample-based, no modeling or synthesis used”,靠全采样加脚本做到了半踏、repedal(抬起踏板后又迅速踩下时音符继续延响)这些较复杂行为。

但采样不是没有代价。每一个样本录制的是某个时刻、某种状态下的声音。它不知道上一秒发生了什么。你第一次按下 C4 时琴弦从静止开始振动,但第二次按下 C4、前一击的琴弦还在微微振动时,样本不会知道。力度层通常只有四到八层,切换时出现可觉察的音色跳跃是常事。延音踏板踩住后样本进入 loop 循环,而短 loop 在长时间延音下会暴露重复的周期性起伏,听起来像机器在反复倒带。最大的局限可能在于:采样录下的是一台乐器某一刻的静态快照,不是一个持续响应演奏行为的过程。

重新计算乐器本身

2006 年,一家叫 Modartt 的小公司给出了一种彻底不同的答案。

Pianoteq 不录钢琴。它建了一台钢琴的物理模型:琴弦、音板、弦槌、琴体、空气耦合,每一项都用数学方程描述。你按下 C4 时,模型实时计算弦槌如何击中琴弦、琴弦如何振动、振动如何通过琴码传到音板、音板如何推动空气。每一次击键都是新算出来的,每一个音符的状态取决于当前和之前所有发生的事。

物理模型带来的变化比音色本身更深。采样音源里,velocity 是选哪一层样本的开关。你的力度落入层 A 则播录音 A,落入层 B 则播录音 B。物理模型里,velocity 是连续输入量。Pianoteq 声称支持超过 127 级都不同的动态响应,实际效果是你在渐强渐弱时听不到层切换的台阶,整个动态过渡是平滑的。踏板同样不再触发”踩下踏板播放带延音的样本”的二元逻辑:半踏是阻尼毡接触琴弦程度的连续计算,repedal 是上一击尾音和新的击弦事件在同一个物理状态里的自然重叠,sympathetic resonance 是未被按下的琴弦在被按下琴弦的振动驱动下产生的被动响应。这些在采样世界里需要层层采样和脚本来模拟的行为,在物理模型里只是同一组方程在不同输入下的结果。

Kawai 的 SK-EX Rendering 代表另一种选择:采样做核心音色,但把共鸣部分交给物理模型。多声道 88 键采样提供名琴的录音指纹,共鸣算法则实时计算琴弦间、琴弦与制音器、琴体各部分的相互作用。这种混合路线承认了两种路径各自的长处:采样的录音指纹是物理建模至今很难完全追平的,而物理模型的状态连续性是采样很难做到的。

哪种更好,取决于使用场景和你对”像”的定义。采样擅长还原某一台特定钢琴在某个空间里的录音质感;建模擅长做一台会呼吸、会响应、会记住状态的乐器。同一个演奏者可能在录音室里用采样库做最终混音,但在练习和舞台上选物理建模,因为后者更跟手。

电钢琴是更苛刻的测试

普通音源只要发出声音就行。电钢琴要解决的问题更多。

第一关是延迟。从琴键按下到声音从耳机传出来,中间经过琴键扫描、传感器处理、音源计算、DAC 转换,每一步都在积累微秒。Sound On Sound 给出过一个从业者公认的经验数值:5 到 6 毫秒的延迟尚可接受,超过 10 毫秒对钢琴、击弦古钢琴、鼓这类 attack 清晰的乐器可能出问题。超过这个阈值,演奏者主观上会觉得”钢琴不跟手”。10 毫秒听上去很短,但在一台运行着 DAW、Kontakt、几个效果插件的电脑上,buffer 设得稍大就可能超过。

第二关是力度映射。琴键机构的力度传感器曲线和音源的 velocity 响应曲线不匹配时,弹轻了不出声,弹重了音量和音色突然冲出来。好的电钢琴和舞台琴提供可调 velocity curve,让演奏者把琴键动作和声音行为对齐。

第三关是复音数。你手里按着 4 个音,但音源实际同时在消耗的不止 4 个 voice。延音踏板踩住时所有按过的音都在持续;release 采样通常比持续音更短但也要占用复音槽;sympathetic resonance 需要额外 voice 去模拟未被按琴弦的被动振动。一台标称 256 复音的电钢琴,在有经验的钢琴家脚下可能刚好够用。

把这些合在一起看,“好钢琴音色”看的是整个链路的响应,而不是单个 C4 样本像不像:键床手感、传感器速度、音源生成的动态连续性、踏板的状态模型、DAC 和功放的底噪、扬声器的频响和摆放。任何一个环节处理粗糙,前面的细腻都会被抵消。这也是为什么高端舞台琴比入门电钢贵出几倍,不只是音色包大了几 GB。

AI 改变了哪个环节

对 AI 读者来说,问题会自然转到深度学习:它进入以后,上面的故事变了多少?

答案比”全被替代”那种叙事更窄,也更有信息量。AI 没有推翻采样、FM 或物理建模的旧世界。它更像一个新来的求解器,开始学习旧技术里那些最难用手工调出来的部分。

Google Magenta 的 DDSP 给出了一个清晰样本。DDSP 的全称是可微分数字信号处理,它把振荡器、滤波器、混响这些经典 DSP 模块做成可微分的版本,然后让神经网络学习如何控制这些模块的参数。DDSP 论文里有一个关键数据:所有模型都只用不到 13 分钟的训练音频。能做到这一点,依靠的是 DSP 结构本身就编码了声音产生的物理常识,模型不需要从零学习”什么让声音听起来像声音”。它只学控制信号和合成参数之间的映射。

沿着这个思路看钢琴,2022 年 DAFx 会议上的一篇论文构建了第一个基于 DDSP 的多音可微分钢琴模型,以 MIDI 作为输入条件合成钢琴声。它的声音质量比当时的神经基准模型更好,而且参数量和训练数据都更少。但同一篇论文的听觉测试结果也写了:物理建模模型质量仍然更高。AI 在这里是缩小差距,不是超越。

可微分物理建模是另一个活跃的方向。ISMIR 的相关 workshop 把问题提得更宽:如果把物理模拟本身做成可微分的,就可以用自动微分来估计模型参数、优化控制映射、从录音反向推导乐器的物理特征。AI 的角色是参数估计工具和控制层,底下运行的还是一套物理引擎。

AI 还可以出现在音源之上的界面层。2024 年 Yamaha 展示了一台 AI 辅助钢琴,它做的事情是追踪演奏者的节奏和力度,实时补全和声与伴奏。AI 没有重新发明钢琴的发声方式,它只是让钢琴本身更善于理解演奏者在做什么。这个案例说明,AI 进入音乐系统时,经常先改变交互层,而不是直接替换音源层。

四十年走下来,FM 芯片、ROM 波形、多 GB 采样库、物理模型、可微分 DSP 全部还在运转。它们对应的是不同约束。GM 音源芯片在创客项目里把音频工程封装成几条 MIDI 指令,十几美元一块模块,对 Arduino 玩具和音乐编程课来说刚好够用。大采样库在录音室里提供最细的录音细节,代价是几十 GB 硬盘和一台够快的电脑。物理建模在舞台上提供连续的动态和踏板响应,代价是牺牲了某台具体名琴的音色指纹。Workstation 把多引擎捆在一起,给巡演乐手一个什么都有的中枢,代价是单拎出钢琴部分可能不如专用舞台琴。

音源合成的历史是一组约束之间的来回权衡:算力、内存、成本、延迟、控制连续性,以及”你想要的那台乐器到底是一段完美的录音,还是一个能跟你对话的活的东西”。四十年前有人决定用 FM 去算,三十年前有人决定去抢 attack 瞬态,二十年前有人决定把整台钢琴录下来,十五年前有人决定去重写物理方程。十年前到现在,有人开始让神经网络去学这些方程里的参数。声音的来源一直变,但核心问题没变:收到一个音符事件以后,你准备从哪里拿出那个声音来。

鸭哥每日手记

日更的深度AI新闻和分析