基于MATLAB的音乐旋律二维可视化方法
张岩;吕梦儒
【摘 要】音频可视化是信息可视化的重要分支,音乐是最具大众性和普遍性的音频信息,乐谱描述音乐的特点是专业性强,形式抽象.为了有利于音乐的展示,提出将音乐进行二维图形映射的可视化处理方法.旋律是音乐的基本要素,主要包含音高、时值和响度等特征,将音乐的旋律进行数据化,绘制二维图形,可以增强人们对音乐的感觉和认知.音频数据受到采样频率和分割帧的影响,会产生大量的过程性数据.MATLAB提供音频处理函数和大规模数据的分布式并行处理功能,可以完成音乐旋律二维可视化的实时处理.利用傅里叶变换提取音乐旋律的基本特征,形成音高、时值和响度等音乐特征向量矩阵,编制程序完成旋律二维可视化图形的自动绘制.
【期刊名称】《沈阳师范大学学报(自然科学版)》
【年(卷),期】2018(036)004
【总页数】5页(P342-346)
【关键词】旋律;MATLAB;visualiztion;FFT;big data
【作 者】张岩;吕梦儒
【作者单位】音乐试听网沈阳师范大学计算机与数学基础教学部,沈阳110034;沈阳师范大学计算机与数学基础教学部,沈阳110034
【正文语种】中 文
【中图分类】TP311
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个元素
for k=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]。