Matlab的音乐合成器应用

点赞:12638 浏览:55876 近期更新时间:2024-02-12 作者:网友分享原创网站原创

【摘 要】声音的响度与声波振动的幅度有关,而声波的频率主要影响音调.通过储存音符的频率以及时长,再循环遍历,就能合成了多音轨的乐曲.本文就是通过识别五线谱来合成双音轨的乐曲,matlab仿真波形实现乐曲的音调与节奏的变化.为了进一步使乐曲听起来更加和谐,用ADSR实现对音乐响度的调整.使之对人耳更友好.

【关 键 词】音乐合成器;matlab,频率;ADSR

数字化已经在很多领域有广泛的应用,给人们的生活带来了极大的方便.同样,音频信号也可以通过数字化来实现,当代音乐合成的发展经历了电子模拟、数字模拟、采样回放、物理模型4个阶段,其中数字合成法由于具有良好的灵活性和稳定性而被人们普遍接受.在数字音乐合成器的设计中,将MATLAB作为仿真工具,以五线谱为例研究出基于MATLAB进行数字音乐合成器的设计方法,并结合ADRS进行改进,使之更适合聆听.

一、乐理实验准备

在五线谱的五根等距离的平行横线上,线上和线间都代表不同的音符,同时可以再五线谱的上方或下方加线或间,在五线谱上音的位置愈高,音也愈高,反之音的位置愈低,音也愈低.五线谱音符与简谱音阶对应的对照图如下.

图1五线谱的线和间

图2五线谱、简谱音阶对照示意图

二、音乐合成存储准备

图3键盘样式和按键编号

在上述键盘中,我们将A4键即编号为49的按键的频率作为基准频率,该键被命名为A-440,表示它的频率是440Hz,由于每个音阶相隔12个按键,那么每两个按键之间的频率跨度为2的12分之一Hz.这样可以计算得出编号为44的按键的频率为440×2(44-49)/12Hz.由此可以得出更加一般的频率计算公式:

freq等于440×2(keynumber-49)/12

这样,只要我们能得到每个按键的编号,经过上述公式变换,便能得到每个按键的频率.频率的大小反映了音调的高低,记录音符的频率就相当于决定了按键在琴盘的位置.在解决了每个按键的频率问题之后,接下来还有一个问题要解决:每个音符持续的时间.在五线谱中,不同的音符代表不同的长度.音符有以下几种:全音符、二分音符、四分音符、八分音符、十六分音符、三十二分音符、六十四分音符.我们可以通过识别每个音符的外形来判断其持续的节拍数.然后再把所有的节拍数存储起来,就可以得到所有音符的时长了.

图4乐谱截图

比如在上面的五线谱截图中,在Violin1音轨,4/4表示以4分音符为一拍,每一节4拍.例如,在第一小节中前两个音符各占一拍,第三个音符占一拍半,第四个音符占半拍.而第一个节拍中的四个音符的pulse数分别为4,4,6,2,对pulse单位的说明如下:

图5BMP算法

我们存储的时长是以pulse为单位的,所以乘以该变量就可以完成从乐谱节拍到存储音符时长的转换,得到每个音符持续的时间.至此,让MATLAB函数发出完整的旋律的所有要素我们已经准备好了.

三、数据存储

我们得到了每个音符的频率和时长,我们将数据存储在.mat文件中,mat文件不是文本格式的,而是二进制的,通过Matlab的load命令可以打开.下面是依次打开的过程:

图6加载mat后的视图

这里的两个结构体表明是对应的乐谱是双音轨.两个音轨叠加,可以得到更加悦耳的和弦.

图7每个结构体的成员变量

这是每个结构体里的成员变量,其中keys对应的是按键的编号,durations对应的是每个音符持续的时长,以pulse为单位.

图8keys成员变量的值的集合

这是打开keys成员变量后的视图,可以很清楚的看到,这是按键的编号集合.通过循环遍历,我们就可以得到每个按键的频率.

四、Matlab结构体仿真

Matlab的结构体不用预先定义,直接使用即可.实例代码如下:

Matlab的音乐合成器应用参考属性评定
有关论文范文主题研究: 音符相关论文范文 大学生适用: 学年论文、学士学位论文
相关参考文献下载数量: 81 写作解决问题: 学术论文怎么写
毕业论文开题报告: 文献综述、论文目录 职称论文适用: 刊物发表、初级职称
所属大学生专业类别: 学术论文怎么写 论文题目推荐度: 免费选题

x.Amp等于7,

x.phase等于-pi/2,

x.freq等于100,

x.fs等于11025,

x.timeInterval等于0:(1/x.fs):0.05,

x.values等于x.Amp*cos(2*pi*(x.freq)*(x.timeInterval)+x.phase),

x.name等于'SinSignal',

%----echothecontentsofthestructure"x"

plot(x.timeInterval,x.values),

title(x.name),

上述代码的运行效果如下:

图9验证结构体使用方法得到的正弦波形

程序流程图:

图10程序流程图

五、实验改进(ADSR)

ADSR用来调整合成的音乐的幅度,使之对听众的耳朵更加友好.x(t)等于E(t)cos(2πfkeyt+Φ)

公式中的E(t)就是我们应该施加的窗函数.一种普遍的做法是,利用一下函数来实现:

图11ADSR实例

对上述四个参数的解释如下:(1)起音(attack):这段决定声音从开始发出到最初的最大音量所需的时间长短.在打击乐音色里这部分当然要很短.(2)衰减(delay):在声音达到最大音量后立即发生衰减的时间长短,衰减后的音量大小就是后面保持的音量大小.(3)保持(sustain):他决定在衰减后音量保持的大小,与其他三个不同的是他并不代表保持的时间长短,形象的说当你按下键盘不松手,持续发声时的音量大小就是保持决定的,你按多长时间他就保持多长时间,所以他不代表时间长短.通常保持的音量都低于起音的最高音量,不过也有相同甚至高出起音音量的.(4)释音(release):这是声音最后的阶段,代表着声音从保持的音量逐渐衰减到0电平(最小音量)的时间长短.


用matlab设计数字音乐合成器,很大程度上发挥了matlab的数字信号处理优势.本方案采用数字频率合成发实现乐曲音调的合成,实现了数字信号处理的原理的研究,对于研究更加精湛的技术如嵌入式音乐合成系统等都有很大的帮助.