音乐合成大作业
实验报告
无84 王梦娣2008011134
实验报告部分
一、简单的音乐合成
1.请根据《东方红》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB 中生成幅度为1 、抽样频率为8kHz 的正弦信号表示这些乐音。请用sound 函数播放每个乐音,听一听音调是否正确。最后用这一系列乐音信号拼出《东方红》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何?
问题解答:
《东方红》片段:
其中所用音符的唱名、音名及对应频率(由十二平均律和相应键数间隔即可导出)如下:(单位是Hz)
用sound播放单音,音调正确。以一拍0.5秒计,播出合成音乐。发现音乐听起来,总体上音调、节拍正确,但乐音无声音强弱变化,两音之间有明显的“啪”的杂声。2.你一定注意到(1) 的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。这种噪声严重影响合成音乐的质量,丧失真实感。为了消除它,我们可以用图1.5 所示包络修正每个乐音,以保证在乐音的邻接处信号幅度为零。此外建议用指数衰减的包络来表示。
问题解答:
这个问题,实际上我并没有完全理解题意,没有明白是需要乐音之间有重叠,还是没有重叠,所以,我把两种方法都做了一遍,结果发现,用耳朵完全听不出区别。
对于无重叠的包络:
我对包络所做的处理是,对于上图折线部分用指数实现,因为题目中有说当主观感受为线性变化时声音的概率实际上呈指数变化。做出的结果的图像如下:
包络
0.5
1
1.5
2
2.5
3
3.5
4
加包络后的音乐
有重叠的包络:(处理后的音)
从图像上可明显看出有重叠包络和无重叠包络的区别,但是听起来,基本听不出区别。
3. 请用最简单的方法将(2) 中的音乐分别升高和降低一个八度。(提示:音乐播放的时间
可以变化)再难一些,请用resample 函数(也可以用interp 和decimate 函数)将上述音乐升高半个音阶。(提示:视计算复杂度,不必特别精确)
问题解答:
0.05
0.1
0.15
0.2
0.25
未处理的一个音符
加包络处理过的音符
x 10
4
-1.5
-1
-0.5
0.5
1
1.5
由于题目中已有提示“音乐播放的时间可以变化”,所以很容易就想到用Sample函数实现音调的改变,用Sample函数也确实是最简单的方法。
对于升高半个音阶,通过“十二平均律”的方法可知,所谓提高半个音阶,即频率提高2^12≈1.06 倍。这也就可以运用resample函数用这个比例重新抽样,这里的关键就是resample函数的应用。
4.试着在(2) 的音乐中增加一些谐波分量,听一听音乐是否更有“厚度”了?注意谐波分量的能量要小,否则掩盖住基音反而听不清音调了。(如果选择基波幅度为1 ,二次谐波幅度0:2 ,三次谐波幅度0:3 ,听起来像不像象风琴?)
问题解答:
这里只需要改变各个音的组成,加上各次谐波即可。
诡异的音乐5.自选其他音乐合成,例如《贝多芬第五交响乐》的开头两小节。
问题解答:
这里的方法与前面完全相同,只是改变乐谱,映射到技术问题上就是改变基频。
二、用傅里叶级数分析音乐
现在我们开始要处理真实的音乐信号了!请用load 命令载入附件光盘中的数据文件
\guitar.mat",工作区会出现两个新的变量realwave 和wave2proc (可以用who 查看变量名),如图1.6 和1.7 所示。其中前者是从一段吉他乐曲(附件光盘上的\fmt.wav")中截取下来的真实信号,后者是用信号处理方法得到的这段信号的理论值,它们的抽样率都是8kHz。