MATLAB 高级编程与工程应用语音合成综合实验姓名: 班级: 学号: 日期: 简单的合成音乐(1) 请根据《东方红》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在 MATLAB 中生成幅度为 1、抽样频率为 8kHz 的正弦信号表示这些乐音。请用 sound 函数播放每个乐音,听一听音调是否正确。最后用这一系列乐音信号拼出《东方红》片断,注意控制每个乐音持续的时间要符合节拍,用 sound 播放你合成的音乐,听起来感觉如何? 由“十二平均律”计算得到各个乐音的频率: “5”——“C”: “6”——“D”: “1”——“F”: “2”——“G”:392Hz “6.”频率是“6”的一半: 2 代码:( ) 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)
matlab音乐处理合成实验报告 来自淘豆网m.daumloan.com转载请标明出处.