基于MATLAB的音乐旋律二维可视化方法

2018-12-19 06:20吕梦儒
关键词:时值响度基波

张 岩, 吕梦儒

(沈阳师范大学 计算机与数学基础教学部, 沈阳 110034)

0 引 言

旋律是音乐作品的基本要素,是经过艺术构思而形成的若干乐器的有组织、有节奏的和谐运动。它建立在一定调式和节拍的基础上,按一定的音高、时值和响度构成的、具有逻辑因素的单声部进行的。旋律是重要的音乐特征,代表了音乐节奏的分布状态。所以,旋律二维可视化能够清晰描述音高、时值和响度等旋律特征,有利于人们对音乐的感知和掌握,有利于区分不同音乐的风格和情感类别。

1 音乐旋律的二维可视化和MATLAB大数据处理

1.1 音乐旋律的二维可视化

音乐乐谱的表现形式有很多种类,如文字谱、数字谱、五线谱、六线谱等等。最为人们常用的是数字谱和五线谱,其中五线谱多为专业音乐人使用,数字谱则普遍为音乐爱好者使用,2种乐谱都是按照一维(时间)轴变化的,称之为低维乐谱。将乐曲映射到二维子空间中,形成高维乐谱[1]。旋律是音乐最基本的元素,将音高和时值映射到直角坐标系中,横轴表示节拍数,纵轴表示音高,利用阶梯图形可以描绘出音高的起始和时长,实现音乐旋律的可视化。依据音乐旋律的二维乐谱可以让人借助图形了解音乐旋律的走向、高潮的发展、节奏的韵律等。它把复杂的音乐材料简单化、具体化,音乐线条高低起伏,节奏、音符、时值等一目了然,给人们视觉提供了丰富的音乐信息,直观地带动视听反应[2]。

1.2 MATLAB的大数据处理

MATLAB提供若干与音频处理相关的函数,如audioread和audioinfo函数可以读取wav、mp3等格式的音频文件、resample函数可以改变信号采样率等。对音乐进行初步处理时,需要对音乐进行分割,然后对若干个小段落进行采样和分析计算,至少有两个因素决定分析计算的数据量,采样频率和分割段落大小。一般音频信号处理的实验经验值是采样频率为8 000 Hz,分割段落为0.5 s,此时计算机的内存和计算能力可以适应。但是音乐采样频率比音频的采样频率高,通常是44 100 Hz,音乐分割要细化到帧,一般是0.02~0.03 s。因此会产生大量的数据信息。大规模的数据处理对系统存储计算能力和速度产生压力,MATLAB从2014版开始新增功能,支持mapreduce并行编程技术,相关功能也可以在Hadoop平台上完成数据的处理,获得实际意义的实时处理效率[3]。

2 音乐(片段)旋律的音高和时值特征及二维可视化

2.1 音乐旋律音高和时值的特征向量矩阵的生成

利用文本处理工具可以记载音乐旋律数据特征向量音长、时值、响度等,通过UI(User Interface,用户界面)设计,可以给用户提供更直观方便的输入方式[4]。为重点说明旋律可视化,这里直接以矩阵的方式输入特征向量。下面以《twinkle twinkle little star》1=C 4/4为例,则给出该歌曲的旋律的音高和时值的矩阵[5]:

≫pitch=[1 1 5 5 6 6 5 4 4 3 3 2 2 1 5 5 4 4 3 3 2 5 5 4 4 3 3 2 1 1 5 5 6 6 5 4 4 3 3 2 2 1] %音高

≫duration=repmat([1 1 1 1 1 1 2],1,6) %利用repmat函数复制生成时值矩阵

图1 音乐旋律的二维可视化Fig.1 Two dimension visualization of music melody

stairs阶梯图的坐标是〈起点,值〉,pitch矩阵可以作为绘制的第2个坐标值,而duration矩阵不是起点值,所以要对该矩阵进行变换,将其从时值变换为起点值,起点值start(k)=start(k-1)+duration(k),且start(1)=duration(1),k=2~length(duration)。在绘制图形时,阶梯图将每个起点连接成阶梯形状,由于最后一个点没有后续的点,所以不能形成连接线,因此需要补充最后一个坐标点,该坐标点表示最后一个音高的起始位置和音高值,它的坐标对是:〈start(length(start))+duration(length(duration)),pitch(length(pitch))〉。

2.2 根据旋律的音高和时值特征向量矩阵实现二维可视化

图2 多级音高和小节线的旋律可视化Fig.2 Visualization of melody multi-pitch and bar-line

依据start和pitch这2个矩阵完成二维可视化的绘制效果,如图1所示。考虑音乐一般会含有部分高音和低音的音高,所以将坐标进行扩展。按照音阶+7和音阶-7计算,则[1,2,3,4,5,6,7]表示基准音音阶,[8,9,10,11,12,13,14]表示高八度的音阶,而[-6,-5,-4,-3,-2,-1,0]表示低八度的音阶。这里规定纵坐标刻度序列为[c,d,e,f,g,a,b,1,2,3,4,5,6,C,D,E,F,G,A,B],其中包括从低音do到高音ci。横坐标则自动按照音乐进行的时间长度自动生成。另外,为了提高图形的可读性,增加图形网格线。再考虑自动生成的纵向网格线不能表达音乐的特征,所以将纵向网格线以小节为绘制依据。细化音高多级刻度和小节网格线后的绘制图形效果如图2所示。

完整代码如下:

clear;%清空所有内存变量clf;%清除原有图形

pitch=[1 1 5 5 6 6 5 4 4 3 3 2 2 1 5 5 4 4 3 3 2 5 5 4 4 3 3 2;

1 1 5 5 6 6 5 4 4 3 3 2 2 1]; %音高矩阵

duration=repmat([1 1 1 1 1 1 2],1,6); %利用repmat函数复制生成时值矩阵

start(1)=duration(1); %起始矩阵第1个元素

fork=2:1:length(duration);

start(k)=start(k-1)+duration(k);

end; %生成起始矩阵

start(length(start)+1)=start(length(start))+duration(length(duration)); %最后一个起始点

pitch(length(pitch)+1)=pitch(length(pitch)); %最后一个时值

clf; %清空图形

stairs(start,pitch); %绘制阶梯图

xlabel(′频率′); %横轴标注

ylabel(′振幅′); %纵轴标注

pz=4; %本音乐是每小节有4拍,该值要根据具体音乐来指定

zpz=start(length(start)); %音乐的总节拍数

xlim([0,zpz]); %设置X轴坐标范围

ylim([-6,14]); %设置Y轴坐标范围

set(gca,′YTick′,-6:14) %设置Y轴的刻度

set(gca,′YTickLabel′,{′c′,′d′,′e′,′f′,′g′,′a′,′b′,′1′,′2′,′3′,′4′,′5′,′6′,′7′,′C′,′D′,′E′,′F′,′G′,′A′,′B′}) %设置Y轴刻度标签

grid on; %设置网格线

hold on;%准备在原图上继续绘制音乐的其他要素(如和弦等)

3 音乐(片段)旋律中响度的自动识别及其二维可视化

3.1 基波频率和音高的推算

乐音是指发音物体有规律地振动而产生的具有固定音高的音。基波频率是指声音中使声音达到最强的特定的最低频率。音乐是基波频率和谐波频率合成的,从音乐中首先要准确提取出每个乐音的基波频率[6],以便推算其他各个乐音的相对的音高频率。比如标准F调的do音基波频率是174.61 Hz,按照十二平均律的算法fi+1=fi*2(1/12),7个乐音频率对应基波频率的倍数依次是:1、21/6、21/3、25/12、27/12、23/4、211/12、2,即174.610、195.993、219.994、233.076、261.619、293.657、329.619[7]。

3.2 旋律中响度特征的自动识别

除了第2部分给出的通过人工方式生成音高和时值等旋律特征矩阵的方法,还应该能够对输入的音乐(片段)文件完成相应特征值的自动提取。这里通过录制女声吟唱的方式获得音乐文件。为了补充前面缺失的旋律的响度特征,所以仅涉及响度特征的提取。

1) 读取音乐文件

≫[mdata,FS] = audioread(′ttls.wav′); %音乐文件在current directory当前工作目录中

其中,mdata是保存音乐信号数据的矩阵变量,矩阵的行数由源音乐文件大小自动决定,列数由声道数决定,通常是左右双声道音乐,所以列数是2。FS是采样频率,通常是44 100 Hz。

≫mdataleft=mdata(:,1); %使用双声道数据的左声道数据,:表示所有行,1表示第1列。

2) 快速傅里叶变换FFT获取乐音频率

利用傅里叶分析可以对频率构成、频率宽度等特征进行分析。傅里叶变换DFT(discrete fourier transformation)将传统的时间域分析信号的方法转变为频率域分析问题的方法,其原理是任何连续测量的时序或信号都可以表示为不同频率的正弦波信号的无限叠加[8]。因为计算机只能处理离散的有限长的序列数据,所以计算机进行DFT时使用的输入值是N个具体的采样值,也就是时域的信号值,输入采样点的数量N决定了转换的计算规模。快速傅里叶变换FFT(Fast Fourier Transformation)是离散傅里叶变换DFT(discrete fourier transformation)的快速算法,可以加快计算机的处理速度。根据采样定理,FFT能分辨的最高频率为采样频率的一半(即Nyquist频率),函数FFT返回值是以Nyqusit频率为轴对称的。信号经过FFT后的频谱图可以采用N/2+1个点的信息,x轴是对应于时间序列的频率序列,x轴最大的频率是FS/2,y轴是幅值,是FFT后所得复数的模[9]。为了分辨出不同的频率成分,采样的数据点N应该取足够大的值。对于音乐(片段),时间长度是定值Ts,采样频率是44 100 Hz,所以采样点总数量N是T*44 100。这里使用的音乐样例,采样点共1 196 032个。绘制的频谱图如图3所示。放大原图形,可以看到振幅较大的频率值在200~400 Hz,如图4所示。进一步获取最高振幅值所对应的频率值,即确定响度加强的音高。这里使用的音乐样例,第8 495和第1 187 539的振幅值达到最大18 453 Hz。考虑到FFT的对称性,取第8 495序号的频率值,所对应的频率值是313.19 Hz。

图3 Nyquist频率之前的频谱图Fig.3 Spectrum diagram before the Nyquist frequency

图4 振幅较大的部分频谱图Fig.4 Larger amplitude spectrum diagram

代码如下[10]:

N=length(mdata); %音乐样例的长度

m=0:N-1; %横轴序列化

fmdata=fft(mdata); %快速傅里叶变换

am=abs(fmdata); %获取变换后的幅值

f=m*FS/N; %横轴频率序列化

plot(f(1:N/2),am(1:N/2)); %绘制Nyquist频率之前的频谱图

xlabel(′频率′); %横轴标注

ylabel(′振幅′); %纵轴标注

ww=find(am==max(am)); %获取最高振幅值的序号

fm=f(ww(1)); %获取最高振幅值所对应的频率

3.3 增加音乐旋律二维可视化图形中的响度特征

图5 包含响度特征的旋律可视化Fig.5 Visualization of melody containing loudness

响度的大小和个人演绎设计有密切的关系,由于人声音的基波频率差异很大,所以应该首先确定单音的基波频率[11]。采用上述同样的方法单独对do音进行频率特征提取,这里音乐样例do音的频率是186.22 Hz,可以确定振幅最大的频率值313.19 Hz对应的是la音。将la音的线型绘制为“<”的连续时值长度的线条,从而增加表现响度特征的绘制要素。图5是绘制包含响度特征的旋律阶梯图。

绘制包含响度特征阶梯图的代码如下:

clf; %清空图形

stairs(start,pitch); %绘制阶梯图

for i=1:1:length(start);

if pitch(i)==6;

hold on;

stairs(start(i),pitch(i),′<′);

end;

end; %响度增强的la音,绘制”<”线型

4 结 论

音乐作为音频信息,其应用和传播具有大众性和普遍性。音乐是听觉的艺术,在作用于人的感官时,由于缺少视觉效果而产生感知的距离。虽然乐谱可以辅助人们进行音乐的理解,但是专业性较强,可视性较弱,不能简化人们掌握音乐的难度。通过对音乐旋律特征的提取,映射到二维可视化效果图形中,可以提高人们的音乐欣赏水准和认知水平。音频信息是大数据处理中最广泛的一种形式,具有数据量大和处理速度快的实际要求,适合于在Hadoop平台上进行参数优化和性能提升[12]以实现大规模音频数据的快速实时处理。

猜你喜欢
时值响度基波
国内外冠军选手桑巴舞竞技组合动作时值搭配发展动态的研究
论亨利·考威尔的新时值划分
栽橘(新韵)
基于跟踪微分器的基波测量方法研究
响度在节目制作和播出中的应用
数字时代中节目响度平衡浅析
基于多尺度形态学和Kalman滤波的基波分量提取
基于IEC62053-24静止式基波频率无功电能表标准对提高无功补偿效果的作用
利用基波相量变化率的快速选相方法
台内音频响度控制方式