APP下载

基于MATLAB的音乐旋律动态可视化方法

2020-01-03田佳鹭

现代计算机 2019年33期
关键词:时值音高阶梯

田佳鹭

(沈阳师范大学,沈阳110034)

0 引言

音乐由音调、节奏、和声、音色等部分组成,通过各种不同的音符构成曲调旋律,通过声音所产生的频率能够有效地使人们产生共鸣[1]。此外音乐通常以简谱、五线谱等记谱法描述,该方法的实现将简化图谱的表现形式,利用动态直观的可视化视图方法代替原本的静态视图,使音乐的表现形式不再单一。可视化的实现为人们带来视听上的新体验,使音乐的美以另一种方式得以呈现,同时有利于对乐理知识掌握甚少的人进行音乐的学习,为人们对于音乐的学习降低门槛[2]。此外该方法借助于MATLAB,利用多种基础库函数,例如音乐处理函数、FFT快速傅里叶变换函数、各种绘图函数等实现音乐旋律的实时动态可视化。

1 音乐旋律动态可视化及MATLAB的应用

1. 1 音乐旋律动态可视化

所谓音乐旋律动态可视化从图形上来说是指将音乐的播放时间设置为二维图形的横坐标,将音乐的频率转化为音高作为纵坐标,例如:do,re,mi,fa,so,la,xi七个基本音调,在此基础上根据所选取音乐是C调还是F调以及其他音调进行相应的修改[3]。音乐中不只包含音调还要涉及到节拍、时值等因素的处理,音乐中每一首歌曲都有固定的节拍设置,音的时值代表每个音持续的时长通常分为全音符、二分音符、四分音符、八分音符、十六分音符等。方法所使用的节选音乐为C调音乐《小星星》,它是以四分音符为一拍每小节四拍构成的。音乐的节拍和时值则分别用zpz变量和duration矩阵进行存放,并作为重要元素绘制到阶梯图当中[4]。该方法中动态视图以可视化的方式呈现时利用了两种方式:一种是固定横坐标轴,通过一个代表音乐实时播放的点带动整个阶梯图的走向来实现动态成像;另一种则更具灵活性,将阶梯图伴随着横坐标轴时间轴一起运动,展现出音乐频率高低起伏、音高持续时间的变化[5]。

1. 2 MATLAB在方法中的应用

作为一款强大的数学软件MATLAB的绘图功能较为突出,方便用户利用可视化的方式实现计算结果[6]。它包含众多有关数值、符号的计算功能,让用户不再被晦涩难懂的数学运算所困扰。此外它还提供了丰富的应用工具箱,极大地方便用户使用这些处理工具,使得用MATLAB解决问题所编写的代码相比其他编程语言例如C、C++、Java等要更加简洁易懂[7]。该方法中重点用到了MATLAB的数值分析、图像绘制功能以及音乐处理函数,例如MATLAB中的audioread()函数可以自动获取音乐的音频信号、采样频率、采样精度等信息。目前大数据应用十分广泛,为了与时俱进MATLAB也进行了相应的改善,将其与大数据相结合[8]。实际上MATLAB覆盖了从最主要的数据获取、数据的组织和基础的探索和分析等方面,通过这些高端的机器学习方法进行大数据的一些学习并转换成模型,之后把大数据嵌入到生产环境当中去,并且MATLAB针对不同的数据规模也拥有着专门的针对这些问题的处理方式,可以说MATLAB现在已经可以被广泛应用到各个专业领域当中去[9]。

2. 1 音乐旋律动态可视化的第一种点实现方法

首先将音乐的音长、时值、音色等存放在特征向量的矩阵中,在呈现出静态可视化图形的基础上实现运动。所谓点实现是指,以时间为横坐标的坐标轴保持不变的情况下,以一个质点代表音乐的播放轨迹,为重点说明旋律可视化,这里直接以矩阵的方式输入特征向量。

例如方法中所例举的音乐《小星星》1=C 4/4,部分代码如下:

>>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函数复制生成时值矩阵

在绘制图形时,阶梯图将每个起点连接成阶梯形状,stairs阶梯图的坐标是<起点,值>

>>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));%最后一个时值

2 音乐旋律动态可视化的具体实现方法

方法中应用到库函数comet(xdata,ydata,p),它的作用的以类似彗星运动轨迹的形式动态绘制曲线图。库函数comet、comet3函数,前者主要用于绘制二维动态彗星轨迹图,comet3函数用于绘制三维图像,comet(y)仅需一个参数即可绘制出质点绕向量y运动的轨迹,comet(x,y,n)需要三个参数绘制质点轨迹包含x,y坐标,第三个参数n代表轨迹尾线长度nXlength(y),n的范围在0到1之间,默认为0.1。如果只运用基本的comet()函数则无法实现所需要的动态视图效果,由于库函数中质点运动的速度过快人的肉眼无法清晰地识别,所以该方法对comet()函数进行了改进,在库函数源代码的四处for循环绘图处增加语句pause(0.2);目的是延缓质点的运动轨迹,以此来实现0.2秒的暂停时间使动态图得以完整呈现。

在MATLAB中对音乐振幅、频率的分析时利用FFT快速傅里叶变换,它是对基本的离散傅里叶变换的变形,传统的DET离散傅里叶变换计算量大、浪费时间,而使用改进的FFT简单易行,减少了大量以前需要做的乘积工作[10]。通过FFT快速傅里叶变换对频率和振幅的分析获取音乐特征。FFT快速傅里叶变换将时间采样信号与频率采样信号进行关联,揭示振幅与频率的特点。基础的傅立叶级数为:

对于包含n个均匀采样点的向量x,其傅里叶变换定义为:

其中i是虚数单位。对于x和y,索引j和k的范围为0到 n-1[11]。

该方法的实现可以获取到更加准确的振幅、频率便于对乐曲中的音高进行分析,为以后将该方法应用到更多音乐的识别中提供了良好的基础[12]。第一种点实现方法的实现结果如图1所示。

图1 音乐旋律动态实时可视化点实现方法结果图

2. 2 音乐旋律动态可视化的第二种实现方法

第二种实现方法是使图形伴随着时间轴一起实时运动,比起第一种呈现效果看起来要更加灵活生动,所谓动态图无外乎是将一帧一帧的图片呈现出来并将这若干帧快速的连接起来呈现出动态的效果[13]。方法中主要对音高和时值两个矩阵进行描述,阶梯图stairs的坐标为<起点,值>,pitch矩阵保存了音乐中每个音调的音高作为第2个坐标值,由于start矩阵中还不完全是起始值,因此利用相关的duration时值矩阵与start矩阵相结合去描述起点值,将其从时值变换为起点值生成起点值矩阵,利用>>start(k)=start(k-1)+duration(k);>>start(1)=duration(1);语句实现[14]。

然后在呈现出静态阶梯图的基础上加入一个循环变量,在程序中设置一个名为m的变量进行循环控制,设m的初始值为0,最大值设定为40,此处注意需要根据不同的音乐对m的最大值进行调整,否则循环的时间过长产生无用数据,此处实现利用语句m=m+0.8;来控制循环速度。最后通过基本的坐标轴函数>>axis([m,m+8,0,10]);设置当前图形的坐标范围,参数的设置分别为x轴、y轴的最小值和最大值,第二个参数设置为m加8的目的,在于由于在阶梯图中绘制了网格图片,所以将每一帧呈现出的图片大小规定为一帧中有8个方格的宽度使画面更加清晰直观,否则画面将呈现密集或稀疏的状态[15]。

主要的部分代码如下:

>>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));%最后一个时值

>>stairs(pitch);%绘制阶梯图

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

>>zpz=start(length(start));%音乐的总节拍数>>grid on;%设置网格线

>>set(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轴刻度标签>>m=m+0.8;

>>axis([m,m+8,0,10]);%移动坐标系>>pause(0.2);

第二种音乐旋律实时动态可视化方法的结果如图2、图3所示。

图2 音乐旋律实时动态可视化第二种实现方法的结果图(截取的音乐片段)

图3 音乐旋律动态可视化完整图

3 结语

结果显示音乐旋律的动态实时可视化可以很好地表达音乐的旋律,通过快速傅里叶变换分析进行相应频率的转换,对音乐中的重要特征进行提取并解析。充分运用MATLAB函数库,使得音高能够随着时间以梯形图的方式动态呈现,可以使人们通过视觉的方式更加直观的理解音乐。通过两种可视化的实现方式使音乐的呈现更具有多元化,即使是以可视化的方式呈现也可以拥有多种方式,使旋律变得更加生动灵活。将音调转换成阶梯图方便了人们对音乐的理解学习即使是对于不懂乐理的人也能迅速理解每一个旋律。

在日后的研究中还要对该方法继续进行完善,使其能够自动识别音乐,不用针对每一首歌进行手动设置。此外该方法以后还将应用到对于人们在唱歌时所产生的不够准确的音调加以调整等方面,通过此方法来帮助人们进行纠正。音乐可视化已经成为未来的发展趋势,音乐将以各种形态方式得以展现,可视化的应用极大地丰富了人们的现实生活,将来还会将该应用与大数据相结合从中扩充大量的音乐对曲库进行丰富,变成系统完善的体系优化其性能,快速实现大量音乐的旋律转换。

猜你喜欢

时值音高阶梯
为何有人唱歌总是跑调
音高听觉的培养与视唱练耳教学中因材施教探究
乔治·克拉姆《螺旋的银河系》的镜像世界
论亨利·考威尔的新时值划分
栽橘(新韵)
中国打击乐鼓类乐器滚奏技术概述
良师·阶梯·加油站
钢琴调律对钢琴音准稳定性的作用
爬阶梯
艺术创意阶梯