物理建模钢琴音色校准:40 条血泪经验
内容提要
本文介绍纯代码合成钢琴音色的校准过程。作者通过残差迭代法,而非指标逼近,逐步分离锤击瞬态、音板共鸣和噪声,将残差降至-21.7dB。关键发现包括:高次泛音呈双偏振结构、起音检测需精修、高频段实为随机噪声、需用投影相干度区分真实泛音,并强调同相激发的重要性。最终计划拟合全键规律,生成更纯净的合成钢琴音色。
延伸解读
残差迭代优于指标逼近
作者最初用坐标下降逼近MR-STFT等指标,但总分卡在7.27,听感问题依旧。改用残差迭代后,通过逐层分离锤击瞬态、共鸣和噪声,残差降至-21.7dB,听感显著改善。这说明优化指标不等于优化听感,残差能量作为目标函数更能暴露相位和频率误差,是更可靠的校准方法。
高次泛音的双偏振结构
真实钢琴的高次泛音(n≥9)呈双偏振结构,主脊旁有+1.5%~+2%的伴线,且伴线常更强。若强行单成分拟合,拍频超出低通带宽导致相位模糊,合成音发闷。需按双脊线处理,并区分弦模态(随f0缩放)与音板模态(固定频率),这对合成准确性至关重要。
起音检测与混叠伪影的陷阱
起音检测偏早约11ms,导致残差虚高17dB,需按能量陡升精修击弦点。此外,分析中的混叠镜像会制造参考中不存在的边带,如166Hz/179Hz对称边带源于2f镜像与帧率互调,通过二阶低通和截止提到30Hz可抑制。这些细节若不处理,会严重误导校准。
高频段噪声与相位相干性
4-8kHz看似泛音的峰,实为锤击噪声的带通投影,相位随机,需用相位线性度区分。若用相干正弦堆满高频,合成音会刺耳。8kHz以上能量低于量化底噪,不应合成。投影相干度可有效判别真实泛音(≥0.85)与噪声(≤0.27),但需用Gram矩阵联合最小二乘避免重复计能。
Q&A
为什么用指标逼近方法无法得到满意的钢琴音色?
因为指标逼近(如MR-STFT、包络、分段频带)优化到极致,听感上的问题(刺、糙、嗡)依然存在,逼近指标不等于逼近听感。作者改用残差迭代法,直接看残差能量,才逐步改善音色。
残差迭代法的基本步骤是什么?
残差迭代法从参考音频开始,先进行泛音跟踪(频率、相位、振幅包络),锁相再合成,然后相减得到残差R1,再分析R1的最大特征(如锤击瞬态、音板共鸣),建立模型并减去,逐步分离出锤击瞬态、音板共鸣、随机噪声,最终将残差降至目标水平。
钢琴高次泛音的双偏振结构是什么?如何区分弦模态和音板模态?
真实钢琴的高次泛音是双偏振结构,主脊旁边约+1.5%~+2%处有一根伴线,且伴线可能更强、更长寿。区分方法:换一个键重新分析,随f0成比例缩放的是弦的模态,固定不变的是音板固有共振。
起音检测偏早的问题是如何发现和解决的?
起音检测会偏早约11ms,导致0-10ms残差虚高+17dB。解决方法是按能量陡升精修击弦点,取峰值5%作为阈值重新定位起音,与参考对齐后虚高消失。
如何区分真实泛音和噪声?为什么高频段不能直接用相干正弦合成?
通过相位线性度分析区分:真实泛音相位线性,噪声相位随机。C4的相干/噪声分界在n≈13(约3.5kHz),以上是锤击噪声的带通投影。如果用相干正弦堆满高频,合成音会刺耳,因为把随机噪声用纯音复制了。
为什么合成时需要使用同相激发?随机相位会有什么影响?
真实锤击时各泛音是同相激发的,产生干净的“鸣”声;随机相位会导致“刺/糙”的听感,即使能量相同。因此合成时应采用同相激发。
投影相干度是什么?它有什么局限性?
投影相干度是合成轨道与参考音频的内积除以合成轨道自身的内积,用于判断轨道在参考中存在的程度。真实泛音≥0.85,噪声≤0.27,阈值取0.35。局限性:多条轨道高度相关时,朴素求和会重复计能,需用Gram矩阵联合最小二乘定增益。
校准过程中有哪些关键参数?它们是如何确定的?
关键参数包括锤击波片、音板共鸣、噪声底等,这些参数是通过反复二分法分文件定位、峰值轨迹表+分频段dB差表,将“说不清”变成数字后才确定的,不是数学推导出来的。