简论琵琶、五弦等乐器的声音电子合成
摘要:本文提出一种方法,用以模拟琵琶或五弦等乐器的音色。其要点在于采用激发源-滤波器的模型,其中与琴弦有关的参数影响了激发源,与面板和琴体乃至麦克风的空间位置有关的参数影响了滤波器。实践上采用倒谱分析的方法,对采样进行激发源和滤波器特征的分离,得到激发源的分量特征以及滤波器的频谱包络(频率响应曲线)。最后合成时,为使声音较为悦耳,可在数据允许的范围内,对分量特征和频率响应峰值进行人工微调。
迄今为止,我们发现鲜有令人满意的五弦琵琶音色库或VST。其主要原因在于,目前缺少质量上乘的正仓院式五弦琵琶单音的录音采样,而这主要归根于复原的该乐器价格依然十分昂贵,而吝啬的主人并不愿意(或是没有能力)进行良好的录音采样工作。雅乐琵琶(或唐琵琶)虽然价格稍低,但需求量很低,其音色库极少,质量虽然勉强尚可,但价格与实用价值并不匹配。如截取视频中的琵琶/五弦声音制作音色库,会面临压缩算法导致音色下降的问题,更有许多视频之中的乐器是钢弦竹品的改造“复原品”,其音色的参考价值较低。
因此,为了解决这些问题,我们必须从有限的样本之中分析出固定的声学特征,这些特征描画了该乐器的听觉辨识性。从理论上来说,一旦我们能够推知该乐器对空间任一位置任一反射环境的波形影响,那么这个任务就完全解决了。但是,实际上根据现有样本,这是难以解决的问题:原因在于不仅需要量化形状大小和内腔尺寸,还需对已有样本去空间混响,这显然是无法做到的,因为录音的音质不仅奇差,其录音室的尺寸参数也完全没有提及。因此此处我们需作一妥协:认为它们在滤波器频响曲线上有影响,但是因为难以推知,只在最后手动微调的时候考虑去除一些效果不佳的峰值。
我们现在进行影响因素分析:
在弦的方面,它给琴桥(覆手)输出一个激励波形,该波形与系统进行复杂的作用以后,则变成了琴桥的响应波形。推算激励波形的时候,其主要依据是弦振动方程,其中的主要参数有:弦的线密度,弦的张力,拨弦参数;次要参数有:空气阻力,刚度,原子耗散系数。我们忽略掉原子耗散系数,并把琴桥末端的阻力合计入空气阻力之中。而琴桥的响应波形,则是被琴桥的响应曲线和激励波形共同决定;因为弦受到的末端阻力与琴桥的响应曲线和响应波形有关,这里理论上可以使用迭代的手法进行复杂地求解。因为我们缺乏琴桥响应曲线的数据,以及为简化计算的缘故,使用琴桥响应波形相似于乐器振动的录音相位转过90度的假设,直接采用以余弦计算、并用经验修正分量强度的“琴桥垂直受力波形”来作为琴桥的响应波形。
这里有一个需要注意的问题:根据弦振动方程,末端的受力角度实际是不连续的:例如+1度持续半个周期,突然变成0,而后变成-1度半个周期;即使算进刚度项,这个问题也仍旧存在。所以,采用半经验的方法,采用数值分析得来的倍频强度An代入tan(theta)=求和An*Cos[2pi*fn*t]则是一条解决办法;与此类似的还有tan(theta)=求和n*An*Cos[2pi*fn*t],后者更接近“半经验修正”的原意,因为多出来的n来自于末端对空间求导时候产生的系数n。笔者更加偏向前者,一来是前者效果好,在最终合成结果里不产生金属杂音;二来是因为从样本的激发源数据推知的频谱分量强度,道理上讲就是激励项的分量强度。
在面板和腔体的方面,我们的面板为频响曲线贡献多个特征频率,腔体则是具备一个特征频率的亥姆霍兹共振器。影响面板的特征频率的因素有:杨氏模量、密度、厚度、泊松比,剪切模量,尺寸形状,背后的支撑,等等。影响腔体特征频率的因素则主要是腔体体积和开口。面板的特征频率,常能在滤波器的频响曲线中看到峰值,但也有部分缺失。推算面板特征频率的方式,一般是有限元法,这其中的近似,只是精度层面上的。推算腔体的特征频率,则有现成的公式。
于是我们得出了方法:
1、计算激发源波形(琴桥的波形响应/振动波形):
定义:yn=弦振动方程解的(不带归一化系数8h/pi^2的)第n项时间部分=An*Cos[2*pi*fn*t].
其中fn是各项频率,后文给出公式。
定义拨弦参数:拨弦高度h,拨弦位置比例(占总弦长的比例)x,弦长L.
其中,如果按照传统弦振动方程,则An=Sin[a*pi*n]/n^2.
定义:基础弦张力T0,ES=杨氏模量*弦的截面积。
定义:yn_corr=被经验数据修正的yn。
激发源波形Ex=tan(theta)*T=求和[yn_corr]*(T0+[16ES*h^2/(pi^2*L^2*x*(1-x))]*求和[(yn_corr)^2] );
例:T0=64.9N,[16ES*h^2/(pi^2*L^2*a*(1-a))]=2.51N.
定义:Inharmonic Constant: B=pi^2*ESI/(TL^2)=pi^2*E*a^4/(16TL^2). 其中a是截面半径。
定义:弦的阻尼常数c。例:c的常见范围是1.28(纯空气)到3.55(加算末端阻力)。
各项的频率fn=sqrt(f0^2*n^2*(1+B*n^2)-c^2/4),其中f0是无修正弦振动方程得出的基频,服从通常公式的计算。
2、应用滤波器频响曲线。
设滤波器频响曲线Resp为已知。
首先对激发源波形Ex进行傅里叶变换:
z=fft(Ex);
然后乘上频响曲线:
z1=Resp.*z;
最后反傅里叶变换得到输出:
output=real(ifft(z1));
注意要舍弃虚部。
得到的输出,常常会出现开头的数个周期波形在数据的尾端出现,故需要作图观察以后,将其校正回数据头部。
附:如何由样本得到激发源波形和滤波器的频响曲线:
设有样本x。求实倒谱得到u=rceps(x)。
算出x的基频所在的倒频率,对u截取小于这个倒频率一半或者3/4的头部部分u1,即是滤波器频响曲线的实倒谱;剩余基频对应的倒频率附近以及高于此值的尾部部分(记为u2),即是激发源。
而后u2进行傅里叶变换,取实部,指数化,最后反傅里叶变换,舍去虚部就得到对应的激发源。
ex=real(ifft(exp(real(fft(u2)))));
u1进行傅里叶变换,取实部,然后指数化,就得到滤波器的频率响应。
resp=exp(real(fft(u1)));
附:滤波器频响曲线的调整与人工修正:
频响曲线具备峰值,可以读出强度和频率。面板的特征频率应当和频响曲线的峰值对应。而面板的特征频率特征振型本身好似一个带阻尼的弹簧,适用于一个二阶常微分方程。因此我们能够容易地写出它的傅里叶变换或拉普拉斯变换。根据特征频率和峰值好像弹簧和二阶常微分方程的联系,就可以算出该特征频率下频率响应函数本身——注意这个是复值的,或者说补全了相位响应信息。
由此一来,可以将每个频响曲线的峰值和特征频率分解成一个小的“弹簧”共振器,再将其按照强度大小组合起来。对于面板的有限元分析预言了的、却未在频响曲线中发现峰值的特征频率和振型,也可以依照频响曲线的对应值,给予一个强度数量来补全。腔体作为亥姆霍兹共振器的部分,也可以由此分析得到数据。
此时我们调节相对强度就可以改变这些共振器组的频率响应,进而改变整个频响曲线。无论是把改变后的频响曲线用于(2)中方法的数位合成,还是构造模拟实现进行模拟合成,都是方便的。
附:由样本激发的激发源的利用方式:
我们一般不直接利用这个激发源,因为它本身的高频杂音一般较多。因此我们用于分析倍频数据,拟定(1)之中用于修正yn的“经验数据”。
解释:为何人工修正部分数据是必要的?
原因在于样本的音质较差,且我们的目的是编制合适的音色,以供实用。数据分析提供了合理的乐器参考数据,在不失真允许的范围内,可以而且应当进行一定的人工修正,使得结果更加悦耳动听。
我们的琵琶和五弦常常使用调整定弦的方式来演奏不同的调式,此时会造成声学参数的少许改变;因此根据弦的特征频率,还可以增加频响曲线之中对应的共振峰。
由于一种调弦法的音色是具备整体性的,这启示我们在调整参数以及试听判断的时候,要按照调弦法来进行。
解释:如何解决左手按音、叩、弛一类问题?
左手按音和拨子的实音是不一样的。其发声机理略有不同,并不仅仅是音量的大小不一样。因此,它适用的激励模型肯定也有差别。例如上述的模型是普通拨弦,假定了弦上各点有初始位移却无初始速度;而按音既有初始位移,也有初始速度。但,参考钢琴弦模型的初始位移=0和初始速度不=0,会发现仅是声音之中倍频的系数和初始的相位有不同。
因此,我们也应当从这两部分入手,通过分析数据,修正频率分量的强度,以及加入相位因素,来解决这些演奏方法的问题。一言以蔽之,仍然是分析数据后的半经验性声音合成问题。
在缺少数据的情况下,可考虑通过F=kx^b的琴弦受力响应,使用其他乐器的数据,推知按音时刻弦上的速度分布。