肖仲喆,张晶晶,刘弋嘉
(苏州大学 光电科学与工程学院,江苏 苏州 215006)
琵琶是东亚传统拨弦类弦鸣乐器,已有2000多年的历史,一般由木或竹等制成,音箱呈半梨形,上装4弦,由6个相、24个品来确定音位,音域宽广.最早被称为“琵琶”的乐器大约在中国秦朝时期出现.发展至今,琵琶的分类有五弦琵琶、四弦琵琶、南音琵琶、响琶、月琶、高音琵琶、电琵琶和水晶琵琶等.
其名“琵”、“琶”是根据演奏时的右手指法得来的,琵是右手向前弹,琶是右手向后挑.琵琶演奏风格分为多种流派,并发展出了丰富的演奏指法,右手有弹、挑、夹弹、滚、双弹、双挑、分、勾、抹、摭、扣、拂、扫、轮、半轮、击板等指法,左手有揉、吟、带起、捺打、虚按、绞弦、泛音、推、挽、绰、注等技巧,可演奏多种和音、和弦.
在人工智能方法飞速发展的今天,对乐器的演奏指法的自动分析在乐曲的检索、鉴赏引导、演奏辅助学习等方面均具有重要意义.琵琶作为1种中国传统乐器,对其进行自动分析的工作尚在起步阶段.已有工作大多集中于对琵琶声音的算法合成方面的探讨[1-3],而在指法自动识别、分类方面涉及很少.本文着重于对若干种典型的琵琶演奏指法进行基于机器学习的自动识别.
声谱图作为同时体现声音信号的时域、频域特征的综合的可视化表达方式,能够保留声音信号中的大多数信息,因此能够将数字图像处理方法引入到音频信号分析中.声谱图相似度可被用于音乐检索或音乐风格分析;而将声谱图作为图像,通过对其2维频谱的分析,可以对语音和音乐信号进行识别;多分辨率的声谱图也被用于伴奏音乐与歌唱人声的分离等[4-8].在对琵琶演奏指法的自动识别的工作中,我们也使用声谱图作为基本信息来源,并在此基础上扩展为3种对不同指法的区分度更明显的网格图,从中提取特征进行指法的自动识别.
琵琶演奏出的声音大多为包含丰富谐波的乐音类声音,也有部分特殊指法能够发出不体现明显谐波特性的噪音类声音.我们选取了4种乐音类演奏指法和3种噪音类演奏指法进行分析和自动识别.
4种乐音类指法为弹、轮指、泛音和扫弦.弹为琵琶演奏的最基本指法,即用右手食指拨弦.轮以右手食指为第1、中指第2、无名指第3、小指第4,依次向左前方弹出,而后大指为第5由反向挑进,得5声称1轮.泛音是左手虚按住1根弦同时右手弹该弦,音量大,且音质清脆明亮.扫弦为用右手食指依次快速弹4弦.
3种噪音类指法为绞弦、击板和摘.绞弦是中指将1弦推进去至右侧1根或几根弦下方,食指将右侧1根或几根弦身向左拉出压在左侧的1根推弦上,并用食指按住绞在一起的两根琴弦,取出中指,然后轮双弦.击板是用右手击打面板.摘是用右手拇指指肉触弦,中指弹奏.
下面将对这几种典型演奏指法产生的声音样本进行分析处理,并提出网格图特征用于自动识别.
图1 琵琶声音样本分析与特征提取Fig.1 Analysis and feature extraction of Pipa sound samples
对琵琶声音样本进行分析并提取能够区分不同指法的特征的流程框图如图1所示.
本文使用的琵琶演奏声音样本来源于中国音乐学院构建的中国音乐数据库——CCMusic[9].这个数据库的琵琶素材部分包含专业演奏者用多种琵琶演奏指法录制的声音样本,各指法一般录制两遍.本文选取了其中7种演奏指法的声音样本,包括4种乐音类指法: 弹、泛音、轮指、扫弦,3种噪音类指法: 绞弦、击板、摘.对这7种指法,从两遍的声音样本中手动切分出若干个演奏单音作为指法自动识别研究中使用的数据样本,各种指法的单音样本的数量列于表1.
表1 各种指法的单音样本的数量Tab.1 Number of single note samples for each fingering method
被切分好的单音样本首先生成声谱图S(t,f),其中时间参数t的取值范围为对应的单音的持续时间,频率f的取值范围为0~22050Hz.对于乐音类指法,如弹、轮指、泛音,声谱图中会出现清晰的等间隔水平条纹,根据这些条纹之间的距离可以估算出其基音频率F0.对于噪音类指法,如绞弦、击板、摘,并不存在真正的基音频率,我们对其直接赋值为F0=440Hz.扫弦虽然属于乐音类演奏指法,但由于具有不同基频的多根琴弦同时发声,最后叠加的声音也未能表现出明确、唯一的基音频率,因此也赋值为F0=440Hz.
经过基音估计或赋值后,我们在声谱图中选取低频段的短时部分作为研究对象.频率范围限定在20倍基音频率之内,f∈[0,20F0],时间范围限定在200倍的基音周期之内,t∈[0,200T0],其中T0=1/F0为基音周期.为了后续处理的方便,限定了时间与频率范围的局部声谱图在时间、频率方向均通过线性插值的方法调整为500点,成为500×500的方阵,作为归一化声谱图,记为SN(i,j),i为频率序号,j为时间序号,i=1,2,…,500,j=1,2,…,500.
选定的7种演奏指法的归一化声谱图样例如图2(见第288页)所示.乐音类指法如轮指、泛音、弹均表现出清晰的等间隔水平条纹.轮指指法由于存在持续的击弦动作提供能量,各次谐波均不表现出随着时间的明显衰减,但由于每次击弦前会由于义甲与琴弦的接触使琴弦振动发生短暂的停止,因此在声谱图中呈现若干纵向弱能量带.泛音指法使琴声能量集中在低频段,尤其是第2至第5次谐波,而基频与高于5次的谐波非常微弱且衰减迅速.弹指法为琵琶演奏中的最基本指法,整体表现出低频能量高于高频能量,且高次谐波衰减快于低次谐波衰减的现象.噪音类指法如绞弦、击板、摘,在声谱图条纹方面均不能呈现像乐音类声谱图的等间隔水平条纹,但各种指法在不同频段的衰减速度方面也表现出不同规律: 绞弦占据的频率范围较宽,击板、摘的主要能量均集中于较窄频带内,摘的主要能量所集中的频段高于击板.扫作为乐音类指法,由于多根琴弦同时发声,相当于若干个不同基频的弹指法进行叠加,其能量随时间衰减的模式与弹类似,但因为多组水平条纹的叠加,反而无法辨别各水平条纹,使其归一化声谱图在外观上更趋近于噪音类指法.
为了更方便地表现出各种演奏指法的区别,我们在归一化声谱图的基础上生成了3种不同的网格图,用于指法自动识别的特征提取.
图2 7种演奏指法的归一化声谱图Fig.2 Normalized spectrogram of seven fingering methods
归一化声谱图表现为不同衰减速度的水平条纹,在时间、频率方向均插值500点.定义归一化声谱数据与其转置进行点对点相乘的结果为时频网格图G1(i,j):
G1(i,j)=SN(i,j)·SN(j,i)i,j=1,2,…,500.
(1)
7种演奏指法的时频网格图如图3所示.轮指、泛音、弹的时频网格图均呈现出规则的方格,其中: 轮指由于在较长时间内不发生能量衰减,时频网格图整体表现均匀,但由于反复触弦时造成的琴弦短暂不振动的过程使网格清晰程度较低;泛音与弹的时频网格图均表现为从左下向右上的渐变,由于泛音所含的谐波能量集中于第2至第5次谐波,其变化过程中存在1个突变点,而弹的变化过程更为缓慢、均匀.由于在噪音类指法中没有基音的存在,绞弦、击板、摘的时频网格图中并不出现规则方格,而是整体从左下向右上发生渐变,并存在近似的突变点,其中: 绞弦的突变点位置更靠近网格图的右上角;击板的突变点位置更靠近网格图的左下角;摘的时频网格图则呈现出若干较大方格.扫弦的时频网格图比较特殊,由于多根弦的基频同时存在,扫弦的时频网格图在左下部分不能表现出规则方格,与噪音类的时频网格图比较接近,而由于高频分量的衰减快于低频分量的衰减,在右上角表现出乐音性质的规则方格.
图3 7种演奏指法的时频网格图Fig.3 Time-frequency grid of seven fingering methods
用于琵琶指法分析的第2种网格图为时域网格图.首先,对归一化声谱图进行频率方向的求和,得到时域行向量T:
(2)
时域行向量T转置为列向量,与T相乘,所得结果为时域网格图G2:
G2=TT·T,
(3)
即
G2(i,j)=T(i)·T(j)i,j=1,2,…,500.
(4)
7种演奏指法的时域网格图如图4所示.轮指为多次击弦指法,其时域网格图与其他6种指法完全不同,表现出清晰的方格,而各方格的宽度、深度的均匀程度则与演奏过程中各手指击弦的时间、力度的均匀程度直接关联.其余6种指法的时域网格图均表现为从左下向右上的渐变,其中: 乐音类指法的变化较平缓,按照泛音、弹、扫的顺序,变化速度从快到慢;噪音类指法中存在较突然的变化点,绞弦的变化点较靠近右上角,击板、摘的变化点更靠近左下角,两者时域网格图的特性类似.
图4 7种演奏指法的时域网格图Fig.4 Time-domain grid of seven fingering methods
用于琵琶指法分析的第3种网格图为频域网格图.首先,对归一化声谱图进行时间方向的求和,得到频域列向量F:
(5)
频域列向量F与其转置得到的行向量FT相乘,所得结果为频域网格图G3:
G3=F·FT,
(6)
即
G3(i,j)=F(i)·F(j)i,j=1,2,…,500.
(7)
7种演奏指法的频域网格图如图5所示.轮指、泛音、弹的频域网格图表现为均匀的规则方格,其中: 泛音的左侧、下方(低频部分)与右上角(高频部分)的整体能量对比十分明显;轮指、弹的左侧、下方与右上角的整体能量对比较弱,而且轮指在左侧、下方条纹的清晰程度不如弹.噪音类指法的频域网格图也表现为方格状,但方格不均匀.绞弦指法从左下向右上的能量变化较缓慢,而击板、摘均出现突变,并且击板的突变点非常靠近左下角,而摘的能量变化会出现粗网格的反复.扫弦的频域网格图在右上角部分与弹相似,但在左侧与下方边缘有明显的能量很弱区域,与其他指法均不相同.
图5 7种演奏指法的频域网格图Fig.5 Frequency-domain grid of seven fingering methods
图6 从网格图中提取特征示意图Fig.6 Illustration on extracting features from grid diagrams
以上3种网格图在各种指法下均表现出显著区别,且其共同特点为从网格图左下向右上方向存在不同规律的变化.为了将以上网格图用于琵琶指法的自动识别,我们沿网格图左下至右上对角线方向划分了不同的计算区域,如图6所示.由于3种网格图均为左下方变化比右上方更明显,因此在计算区域划分时,左下区域的划分更加密集,且允许不同的计算区域之间有交叠,而右上方的区域划分则比较稀疏,每个区域较大.根据各种指法的具体特点,对时频网格图、时域网格图、频域网格图共划分出41个不同的计算区域,每个计算区域的均值与标准差作为指法自动识别的特征使用,共计82维特征.
利用上文提取的82维特征,我们对7类琵琶指法进行了自动识别实验.由于所使用的琵琶单音样本数量非常少,而特征维数远高于每类的样本数量,为了避免由此引发的“维数灾难”问题(curse of dimensionality),在模型训练过程中使用了前向顺序特征选择(Sequential Forward feature Selection, SFS)方法进行特性选择[10-11],挑选出能够清晰表达各种指法区别的维数最少的特征.
指法自动识别分为3组: 对7类指法的识别、对乐音类和噪音类指法之间的识别以及乐音/噪音类指法内部的识别.分类器选用支持向量机(Support Vector Machine, SVM),使用线性核函数.模型训练过程使用2叠交叉验证,用所有来自于第1遍演奏的样本进行模型训练,对第2遍演奏的样本进行识别,然后交换两遍样本再做实验,获得对所有样本的识别结果.
表2 7种指法自动识别的准确率Tab.2 Automatic recognition accuracy of seven fingering methods
对7种指法进行自动识别的特征选择与识别率列于表2.
由表中数据可见,表现最好的单一特征对于7类指法的自动识别能力不够,识别率仅为39.28%,随着特征数量的增长,识别率也随之上升,当使用6个特征时,最佳识别率已经上升到100%.与所使用的琵琶单音样本数量比较,数量最少的指法种类仅包含6个样本,使其实现完美自动识别的特征数量为6,没有超过样本数量,能够在样本数量非常少的条件下完成指法的自动识别.
尽管扫弦指法属于乐音类指法,但是其在归一化声谱以及时频网格图中均表现出与噪音类指法类似的特性,因此,在对乐音类指法与噪音类指法进行区分时,我们设定了3种实验模式:
1) 轮指+泛音+弹 vs. 绞弦+击板+摘;
2) 轮指+泛音+弹+扫弦 vs. 绞弦+击板+摘;
3) 轮指+泛音+弹 vs. 绞弦+击板+摘+扫弦.
即在第1组识别中不考虑扫弦,第2组识别中将扫弦归为乐音,在第3组识别中将扫弦归为噪音.这3组实验中识别的准确率列于表3.
由表3数据可见,第1,2组实验的单一特征最佳识别率均为90%左右,仅需2个特征即可使识别率达到100%,尤其是第2组的单一特征识别率更高,说明扫弦指法与3种噪音类指法间的区别比其他乐音类指法更显著.第3组实验的单一特征识别率明显低于前2组,仅为76.79%,需要使用5个特征才能使识别率达到100%.因此,尽管扫弦的归一化声谱图与时频网格图中表现出与噪音类似的特性,它仍然是典型的乐音类指法.
乐音类或噪音类内部的指法识别结果列于表4.其中,对乐音类内部的识别分为两种情况,即不包含扫弦其他3类指法的识别和包含扫弦的4类指法的识别.
表3 乐音类与噪音类指法识别的准确率Tab.3 Recognition accuracy of fingering method for music and noise
表4 乐音类/噪音类内部指法识别的准确率Tab.4 Recognition accuracy of fingering method for music/noise internal
由表4可知,不包含扫弦的乐音类指法之间具有非常显著的差异,最佳单一特征的识别率已经达到100%,而将扫弦并入乐音类指法间的识别时,最佳单一特征的识别率急剧下降至50%,共需6个特征的组合才能达到100%的识别率,与7类指法识别时的情况相同.3种噪音类指法之间的区别较为明显,最佳单一特征识别率达到90%,仅需2个特征即可达到100%识别率.
本文对中国音乐学院录制的CCMusic数据库中的琵琶声音样本的7种典型演奏指法进行了自动识别研究.通过由归一化声谱图生成的3种不同类型的网格图,能够有效体现各种不同指法之间的区别.利用从网格图中提取的特征,能够在自动识别中实现100%的识别率,根据具体参与识别的不同指法,需要的特征数量在1到6之间.