Matlab的音乐合成器应用
2012-07-13################2012-07-13######2#0#12-07-13########
张盼盼
(华中科技大学电子与信息工程系,湖北 武汉 43007)4
【摘 要】声音的响度与声波振动的幅度有关,而声波的频率主要影响音调。通过储存音符的频率以及时长,再循环遍历,就能合成了多音轨的乐曲。本文就是通过识别五线谱来合成双音轨的乐曲ma,tlab 仿真波形实现乐曲的音调与节奏的变化。为了进一 步使乐曲听起来更加和谐,用AD SR 实现对音乐响度的调整。使之对人耳更友好。
【关键词】音乐合成器m;atlab;频率;ADSR
数字化已经在很多领域有广泛的应用,给人们的生活带来式:(keynumber)49)/12 freq=440×2了极大的方便。同样,音频信号也可以通过数字化来实现,当代
这样,只要我们能得到每个按键的编号,经过上述公式变 音乐合成的发展经历了电子模拟、数字模拟、采样回放、物理模
型 4 个阶段,其中数字合成法由于具有良好的灵活性和稳定性 换,便能得到每个按键的频率。频率的大小反映了音调的高低, 而被人们普遍接受。在数字音乐合成器的设计中,将M ATLAB 记录音符的频率就相当于决定了按键在琴盘的位置。在解决了 作为仿真工具,以五线谱为例研究出基于 MATLAB 进行数字 每个按键的频率问题之后,接下来还有一个问题要解决:每个 音乐合成器的设计方法,并结合ADR S 进行改进,使之更适合 音符持续的时间。在五线谱中,不同的音符代表不同的长度。音 聆听。 符有以下几种:全音符、二分音符、四分音符、八分音符、十六分
一、乐理实验准备 在五线谱的五根等距离的平行横线上,音符、三十二分音符、六十四分音符。我们可以通过识别每个音 线上和线间都代表 符的外形来判断其持续的节拍数。然后再把所有的节拍数存储 不同的音符,同时可以再五线谱的上方或下方加线或间,在五 起来,就可以得到所有音符的时长了。 线谱上音的位置愈高,音也愈高,反之音的位置愈低,音也愈
低。五线谱音符与简谱音阶对应的对照图如下。
图 4 乐谱截图
比如在上面的五线谱截图中,在 Violin1 音轨,4/4 表示以 4
分音符为一拍,每一节4 拍。例如,在第一小节中前两个音符各 占一拍,第三个音符占一拍半,第四个音符占半拍。而第一个节 图 1 五线谱的线和间 拍中的四个音符的 pulse数分别 为 4,4,6,2,对 pulse单位的 说
明如下:
图 2 五线谱、简谱音阶对照示意图
二、音乐合成存储准备
图 5 BMP 算法
我们存储的时长是以 pulse为单位的,所以乘以该变量就
可以完成从乐谱节拍到存储音符时长的转换,得到每个音符持
续的时间。至此,让MA TLAB 函数发出完整的旋律的所有要素
我们已经准备好了。
三、数据存储 我们得到了每个音符的频率和时长,我们
将数据存储在.
mat 文件中,mat 文件不是文本
的,而是二进制的,通过
Matlab 的 load 命令可以打开。下面是依次打开的过程: 图 3 键盘样式和按键编号
在上述键盘中,我们将A 4 键即编号为 49 的按键的频率作
为基准频率,该键被命名为A -440,表示它的频率是 440Hz,由
于每个音阶相隔 12 个按键,那么每两个按键之间的频率跨度
为2的12 分之一Hz。这样可以计算得出编号为44的按键的2012-07-13################2012-07-13######2#0#12-07-13########
这里的两个结构体表明是对应的乐谱是双音轨。两个音轨
叠加,可以得到更加悦耳的和弦。
图 7 每个结构体的成员变量 这是每个结构体里的成员变量,其中ke ys 对应的是按键的
编号,durations 对应的是每个音符持续的时长,以pu lse为 单
位。
图 8 keys成员变量的值的集合
这是打开 keys成员变量后的视图,可以很清楚的 看到,这
是按键的编号集合。通过循环遍历,我们就可以得到每个按键 的频率。 图 10 程序
图 四、Mat l ab 结构体仿真 五、实验改进( ADSR) Matlab 的结构体不用预先定义,直接使用即可。实例代码 ADSR用来 调整合成的音乐的幅度,使之对听众的耳朵更 如下: 加友好。x(t)=E(t)cos(2πft+Φ) key
x.Amp = 7; 公式中的 E(t)就是我们应该施加的窗函数。一种普遍的做 x.phase = -pi/2; 法是,利用一下函数来实现:
x.freq = 100;
x.fs = 11025;
x.timeInterval = 0:(1/x.fs):0.05;
x.vaues = x.Amp*cos (2*pi (x.freq) (x.tmenterva) l**iIl+ x.
phase); x.name = 'Sn Sgna'; iil图 11 ADSR 实例 对上述四个参数的解释如下:(1)起音(attack):这段决定声 %---- echo t he contents of the structure "x" 音从开始发出到最初的最大音量所需的时间长短。在打击乐音 plot(x.timeInterval,x.values);
色里这部分当然要很短。(2)衰减(delay):在声音达到最大音量 title(x.name); 后立即发生衰减的时间长短,衰减后的音量大小就是后面保持 上述代码的运行效果如下: 的音量大小。(3)保持(sustain):他决定在衰减后音量保持的大
小,与其他三个不同的是他并不代表保持的时间长短,形象的
说当你按下键盘不松手,持续发声时的音量大小就是保持决定
的,你按多长时间他就保持多长时间,所以他不代表时间长短。
通常保持的音量都低于起音的最高音量,不过也有相同甚至高
出起音音量的。(4)释音(release):这是声音最后的阶段,代表着
声音从保持的音量逐渐衰减到 0 电平(最小音量)的时间长短。
用 matab 设计数字音乐合成器,很大程度上发挥了m atab ll
的数字信号处理优势。本方案采用数字频率合成发实现乐曲音 调的合成,实现了数字信号处理的原理的研究,对于研究更加 图 9 验证结构体使用方法得到的正弦波形 精湛的技术如嵌入式音乐合成系统等都有很大的帮助。 程序
:
参考文献
[1]李云鸿,胡修林,张蕴玉,基于人耳听觉模型的语音质量客观评价
方法[J],华中理工大学学报,2000,28(5)63:65 [2]毛春静,关永,刘
永梅,吴敏华,刘旭敏,数字音乐合成器的研究与 设计[J],计算机工
程与应用,2009,45(6)89:91
Your requestcould not be processed becauseof a configurationerror: "Could not connect to LDAPserver."
For assistance,contact your network support team.