M at l ab的音乐合成器应用
张盼盼
(华中科技大学电子与信息
系,湖北 武汉 430074)
技术市场
【摘 要】声音的响度与声波振动的幅度有关,而声波的频率主要影响音调。通过储存音符的频率以及时长,再循环遍历,就能
合成了多音轨的乐曲。本文就是通过识别五线谱来合成双音轨的乐曲,matlab仿真波形实现乐曲的音调与节奏的变化。为了进一
步使乐曲听起来更加和谐,用ADSR实现对音乐响度的调整。使之对人耳更友好。
【关键词】音乐合成器;matlab;频率;ADSR
数字化已经在很多领域有广泛的应用,给人们的生活带来
了极大的方便。同样,音频信号也可以通过数字化来实现,当代
音乐合成的发展经历了电子模拟、数字模拟、采样回放、物理模
型 4个阶段,其中数字合成法由于具有良好的灵活性和稳定性
而被人们普遍接受。在数字音乐合成器的
中,将 MATLAB
作为仿真工具,以五线谱为例研究出基于 MATLAB进行数字
音乐合成器的设计
,并结合 ADRS进行改进,使之更适合
聆听。
一
、 乐理实验准备
在五线谱的五根等距离的平行横线上,线上和线间都代表
不同的音符,同时可以再五线谱的上方或下方加线或间,在五
线谱上音的位置愈高,音也愈高,反之音的位置愈低 ,音也愈
低。五线谱音符与简谱音阶对应的对照图如下。
三
蔫四
:
.
一,第匹阅
:: 嚣三问
一 第 司
\ .第一阒 第一
图 1五线谱的线和间
-t--~--,~-4r- ..
I l I l j J l j { ; I } l;{
图2 五线谱、简谱音阶对照示意图
二、音乐合成存储准备
Mm C ^
|
{
440}2(¨ 一仰 , 2
图3 键盘样式和按键编号
在上述键盘中,我们将A4键即编号为49的按键的频率作
为基准频率,该键被命名为 0,表示它的频率是440I--Iz,由
于每个音阶相隔12个按键,那么每两个按键之间的频率跨度
为2的l2分之一Hz。这样可以计算得出编号为44的按键的
频率为440x 2(44-49ylZnz。由此可以得出更加一般的频率计算公
式:
~eq=440x 2 晰
这样,只要我们能得到每个按键的编号,经过上述公式变
换,便能得到每个按键的频率。频率的大小反映了音调的高低,
记录音符的频率就相当于决定了按键在琴盘的位置。在解决了
每个按键的频率问题之后,接下来还有一个问题要解决:每个
音符持续的时间。在五线谱中,不同的音符代表不同的长度。音
符有以下几种:全音符、二分音符、四分音符、八分音符、十六分
音符、三十二分音符、六十四分音符。我们可以通过识别每个音
符的外形来判断其持续的节拍数。然后再把所有的节拍数存储
起来,就可以得到所有音符的时长了。
图 4 乐谱截图
比如在上面的五线谱截图中,在Violinl音轨,4/4表示以4
分音符为一拍,每一节4拍。例如,在第一小节中前两个音符各
占一拍,第三个音符占一拍半,第四个音符占半拍。而第一个节
拍中的四个音符的pulse数分别为4,4,6,2,对pulse单位的说
明如下:
beats
_ per_second : bpm/60j
seconds
_ per—beat = 1/beat s_per second;
seconds
_ per_pulse=s~conds per—beat/4
图5 BMP算法
我们存储的时长是以pulse为单位的,所以乘以该变量就
可以完成从乐谱节拍到存储音符时长的转换,得到每个音符持
续的时间。至此,让 MATLAB
发出完整的旋律的所有要素
我们已经准备好了。
三、数据存储
我们得到了每个音符的频率和时长,我们将数据存储在.
mat文件中,mat文件不是文本格式的,而是二进制的,通过
Matlab的load命令可以打开。下面是依次打开的过程:
口圈矗墨墨—曩墨■■■———●
l咕 * 国{ 鬻 l:F习 {
===j=== === 墨二 f随=飘蕊礴 基 _ ■
图6加载mat后的视图
企业导报 2011年第11期 297
点
准
O
墓 鞠
须
万方数据
技术市场
这里的两个结构体表明是对应的乐谱是双音轨。两个音轨
叠加,可以得到更加悦耳的和弦。
努 赫{置j日 J嘧.5l咄
# {<1x~27 do曲fP)
:i it/伸5 I<1x427 d0曲扫)
l startPulso$ I【1
图7 每个结构体的成员变量
这是每个结构体里的成员变量,其中keys对应的是按键的
编号,durations对应的是每个音符持续的时长,以pulse为单
位。
一‘_ _
图8 keys成员变量的值的集合
这是打开keys成员变量后的视图,可以很清楚的看到,这
是按键的编号集合。通过循环遍历,我们就可以得到每个按键
的频率。
四、Mat Iab结构体仿真
Matlab的结构体不用预先定义,直接使用即可。实例代码
如下:
x.Amp= 7:
x.phasc= -pi/2;
x.fleq = 100;
x.fs= 11025;
X.timelnterval=O:(1/x.fS):O.05;
x.values= x.Amp cos(2 pi (x.freq) (x.timelnterva1)+ x.
phase);
x.name= ’Sin Signal’:
%~ .echo the contents of the structure ”x"
plot(x.timelnterval,x.values);
title(x.name);
上述代码的运行效果如下:
图9 验证结构体使用方法得到的正弦波形
程序流程图:
‘
Load
M usicData.mat
I波 bl1 蠡
298 企业导报 2011年第11期
将mat中l~Jkcys棚 /L durations 存在硒部
娈整
i
I I渊f1]key2note
,逋J』j 轨l
I 的站 体t得到饺 IJjJ吼
i
渊 key2note 遮 ff~,k2砖
的绵构体,叠加|±Ij笈 j氩主
0
调用sound..~播 放肯乐
l
峭ltjwaw'rite侏
尔史作为WaX.=格式
图 10 程序流程图
五、实验改进(ADSR)
ADSR用来调整合成的音乐的幅度,使之对听众的耳朵更
加友好。x(t)=_E(t)cos(2rr f~t+o)
公式中的 Em就是我们应该施加的窗函数。一种普遍的做
法是,利用一下函数来实现:
图 11 ADSR实例
对上述四个参数的解释如下:(1)起音(attack):这段决定声
音从开始发出到最初的最大音量所需的时间长短。在打击乐音
色里这部分当然要很短。(2)衰减(delay):在声音达到最大音量
后立即发生衰减的时间长短,衰减后的音量大小就是后面保持
的音量大小。(3)保持(sustain):他决定在衰减后音量保持的大
小,与其他三个不同的是他并不代表保持的时间长短,形象的
说当你按下键盘不松手,持续发声时的音量大小就是保持决定
的,你按多长时间他就保持多长时间,所以他不代表时间长短。
通常保持的音量都低于起音的最高音量,不过也有相同甚至高
出起音音量的。(4)释音(release):这是声音最后的阶段,代表着
声音从保持的音量逐渐衰减到0电平(最小音量)的时间长短。
用matlab设计数字音乐合成器,很大程度上发挥了matlab
的数字信号处理优势。本
采用数字频率合成发实现乐曲音
调的合成,实现了数字信号处理的原理的研究,对于研究更加
精湛的技术如嵌入式音乐合成系统等都有很大的帮助。
参 考 文 献
[1]李云鸿,胡修林,张蕴玉.基于人耳听觉模型的语音质量客观评价
方法【J】.华中理工大学学报.2000,28(5)63~65
[2】毛春静,关永,刘永梅,吴敏华,刘旭敏.数字音乐合成器的研究与
设计[J】.计算机工程与应用.2009,45(6)89~91
万方数据
Matlab的音乐合成器应用
作者: 张盼盼
作者单位: 华中科技大学电子与信息工程系,湖北武汉,430074
刊名: 企业导报
英文刊名:
年,卷(期): 2011(11)
本文链接:http://d.g.wanfangdata.com.cn/Periodical_qydb201111218.aspx