matlab音乐处理合成实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MATLAB高级编程与工程应用语音合成综合实验
姓名:
班级:
学号:
日期:
1.2.1 简单的合成音乐
(1) 请根据《东方红》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB 中生成幅度为1 、抽样频率为8kHz 的正弦信号表示这些乐音。请用sound 函数播放每个乐音,听一听音调是否正确。最后用这一系列乐音信号拼出《东方红》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何
由“十二平均律”计算得到各个乐音的频率:
“5”——“C”:
“6”——“D”:
“1”——“F”:
“2”——“G”:392Hz
“6.”频率是“6”的一半:
代码:()
f=8000;
T=1/f;
t8=0:T:1*;
t4=0:T:2*;
t2=0:T:4*;
t1=0:T:8*;
part1=sin(2*pi**t4);
part2=sin(2*pi**t8);
part3=sin(2*pi**t8);
part4=sin(2*pi**t2);
part5=sin(2*pi**t4);
part6=sin(2*pi**t8);
part7=sin(2*pi**t8);
part8=sin(2*pi**t2);
total=[part1,part2,part3,part4,part5,part6,part7,part8];
sound(total);
试听发现,合成后的音乐基本保持了《东方红》的音调,但声音比较沉闷,相邻乐音之间有比较明显的“啪”的杂音。
(2) 你一定注意到(1) 的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。这种噪声严重影响合成音乐的质量,丧失真实感。为了消除它,我们可以用图所示包络修正每个乐音,以保证在乐音的邻接处信号幅度为零。此外建议用指数衰减的包络来表示。
首先尝试用折线包络,编写函数生成所需折线:
function envelope = envelope_line(t)
envelope(1:floor(t/8)) = linspace(0,1,floor(t/8));
envelope(floor(t/8)+1:floor(t/4)) = linspace(1,,floor(t/4)-floor(t/8)));
envelope(floor(t/4)+1:floor(3*t/4)) = linspace,,floor(t*3/4)-floor(t/4));
envelope(floor(3*t/4)+1:t) = linspace,0,floor(t)-floor(3*t/4));
对中的部分代码进行修改,调用envelope_line实现折线包络:()
part1=sin(2*pi**t4).*envelope_line(t4);
part2=sin(2*pi**t8).*envelope_line(t8);
part3=sin(2*pi**t8).*envelope_line(t8);
part4=sin(2*pi**t2).*envelope_line(t2);
part5=sin(2*pi**t4).*envelope_line(t4);
part6=sin(2*pi**t8).*envelope_line(t8);
part7=sin(2*pi**t8).*envelope_line(t8);
part8=sin(2*pi**t2).*envelope_line(t2);
试听结果杂音明显减少,但声音还比较生硬,尝试用指数衰减的包络来表示。也是对中的部分代码进行修改()
part1=sin(2*pi**t4).*exp(-2*t4);
part2=sin(2*pi**t8).*exp(4*t8);
part3=sin(2*pi**t8).*exp(4*t8);
part4=sin(2*pi**t2).*exp(1*t2);
part5=sin(2*pi**t4).*exp(2*t4);
part6=sin(2*pi**t8).*exp(4*t8);
part7=sin(2*pi**t8).*exp(4*t8);
part8=sin(2*pi**t2).*exp(1*t2);
试听结果比较好,声音很圆润,但仔细听的话也能发现杂音。
(3) 请用最简单的方法将(2) 中的音乐分别升高和降低一个八度。(提示:音乐播放的时间可以变化)再难一些,请用resample 函数(也可以用interp 和decimate 函数)将上述音乐升高半个音阶。(提示:视计算复杂度,不必特别精确)
方法一:
在正弦信号内添加系数改变其频率。
升高八度:
part1=sin(4*pi**t4).*exp(-4*t4);
part2=sin(4*pi**t8).*exp(8*t8);
part3=sin(4*pi**t8).*exp(8*t8);
part4=sin(4*pi**t2).*exp(2*t2);
part5=sin(4*pi**t4).*exp(4*t4);
part6=sin(4*pi**t8).*exp(8*t8);
part7=sin(4*pi**t8).*exp(8*t8);
part8=sin(4*pi**t2).*exp(2*t2);
high8_total=[part1,part2,part3,part4,part5,part6,part7,part8];
sound(high8_total);
降低八度:
part1=sin(1*pi**t4).*exp(-1*t4);
part2=sin(1*pi**t8).*exp(2*t8);
part3=sin(1*pi**t8).*exp(2*t8);
part4=sin(1*pi**t2).*exp*t2);
part5=sin(1*pi**t4).*exp(1*t4);
part6=sin(1*pi**t8).*exp(2*t8);
part7=sin(1*pi**t8).*exp(2*t8);
part8=sin(1*pi**t2).*exp*t2);