Matlab音乐合成实验报告

合集下载

matlab音乐合成葫芦娃

matlab音乐合成葫芦娃

目录音乐合成实验................................................................................................. 错误!未定义书签。

摘要: (1)第一部分简单的合成音乐 (1)1.1合成《葫芦娃》 (1)1.2 除噪音,加包络 (5)1.3改变程序,实现1.2中的音乐升高和降低一个八度 (8)1.4在1.2的音乐中加入谐波 (9)摘要:本文共有三大部分:第一部分,简单的音乐合成;第二部分,用傅里叶变换分析音乐;第三部分,基于傅里叶级数的音乐合成。

由潜入深,一步一步分析了用MATLAB进行音乐合成的过程。

通过本实验达到了加深对傅里叶级数和傅里叶分析的理解,熟悉对MATLAB 基本使用的目标。

第一部分简单的合成音乐1.1 合成《葫芦娃》根据《葫芦娃》第一小节的简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB中生成幅度为1,抽样频率为8kHz的正弦信号表示这些乐音,用sound播放合成的音乐而在MATLAB中表示乐音所用的抽样频率为fs=8000Hz,也就是所1s钟内有8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。

用一个行向量来存储这段音乐对应的抽样点,在用sound函数播放即可。

clear all;clc;freq=8000; %抽样频率T=1/freq;pattime=0.5; %节拍的时间note2=0:T:2*pattime;note4=0:T:1*pattime;note8=0:T:0.5*pattime;note_1=261.63; %各个音乐对应的频率note_2=293.67;note_3=329.63;note_5=391.99;note_6=440;note_7=493.88;note_1b=523.25;wave1=sin(2*pi*note_1*note4); %各个音符所对应的节拍wave2=sin(2*pi*note_1*note4);wave3=sin(2*pi*note_3*note2);wave4=sin(2*pi*note_1*note4);wave5=sin(2*pi*note_1*note4);wave6=sin(2*pi*note_3*note2);wave7=sin(2*pi*note_6*note4);wave8=sin(2*pi*note_6*note4);wave9=sin(2*pi*note_6*note8);wave10=sin(2*pi*note_5*note8);wave11=sin(2*pi*note_6*note4);wave12=sin(2*pi*note_5*note4);wave14=sin(2*pi*note_3*note4); wave15=sin(2*pi*note_1b*note8); wave16=sin(2*pi*note_6*note8); wave17=sin(2*pi*note_6*note8); wave18=sin(2*pi*note_5*note8); wave19=sin(2*pi*note_6*note2); wave20=sin(2*pi*note_5*note4); wave21=sin(2*pi*note_1*note4); wave22=sin(2*pi*note_2*note2); wave23=sin(2*pi*note_7*note2); wave24=sin(2*pi*note_7*note8); wave25=sin(2*pi*note_5*note8); wave26=sin(2*pi*note_3*note4); wave27=sin(2*pi*note_5*note2); wave28=sin(2*pi*note_1b*note8); wave29=sin(2*pi*note_6*note8); wave30=sin(2*pi*note_6*note8); wave31=sin(2*pi*note_5*note8); wave32=sin(2*pi*note_5*note8); wave33=sin(2*pi*note_6*note8); wave34=sin(2*pi*note_6*note8); wave35=sin(2*pi*note_5*note4); wave36=sin(2*pi*note_1*note4); wave37=sin(2*pi*note_3*note2); wave38=sin(2*pi*note_1b*note8); wave39=sin(2*pi*note_6*note8); wave40=sin(2*pi*note_6*note8); wave41=sin(2*pi*note_5*note8); wave42=sin(2*pi*note_5*note8); wave43=sin(2*pi*note_6*note8); wave44=sin(2*pi*note_6*note8); wave45=sin(2*pi*note_5*note4); wave46=sin(2*pi*note_1*note4); wave47=sin(2*pi*note_2*note2); wave48=sin(2*pi*note_3*note2); wave49=sin(2*pi*note_3*note8); wave50=sin(2*pi*note_1*note8); wave51=sin(2*pi*note_6*note4); wave52=sin(2*pi*note_1*note2); wave53=sin(2*pi*note_3*note4); wave54=sin(2*pi*note_5*note4); wave55=sin(2*pi*note_6*note4); wave56=sin(2*pi*note_6*note8);wave58=sin(2*pi*note_5*note4);wave59=sin(2*pi*note_6*note4);wave60=sin(2*pi*note_6*note8);wave61=sin(2*pi*note_1b*note2);wave62=sin(2*pi*note_7*note8);wave63=sin(2*pi*note_5*note4);wave64=sin(2*pi*note_6*note2);wave=[wave1 wave2 wave3 wave4 wave5 wave6 wave7 wave8 wave9 wave10 wave11 wave12 wave13 wave14 wave15 wave16 wave17 wave18 wave19 wave20 wave21 wave22 wave23 wave24 wave25 wave26 wave27 wave28 wave29 wave30 wave31 wave32 wave33 wave34 wave35 wave36 wave37 wave38 wave39 wave40 wave41 wave42 wave43 wave44 wave45 wave46 wave47 wave48 wave49 wave50 wave51 wave52 wave53 wave54 wave55 wave56 wave57 wave58 wave59 wave60 wave61 wave62 wave63 wave64]; %歌曲wave数组sound(wave,8000); %播放waveplot(wave); %描画函数在MA TLAB中运行,播放出了《葫芦娃》,但是可以听出效果很不好,只能听出具有《葫芦娃》的调子而已。

(总)基于MATLAB的简单音乐合成仿真设计.

(总)基于MATLAB的简单音乐合成仿真设计.

密级:学号:2013248731本科生毕业论文(设计)基于MATLAB的简单音乐合成仿真设计学院:信息工程年级: 13级专业:通信工程学生姓名:何世欣指导教师:魏涛学士学位论文原创性声明本人郑重声明:所呈交的论文(设计)是本人在指导老师的指导下独立进行研究,所取得的研究成果。

除了文中特别加以标注引用的内容外,本论文(设计)不包含任何其他个人或集体已经发表或撰写的成果作品。

对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式表明。

本人完全意识到本申明的法律后果由本人承担。

学位论文作者签名(手写):签字日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。

本人授权江西科技学院可以将本论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。

(请在以上相应方框内打“√”)学位论文作者签名(手写):指导老师签名(手写):签字日期:年月日签字日期:年摘要科学技术的发展使得社会生活越来越趋于信息化和数字化,在此基础上语音信号也可以基于数字信号处理技术和语音学相关知识进行信息化处理,此类技术因应用性广便捷性高受到社会的广泛关注,已成为信息科学工程与研究领域的核心技术,被越来越多的高科技产业广泛使用。

计算机合成音乐也在其基础上得以迅速普及,而且理论上可以创造出任何一种声音。

MATLAB是一种用于数据分析和处理的计算机应用软件,它可以将语音文件进行信息化处理转化为离散的数据文件,再通过内置强大的矩阵运算能力如数字滤波、时域和频域分析、傅里叶变换、时域和频域分析、声音合成以及各种图形的呈现等处理数据。

利用MATLAB自带的功能函数可以快捷而又方便地完成语音信号的处理和分析以及信号的可视化,使人机交互更加便捷。

音乐可视为不同频率与振幅的正弦波叠加并加以不同包络所形成的信号,它的这个特点使得MATLAB的处理有了可能,通过处理不同的音频MATLAB可以进行简单的音乐合成。

MATLAB音乐合成

MATLAB音乐合成
x=x+E*(sin(a(music(n)).*t)).*u{n}; end sound(x,32000);
包络波形:
1.5 1
0.5 0
-0.5
0
0.5
1
1.5
2
2.5
3
3.5
4
用指数衰减也不行。经过与同学对比,发现对音符间隔理解不用。如果向( 1) 中那样,第一个 5 演奏后,停顿一个音符,虽然更好听些,但是加包络以后,还 是会造成有高频分量。 所以改变方法,将 5 延长至下一个 5.
figure; subplot(3,1,1); plot(wave2proc); title( 'wave2proc' ); subplot(3,1,2); plot(sample2); title( 'sample2' ); subplot(3,1,3); plot(sample2-wave2proc'); title( 'sample2-wa ve2proc' );
K=2^(1/12); a0=220*pi/2; for n=1:20
a(n)=a0.*K^n; end b0=a0*2; for n=1:20
b(n)=b0.*K^n; end c0=a0*3; for n=1:20
c(n)=c0.*K^n; end
a(25)=0; b(25)=0; c(25)=0;
因为非线性谐波和噪声有一个共同点,就是随机产生,无周期性变化。 所以可以把波形进行若干次叠加,然后取平均值,可以想到,叠加次数越多,其 平均值就越接近于周期波形。 读出realwave波形,发现采样点为243,重复十次,可得周期为24.3,所以可 以将其延长至十倍,这样,周期就是整数。

Matlab音乐合成实验报告

Matlab音乐合成实验报告

课程设计《音乐合成》实验报告专业:测控技术与仪器班级:测控11-2 班*名:***学号: ***********指导教师:**广东石油化工学院计算机与电子信息学院信号与系统课程设计-------利用matlab合成音乐一、实验目的1. 熟悉MATLAB的软件和语言指令的使用;2. 学习利用MATLAB进行连续信号的时域、频域分析;3. 熟悉抽样信号与连续信号的区别。

二、实验内容1.请根据《画心》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB 中生成幅度为1抽样频率为8kHz 的正弦信号表示这些乐音。

请用sound 函数播放每个乐音,听一听音调是否正确。

最后用这一系列乐音信号拼出《画心》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何?并用图显示生成的音乐信号。

相关知识:①《画心》完整曲谱,实验时从中随机截取几节用于编程。

②利用十二平均律计算频率以及相关音乐知识。

如图1,其中错误!未找到引用源。

,错误!未找到引用源。

,错误!未找到引用源。

相当于错误!未找到引用源。

的二次谐波,二者是倍频的关系。

从A到A1共有12个键,7个白色键,5个黑色键。

中间这些频率值得计算规律为相邻音倍乘系数错误!未找到引用源。

即错误!未找到引用源。

,别的依次类推。

图1 钢琴键盘图1中各键对应的频率如下表:bG表示的F升高半音,在乐谱中用#表示。

或者G降低半音,用b表示。

乐谱这中的4/4表示每小节有四拍,一个1/4音符的持续时间为一拍,一拍大概0.5s左右。

eg:y=0*t; %初始化y(t<0.25)=sin(440*2*pi*t(t<0.25)); %第一个音 5,持续时间0.25sy(0.25<t&t<0.5)=sin(392*2*pi*t(0.25<t&t<0.5)); %第二个音3,持续时间0.25ssound(y,8000) %播放音乐三.实验步骤3.1音乐合成根据《画心》第一小节的简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB中生成幅度为1,抽样频率为8kHz的正弦信号表示这些乐音,用sound播放合成的音乐。

音乐合成大作业实验报告

音乐合成大作业实验报告

音乐合成大作业实验报告无84 王梦娣2008011134实验报告部分一、简单的音乐合成1.请根据《东方红》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB 中生成幅度为1 、抽样频率为8kHz 的正弦信号表示这些乐音。

请用sound 函数播放每个乐音,听一听音调是否正确。

最后用这一系列乐音信号拼出《东方红》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何?问题解答:《东方红》片段:其中所用音符的唱名、音名及对应频率(由十二平均律和相应键数间隔即可导出)如下:(单位是Hz)用sound播放单音,音调正确。

以一拍0.5秒计,播出合成音乐。

发现音乐听起来,总体上音调、节拍正确,但乐音无声音强弱变化,两音之间有明显的“啪”的杂声。

2.你一定注意到(1) 的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。

这种噪声严重影响合成音乐的质量,丧失真实感。

为了消除它,我们可以用图1.5 所示包络修正每个乐音,以保证在乐音的邻接处信号幅度为零。

此外建议用指数衰减的包络来表示。

问题解答:这个问题,实际上我并没有完全理解题意,没有明白是需要乐音之间有重叠,还是没有重叠,所以,我把两种方法都做了一遍,结果发现,用耳朵完全听不出区别。

对于无重叠的包络:我对包络所做的处理是,对于上图折线部分用指数实现,因为题目中有说当主观感受为线性变化时声音的概率实际上呈指数变化。

做出的结果的图像如下:包络0.511.522.533.54加包络后的音乐有重叠的包络:(处理后的音)从图像上可明显看出有重叠包络和无重叠包络的区别,但是听起来,基本听不出区别。

3. 请用最简单的方法将(2) 中的音乐分别升高和降低一个八度。

(提示:音乐播放的时间可以变化)再难一些,请用resample 函数(也可以用interp 和decimate 函数)将上述音乐升高半个音阶。

(提示:视计算复杂度,不必特别精确)问题解答:0.050.10.150.20.25未处理的一个音符加包络处理过的音符x 104-1.5-1-0.50.511.5由于题目中已有提示“音乐播放的时间可以变化”,所以很容易就想到用Sample函数实现音调的改变,用Sample函数也确实是最简单的方法。

matlab音乐合成

matlab音乐合成

M A T L A B数学实验报告姓名:学号:指导老师:专业班级:音乐合成学号班级姓名指导教师实验题目音乐合成评分1.实验目的:1.熟悉MATLAB的软件和语言指令的使用;2. 学习利用MATLAB进行连续信号的时域、频域分析;3. 通过电子音乐合成方面的练习增进对傅里叶级数的理解2.实验内容:使用matlab演奏《当你孤单你会想起谁》3.详细设计:1.本次音乐合成所作曲目为《当你孤单你会想起谁》简谱首先介绍matlab函数的玩法:matlab播放音乐是由sound(Y,fs,bits)函数完成的,该函数的3个参数代表输入信号、采样率、比特率。

先说采样率fs的设置,人耳能够听到的声音范围是20~20000Hz。

根据采样定理fs只需要大于40000即可。

此处采样率的设置采用了MP3的标准,即fs=44.1k.再说输入信号Y,Y一般是一个正弦波,如A*sin(2*pi*w*t)。

其中A控制着声音的大小,w控制着声音的高低,t的范围控制着声音的长短,所以理论上利用这个公式可以发出任何声音,只是不能控制音色和音质(音色音质很难用参数量化,我问了一下学语音的同学,这个东西跟音频谱重心,音频扩展度和音频谱平坦度有关系,这里不作讨论)。

比特率采用默认值即可,该参数省略。

于是用下面的公式就可以播放出标准音la:fs=44100;t=0: 1/fs: 0.5;la = sin(2*pi*440*t);sound(la, fs)据所知,音高和频率是指数的关系,它们满足下面的公式,其中p是音高,f是频率标准音la,即钢琴的A4键,定义为p=69。

音高每上升一个半音,p加1。

设计代码:%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% when you are lonely,who will you think about? //当你孤单你会想起谁 on Matlab fs = 44100; % sample ratedt = 1/fs;T16 = 0.125;t16 = [0:dt:T16];[temp k] = size(t16);t4 = linspace(0,4*T16,4*k);t8 = linspace(0,2*T16,2*k);[temp i] = size(t4);[temp j] = size(t8);% Modification functionsmod4=(t4.^4).*exp(-30*(t4.^0.5));mod4=mod4*(1/max(mod4));mod8=(t8.^4).*exp(-50*(t8.^0.5));mod8=mod8*(1/max(mod8));mod16=(t16.^4).*exp(-90*(t16.^0.5));mod16=mod16*(1/max(mod16));f0 = 2*146.8; % reference frequency ScaleTable = [2/3 3/4 5/6 15/16 ...1 9/8 5/4 4/3 3/2 5/3 9/5 15/8 ...2 9/4 5/2 8/3 3 10/3 15/4 4 ...1/2 9/16 5/8];% 1/4 notesdo0f = mod4.*cos(2*pi*ScaleTable(21)*f0*t4); re0f = mod4.*cos(2*pi*ScaleTable(22)*f0*t4); mi0f = mod4.*cos(2*pi*ScaleTable(23)*f0*t4); fa0f = mod4.*cos(2*pi*ScaleTable(1)*f0*t4); so0f = mod4.*cos(2*pi*ScaleTable(2)*f0*t4); la0f = mod4.*cos(2*pi*ScaleTable(3)*f0*t4); ti0f = mod4.*cos(2*pi*ScaleTable(4)*f0*t4); do1f = mod4.*cos(2*pi*ScaleTable(5)*f0*t4); re1f = mod4.*cos(2*pi*ScaleTable(6)*f0*t4); mi1f = mod4.*cos(2*pi*ScaleTable(7)*f0*t4); fa1f = mod4.*cos(2*pi*ScaleTable(8)*f0*t4); so1f = mod4.*cos(2*pi*ScaleTable(9)*f0*t4); la1f = mod4.*cos(2*pi*ScaleTable(10)*f0*t4); tb1f = mod4.*cos(2*pi*ScaleTable(11)*f0*t4); ti1f = mod4.*cos(2*pi*ScaleTable(12)*f0*t4); do2f = mod4.*cos(2*pi*ScaleTable(13)*f0*t4); re2f = mod4.*cos(2*pi*ScaleTable(14)*f0*t4); mi2f = mod4.*cos(2*pi*ScaleTable(15)*f0*t4); fa2f = mod4.*cos(2*pi*ScaleTable(16)*f0*t4); so2f = mod4.*cos(2*pi*ScaleTable(17)*f0*t4); la2f = mod4.*cos(2*pi*ScaleTable(18)*f0*t4); ti2f = mod4.*cos(2*pi*ScaleTable(19)*f0*t4); do3f = mod4.*cos(2*pi*ScaleTable(20)*f0*t4); blkf = zeros(1,i);% 1/8 notesdo0e = mod8.*cos(2*pi*ScaleTable(21)*f0*t8); re0e = mod8.*cos(2*pi*ScaleTable(22)*f0*t8); mi0e = mod8.*cos(2*pi*ScaleTable(23)*f0*t8); fa0e = mod8.*cos(2*pi*ScaleTable(1)*f0*t8); so0e = mod8.*cos(2*pi*ScaleTable(2)*f0*t8);la0e = mod8.*cos(2*pi*ScaleTable(3)*f0*t8);ti0e = mod8.*cos(2*pi*ScaleTable(4)*f0*t8);do1e = mod8.*cos(2*pi*ScaleTable(5)*f0*t8);re1e = mod8.*cos(2*pi*ScaleTable(6)*f0*t8);mi1e = mod8.*cos(2*pi*ScaleTable(7)*f0*t8);fa1e = mod8.*cos(2*pi*ScaleTable(8)*f0*t8);so1e = mod8.*cos(2*pi*ScaleTable(9)*f0*t8);la1e = mod8.*cos(2*pi*ScaleTable(10)*f0*t8);tb1e = mod8.*cos(2*pi*ScaleTable(11)*f0*t8);ti1e = mod8.*cos(2*pi*ScaleTable(12)*f0*t8); do2e = mod8.*cos(2*pi*ScaleTable(13)*f0*t8);re2e = mod8.*cos(2*pi*ScaleTable(14)*f0*t8); mi2e = mod8.*cos(2*pi*ScaleTable(15)*f0*t8);fa2e = mod8.*cos(2*pi*ScaleTable(16)*f0*t8); so2e = mod8.*cos(2*pi*ScaleTable(17)*f0*t8);la2e = mod8.*cos(2*pi*ScaleTable(18)*f0*t8);ti2e = mod8.*cos(2*pi*ScaleTable(19)*f0*t8); do3e = mod8.*cos(2*pi*ScaleTable(20)*f0*t8); blke = zeros(1,j);% 1/16 notesdo0s = mod16.*cos(2*pi*ScaleTable(21)*f0*t16); re0s = mod16.*cos(2*pi*ScaleTable(22)*f0*t16); mi0s = mod16.*cos(2*pi*ScaleTable(23)*f0*t16); fa0s = mod16.*cos(2*pi*ScaleTable(1)*f0*t16); so0s = mod16.*cos(2*pi*ScaleTable(2)*f0*t16); la0s = mod16.*cos(2*pi*ScaleTable(3)*f0*t16); ti0s = mod16.*cos(2*pi*ScaleTable(4)*f0*t16); do1s = mod16.*cos(2*pi*ScaleTable(5)*f0*t16); re1s = mod16.*cos(2*pi*ScaleTable(6)*f0*t16); mi1s = mod16.*cos(2*pi*ScaleTable(7)*f0*t16); fa1s = mod16.*cos(2*pi*ScaleTable(8)*f0*t16); so1s = mod16.*cos(2*pi*ScaleTable(9)*f0*t16); la1s = mod16.*cos(2*pi*ScaleTable(10)*f0*t16); tb1s = mod16.*cos(2*pi*ScaleTable(11)*f0*t16); ti1s = mod16.*cos(2*pi*ScaleTable(12)*f0*t16); do2s = mod16.*cos(2*pi*ScaleTable(13)*f0*t16); re2s = mod16.*cos(2*pi*ScaleTable(14)*f0*t16); mi2s = mod16.*cos(2*pi*ScaleTable(15)*f0*t16); fa2s = mod16.*cos(2*pi*ScaleTable(16)*f0*t16); so2s = mod16.*cos(2*pi*ScaleTable(17)*f0*t16); la2s = mod16.*cos(2*pi*ScaleTable(18)*f0*t16); ti2s = mod16.*cos(2*pi*ScaleTable(19)*f0*t16); do3s = mod16.*cos(2*pi*ScaleTable(20)*f0*t16); blks = zeros(1,k);% Melody by Schau_malpart1 = [mi1e fa1e so1e so1e so1e so1e so1f mi1e fa1e...so1e so1e so1e so1e so1f la1e ti1e...do2f mi1f mi1e re1e mi1e mi1e mi1e mi1e ...];part2=[ so1e so1e fa1e fa1e mi1e re1e do1e do1e mi1e...mi1e fa1e mi1e do1e do1f so1e so1e...so1e fa1e fa1e mi1e fa1e so1e so1e mi1e mi1e re1e re1e re1e ...];part3 = [mi1e fa1e so1e so1e so1e so1e so1f so1e so1e...so1e so1e so1e so1e so1f la1e ti1e...do2f mi1f mi1e re1e mi1e mi1e mi1e mi1e mi1e so1e...];part4 = [ so1e so1e fa1e fa1e mi1e re1e do1e do1e mi1e mi1e fa1e mi1e do1e so1e so1e...so1e fa1e fa1e mi1e fa1e so1e so1e la1e la1e so1e so1e la1f ti1f...do2e do2e re2e do2e do2f do2e do2e...ti1e do2e ti1e so1e so1e so1e so1e...la1f do1f do1f re1e mi1e mi1e so1e so1e mi1e re1f la1e ti1e...do2e do2e re2e do2e do2f do2e do2e...ti1e do2e ti1e so1e so1f so1e so1e...la1e do2e do2e do2e do2e do2e do2e...do2e re2s re2e do2e mi2e re2e re2f re2f re2f re2f re2f ...];part5 = [mi2f mi2e fa2e mi2e re2f do2e re2e so2e re2e re2f re2f...do2f do2e re2e do2f ti1e la1e...ti1f mi2e ti1e ti1e ...la1f re2e mi2e re2e do2e la1f ...so1f re2e mi2e re2e do2e la1f...];% Combination, v1 is complete version, v2 is simple version.v1 = [part1 part2 part3 part4 part5];s = v1;sound(s,fs);输入此代码后,即可使《当你孤单你会想起谁》以matlab的形式播放出来4:实验结果:经过matlab的处理后,《当你孤单你会想起谁》通过matlab播放了出来,并可以画出如下图片。

音乐合成大作业报告

音乐合成大作业报告

Matlab实验大作业一音乐合成微纳电子系微71 郝家悦2017011089第一部分1.用正弦信号合成《东方红》源代码如下:用到的乐音为高音C,高音D,G,F,低音D,长度有四分音符和八分音符。

clear all;close all;clc;t=0:(1/8192):0.5;tlong=0:(1/8192):1;tshort=0:(1/8192):0.25;hc=sin(2*pi*523.25*t);hcshort=sin(2*pi*523.25*tshort);hdshort=sin(2*pi*587.33*tshort);g=sin(2*pi*392*t);glong=sin(2*pi*392*tlong);f=sin(2*pi*349.23*t);fshort=sin(2*pi*349.23*tshort);ldshort=sin(2*pi*146.83*tshort);dfh=[hc,hcshort,hdshort,glong,f,fshort,ldshort,glong];sound(dfh);见music_ex1.m,运行结果音调正确,但是听起来缺乏真实感,较为刺耳,这是因为合成的音乐中缺乏谐波成分;而在音调衔接处会出现杂音,影响听感。

2.“啪”的杂音由相位不连续导致,为消除此效果,需要在音调衔接处将声强降低至0.这也符合正常音乐音量衰减的规律。

经过测试,在本题中,指数衰减与线性衰减听上去差别不大。

如图1.5所示,添加分段函数的包络。

源代码如下:clear all;close all;clc;t=(1/8192):(1/8192):0.5;tlong=(1/8192):(1/8192):1;tshort=(1/8192):(1/8192):0.25;hc=sin(2*pi*523.25*t);hcshort=sin(2*pi*523.25*tshort);hdshort=sin(2*pi*587.33*tshort);g=sin(2*pi*392*t);glong=sin(2*pi*392*tlong);f=sin(2*pi*349.23*t);fshort=sin(2*pi*349.23*tshort);ldshort=sin(2*pi*146.83*tshort);%四分音符对应的包络mult=zeros(1,4096);for k=1:1:600mult(k)=(1/600)*k;endfor k=601:1:1200mult(k)=1-(0.5/600)*(k-600);endfor k=1201:1:2500mult(k)=0.5;endfor k=2501:1:4096mult(k)=0.5-0.5/(4096-2500)*(k-2500); endmult2=zeros(1,8192);for k=1:1:1200mult2(k)=(1/1200)*k;endfor k=1201:1:2400mult2(k)=1-(0.5/1200)*(k-1200);endfor k=2401:1:5000mult2(k)=0.5;endfor k=5001:1:8192mult2(k)=0.5-0.5/(8192-5000)*(k-5000);endmult8=zeros(1,2048);for k=1:1:300mult8(k)=(1/300)*k;endfor k=301:1:600mult8(k)=1-(0.5/300)*(k-300);endfor k=601:1:1250mult8(k)=0.5;endfor k=1251:1:2048mult8(k)=0.5-0.5/(2048-1250)*(k-1250);endplot(mult8);dfh=[hc.*mult,hcshort.*mult8,hdshort.*mult8,glong.*mult2,f.*mult,fsho rt.*mult8,ldshort.*mult8,glong.*mult2];sound(dfh);见music_ex2.m由于不同长度的音的衰减有所不同,因此对二分音符、四分音符和八分音符的包络,都进行了多次调整,并非简单拉伸/收缩函数。

基于MATLAB的音乐分析与合成实验设计

基于MATLAB的音乐分析与合成实验设计
LIM i n,Z HANG e —we ,J ANG i g—xn,LI Ya W i i I M n i U n
( ol eo l t m ca i l n f m t nE g er g aa ao at sU iesy C l g f e r ehnc dI o a o nt e n ,D i N t nli nvr t, e E co aa n r i n i ln i ie i D lnLann 16 5 C i ) a a i ig1 60 , hn i o a
L AB —b s d mu i n lssa d s n h sse p rme t ,w e et e c n e t n n lssme h d a e sc a ay i n t e i x e y i n s h r o c p sa d a ay i h to s
合成实验 。把信号与系统的概念及分方法应用于生 活实际 , 增进对 傅里 叶级数和 傅里 叶变换 的理 解 ,
启 发 学 习 思 路 , 发 学 习热 情 , 深 对 信 号 分 析 在 工 程 领 域 具 体 应 用 的 印象 , 高 学 生 分 析 问题 和解 决 问 激 加 提
题的能力 。
a p iai n n e gne rn ed n mp o e t er c p b l is o n lzn nd s li g p o — p lc t s i n i e g f l s a d i r v h i a a ii e fa ay i g a ov n r b o i i t
基于 M TA A L B的 音乐 分 析 与合 成 实 验 设 计
李 敏 , 维 维 , 明新 , 张 姜 刘 燕
( 大连 民族 学院 机 电信 息 工程 学院 , 宁 大连 160 ) 辽 165

毕业设计-基于matlab软件的音乐合成

毕业设计-基于matlab软件的音乐合成

河北经贸大学毕业论文基于MATLAB软件的音乐合成专业名称:电子信息工程班级:学生姓名:指导老师:完成时间:2015年5月摘要本设计利用MA TLAB软件,通过MA TLAB GUI构建一个具有图形用户界面的音乐合成系统。

该系统能实现音乐的简单合成、音乐的降噪处理、音乐的加谐波处理、音乐的升降度处理、音乐的时域和频域波形图显示及利用傅里叶级数原理合成音乐的操作。

本系统应用模块化的思路进行设计,将系统分为四个模块,分别为简单合成及处理音乐的模块、利用傅里叶变换分析音乐频谱的模块、基于傅里叶级数合成音乐的模块和音乐字幕动态显示的模块。

本论文阐述了整个系统详细的设计过程,而针对每个模块的设计都有详细的理论基础为依托,包括原理及设计程序,并且有仿真效果的演示。

该软件系统作为教学辅助软件可以为语音信号处理课程的教学提供一定的帮助,可以让学生们更好地深入理解信号与系统等主干课程的内容,充分发挥自身的创新能力与实践能力。

该系统可以通过选取不同的算法,对音乐分别进行处理,基本做到抑制噪声,提高音乐质量,有利于更高层次的处理与应用。

此外,从整体效果上看,该系统的用户应用界面友好、便于操作,通过菜单、控件的使用可以方便的选取不同的方法,设置不同的参数以便于用户操作使用。

系统通过对各种处理效果的演示,也可以让用户更直观地了解简单音乐处理的几种方法,并在各种相应处理前后的对比中让用户更容易接受与其对应的方法及特点。

关键词音乐合成;MTALAB;GUI;傅里叶变换AbstractThe design in this paper uses the MATLAB software to construct a music synthesis system with a graphical user interface by MATLAB GUI.The system can achieve simple music synthesis,the processing of reducing music noise,the treatment of music with harmonic,the processing of raising and lower octave,displaying waveform in time domain and frequency domain and synthesis of music based on Fourier series.This system takes the idea of modular design,divided into four modules, respectively including the module of music of simple synthesis and processing,the module of music spectrum analysis through using the Fourier transform,the module of music synthesis based on Fourier series,the module of displaying music subtitle dynamically.This paper,including the principle and program design and simulation results demonstrate, describes the design process of the system in detail.Each module has a detailed theoretical basis for support.As a teaching aid software can provide some help for the speech signal processing course in teaching,which can help students understand the signal and system course and give full play to students’ innovation ability and practice ability.Through selecting different algorithms,the system can dispose music respectively, suppress noise basically,improve the quality of music and avail to deal with the higher level.In addition,the graphic user interface of the system is friendly and easy to operate. Select different methods and set different parameters for users by using the menu,controls.Through a variety of demonstrations of effects,the system also makes users understand several ways of dealing with music more intuitively and in compare with before and after the all treatments,we can accept the corresponding methods and characteristics more easily.Keywords Music synthesis; MTALAB;GUI;Fourier transform目录1 绪论 (1)1.1 研究背景及意义 (1)1.2 研究的主要内容 (1)2 MA TLAB软件的简介 (3)2.1 MA TLAB的发展史 (3)2.2 MA TLAB的系统构成 (4)3MA TLAB音乐合成的原理 (5)3.1 所涉及的乐理知识简述 (5)3.1.1 音调与唱名 (5)3.1.2 音色与谐波 (5)3.1.3 十二平均律 (5)3.2 傅里叶变换与频谱分析 (6)4 MA TLAB音乐合成系统的总体设计 (7)4.1 系统的总体设计 (7)4.2 GUI界面的设计 (7)4.2.1 启动GUIDE (8)4.2.2 GUIDE设计环境 (8)4.2.3 GUI界面的功能设计 (9)5 MA TLAB音乐合成系统的设计与实现 (11)5.1 简单合成及处理音乐模块的设计与实现 (11)5.1.1 合成《社会主义好》 (11)5.1.2 加包络,除噪音 (12)5.1.3 音乐升降度处理 (13)5.1.4 音乐加谐波处理 (15)5.2 用傅里叶变换分析音乐频谱模块的设计与实现 (16)5.3 基于傅里叶级数合成的音乐模块的设计与实现 (20)5.4 音乐《小星星》字幕动态显示模块的设计与实现 (21)6 系统的调试与运行 (24)6.1 音乐的播放、暂停的调试与运行 (24)6.2 傅里叶变换分析音乐的调试与运行 (25)总结 (26)参考文献 (27)基于MA TLAB软件的音乐合成1 绪论1.1研究背景及意义如今,信息化、数字化程度越来越高,语音信号的处理技术作为基于数字信号处理技术与语音学知识对语音信号进行处理的新兴技术被越来越多的高科技产业广泛应用,这项技术成为信息科学工程与研究领域的核心技术之一。

使用matlab进行简单音乐合成

使用matlab进行简单音乐合成

信号与系统-综合实验之音乐合成(1)请根据《东方红》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB 中生成幅度为1 、抽样频率为8kHz 的正弦信号表示这些乐音。

请用sound 函数播放每个乐音,听一听音调是否正确。

最后用这一系列乐音信号拼出《东方红》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何?代码如下:f =8000;t2=[0:1/f:1];t4=[0:1/f:0.5];t8=[0:1/f:0.25];omg5=523.35;omg6=587.33;omg2=392;omg1=349.23;omg6l=293.66;m1=sin(2*pi*omg5*t4);m2=sin(2*pi*omg5*t8);m3=sin(2*pi*omg6*t8);m4=sin(2*pi*omg2*t2);m6=sin(2*pi*omg1*t4);m7=sin(2*pi*omg1*t8);m8=sin(2*pi*omg6l*t8);m9=sin(2*pi*omg2*t2);m=[m1 m2 m3 m4 m6 m7 m8 m9];sound(m);听的时候发现在相邻乐音之间有杂音,这是由于相位不连续造成的。

(2)你一定注意到(1) 的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。

这种噪声严重影响合成音乐的质量,丧失真实感。

为了消除它,我们可以用图1.5 所示包络修正每个乐音,以保证在乐音的邻接处信号幅度为零。

此外建议用指数衰减的包络来表示。

我采用的是指数衰减的包络。

代码如下:f =8000;t2=[0:1/f:1];t4=[0:1/f:0.5];t8=[0:1/f:0.25];omg5=523.35;omg6=587.33;omg2=392;omg1=349.23;omg6l=293.66;m1=exp(-2*t4).*sin(2*pi*omg5*t4);m2=exp(-4*t8).*sin(2*pi*omg5*t8);m3=exp(-4*t8).*sin(2*pi*omg6*t8);m4=exp(-1*t2).*sin(2*pi*omg2*t2);m6=exp(-2*t4).*sin(2*pi*omg1*t4);m7=exp(-4*t8).*sin(2*pi*omg1*t8);m8=exp(-4*t8).*sin(2*pi*omg6l*t8);m9=exp(-1*t2).*sin(2*pi*omg2*t2);m=[m1 m2 m3 m4 m6 m7 m8 m9];sound(m);第一次我采用的指数衰减没有时间前面的系数,即每个都只乘exp(t),没有系数;后来根据不同节拍,更改了不同的衰减系数,这样声音听起来感觉更加圆润。

音乐合成_matlab

音乐合成_matlab

MATLAB音乐合成一、简单音乐合成1、根据音乐简谱和十二平均律计算出每个乐音的频率,在 MATLAB中生成幅度为 1,抽样频率为 8kHz 的正弦信号表示这些乐音,用 sound 播放合成的音乐A=[174.61 196 220 246.94 261.62 293.66 329.63 349.23 392 440493.88 523.25 587.33 659.25 698.45 739.99 783.99]; % 定义各调频率fs=8000; %修改频率pu=[1 1 1 3 5 5 5 5 6 6 6 8 5 4 4 6 6 3 3 3 3 2 2 2 2 5 5 1 1 1 3 5 5 5 5 6 6 6 8 5 4 4 4 6 3 3 3 3 3 2 2 2 3 1 ]; %在pu中只需输入乐谱数字,在下面B=A-什么什么那部分调整音调,省去了写频率的麻烦p=0.5;last_time=[p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p p p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p/2 p ];%各乐音持续时间为节省空间,用p代替N=length(pu);f=zeros(1,N);B=A-5;for i=1:Nf(i)=B(pu(i)); %f为各个乐音对应的频率,修改其它调endpoint=fs*last_time; %各个乐音的抽样点数total_point=sum(point); %这段音乐的总抽样点数store=zeros(1,total_point); %用store向量来储存抽样点m=1;for num=1:N %利用循环产生抽样数据,num表示乐音编号 t=1/fs:1/fs:point(num)/fs; %产生第num个乐音的抽样点store(m:m+point(num)-1)=sin(2*pi*f(num)*t); %抽样点对应的幅值m=m+point(num);endsound(store,8000); %播放出storeplot(store); %画出store图像2、除噪音,加包络在1.1中听到有“啪”的杂声,这是由于相位不连续产生了高频分量,下面通过加包络来消噪音。

Matlab音乐合成实验报告

Matlab音乐合成实验报告

音乐合成实验目录音乐合成实验 (1)摘要: (1)第一部分简单的合成音乐 (2)1.1合成《东方红〉〉 (2)1.2 除噪音,加包络 (3)1.3改变程序,实现1.2中的音乐升高和降低一个八度 (8)1.4 在1.2的音乐中加入谐波 (8)1.5 自选音乐合成 -- 《两只老虎》 (9)第二部分用傅里叶变换分析音乐 (10)2.1 载入fmt.wav并播放 (10)2.2 载入文件Guitar.mat,处理原始数据realwave (11)2.3 分析wave2proc的基波和谐波 (14)2.4 自动分析fmt.wav的音调和节拍 (17)第三部分基丁傅里叶级数的音乐合成 (20)3.1用2.3分析出来的结果重新加谐波 (20)3.2 通过2.4提取的吉他音调信息弹奏《东方红》 (21)实验收获 (22)本文共有三大部分:第一部分,简单的音乐合成;第二部分,用傅里叶变换分析音乐;第三部分,基丁傅里叶级数的音乐合成。

由潜入深,一步一步分析了用MATLAffi行音乐合成的过程。

通过本实验达到了加深对傅里叶级数和傅里叶分析的理解,熟悉对MATLABS本使用的目标。

1.1 合成《东方红》根据《东方红》第一小节的简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB生成幅度为1,抽样频率为8kHz的正弦信号表示这些乐音,用sound 播放合成的音乐5 | 2 — 1 ] 161 2 - |压曲(嘉床如:>第〒小市曲谓由图可知《东方红》的曲调定为F,即1=F,对应的频率为349.23Hz,据此可以计算出其他乐音的频率,例如5对应的频率为7/12f5 = 349.23 x 2 = 523.25 , 一次类推计算出第一小节各乐音对应的频率为:在确定了各乐首的频率之后需要确定每个乐首的持续时间。

每小节有两拍,一拍的时间是0.5s ,因此各乐音的持续时间为:而在MATLAB表示乐音所用的抽样频率为fs=8000Hz,也就是所1s钟内有8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。

音乐合成

音乐合成

音乐合成报告本文是基于matlab 的应用,用sound 函数合成简单的音乐,并用傅里叶分析音乐。

本次实验旨在对提高对matlab 的掌握以及深刻理解傅里叶级数和傅里叶分析。

一、音乐合成步骤我们知道,每一个音符都包含不同的频率,就是说,只要知道了音符所代表的频率,我们就可以通过matlab 把各种音符所表示的频率和延长时间描述出来。

1、 简谱分析。

左图是钢琴键盘上各音符对应的频率值,我们可以看到,从上往下,第一个A=440Hz,第二个A=220Hz,同样的道理,我们分析可以知道,每高八度音,频率就增大一倍。

因此,我们只要确定了乐谱的基波,就可以用左边的表格对应写出音符所代表的频率。

但是,在一个乐谱中,每个音符延续的时间是不一致的,这就是音乐知识中讲的节拍,每一个节拍所占的时间长度也由乐谱的音调和节奏标记来决定。

比如说:1=C 就是基调DO 为对应键盘上的C ,即1=261.7Hz ,低八度为1.=130.8Hz 。

一拍时长为(2/4)秒,就是0.5s 。

又比如这里Key:F,就是基调DO 为对应键上的F ,即1=349.2Hz ,低八度为1.=174.6Hz 。

那么,我们知道了基调和节奏时长,我们就可以分析乐谱了。

下面举一个例子:红》第一句,一共有四拍,为上面是《东方一拍,占半拍,有三个音符,音符延续时长为半拍、1/4拍、1/4拍。

至此,简单的乐理就明了于心了,我们可以根据以上的思路,用matlab 编出各个音符的频率,然后用时间限定在组合起来播放,简单的音乐合成就完成了。

还有一个问题,就是怎么给音符在延续的时长连续的问题。

下面结合程序,再做详解。

一:钢琴键频率对照表2、 程序编写思路。

我们从上面的分析中,大概知道了如何合成音乐,但是,我们如何具体实现呢?在matlab 中所用的抽样频率fs=8000Hz 。

以下面的谱子为例,这是我初中的班歌第一句:对照图一,我们可以得到如下的频率表率乘以二即可。

清华大学谷源涛MATLAB音乐合成

清华大学谷源涛MATLAB音乐合成

大作业一音乐合成第一部分1.1 合成东方红合成源程序如下,程序参考谷老师上课内容(自己编完代码后跟老师的差不多,而且实在是不知道还能做什么改进了。

)function k= play()rhythm = [5 5 6 2 1 1 6 2;0 0 0 0 0 0 -1 0 ; 0.5 0.25 0.25 1 0.5 0.25 0.25 1;];y=generaterhythm(rhythm, 8);sound(y);endfunction y = generaterhythm(rhythm, basetune)fs = 8000;soundpos = [0 2 4 5 7 9 11 0:12];y = zeros(1, sum(rhythm(3,:))*fs + 1);curpos = 1;for count = 1 : length(rhythm)cursoundname = rhythm(1, count);cursoundpos = soundpos(cursoundname);curfreq = 220 * 2 .^ ((cursoundpos + basetune + 3) / 12 + rhythm(2, count)); cursound = generatetune(curfreq, rhythm(3, count), fs);y(1,curpos:(curpos + length(cursound) - 1)) = cursound;curpos = curpos + length(cursound);endendfunction y = generatetune (freq, time, fs)t = 0:1/fs:(time - 1/fs);y = zeros(1, length(t));y=sin(t*freq*2*pi);end1.2 用包络修正每个乐音,消除噪音在1.1中听到有“啪”的杂声,下面通过加包络来消噪音。

MATLAB在声音合成与音乐生成中的应用实践

MATLAB在声音合成与音乐生成中的应用实践

MATLAB在声音合成与音乐生成中的应用实践声音合成和音乐生成是音频领域的重要应用之一,它们可以通过模拟或合成声音来产生音乐或其他声音效果。

MATLAB作为一种强大的科学计算软件,提供了丰富的音频处理和分析函数,可以实现高质量的声音合成和音乐生成。

本文将介绍MATLAB在声音合成和音乐生成中的应用实践。

首先,MATLAB提供了丰富的声音合成算法和工具箱,可以方便地生成各种类型的声音效果。

例如,MATLAB的Waveform Generation工具箱提供了一些基本的波形函数,如正弦波、方波、锯齿波等,可以通过调整参数来生成不同频率和振幅的声音波形。

此外,MATLAB还提供了一些高级的声音合成算法,如FM合成、Granular Synthesis等。

这些算法可以模拟真实乐器的发音机制,并生成逼真的音乐效果。

其次,MATLAB在音乐生成中的应用更为广泛。

音乐生成是指通过算法或规则生成音乐作品的过程。

MATLAB可以通过编写脚本和函数实现音乐生成算法,从而生成优美的音乐片段。

其中,一种常见的音乐生成算法是基于概率的模型,如马尔可夫链。

通过构建状态转移矩阵和初始状态向量,可以使用MATLAB快速生成基于马尔可夫链的音乐片段。

此外,MATLAB还可以通过调用音频处理工具箱中的音乐特征提取函数,如音高、节奏等,来辅助音乐生成算法。

然而,单一的声音合成和音乐生成算法往往难以生成高质量的音乐作品。

因此,相较于传统的基于规则的算法,深度学习在音乐生成中的应用逐渐受到关注。

MATLAB提供了强大的深度学习工具箱,如Deep Learning Toolbox,可以用于音乐生成。

深度学习算法可以通过分析大量的音乐数据,学习并模拟人类音乐创作的特点和规律,从而生成高质量的音乐。

在MATLAB中,人类创作可以通过遗传算法来模拟。

遗传算法是一种基于生物进化原理的优化算法,可以通过演化过程找到最优解。

在音乐中,可以将音符作为基本单元,通过遗传算法来生成音乐的结构和内容。

音乐合成实验

音乐合成实验

音乐合唱综合实验简单的合成音乐1、请根据《东方红》片断的简谱和“十二平均律”计算出该片断中各个乐音的频率,在MATLAB 中生成幅度为1 、抽样频率为8kHz 的正弦信号表示这些乐音。

请用sound 函数播放每个乐音,听一听音调是否正确。

最后用这一系列乐音信号拼出《东方红》片断,注意控制每个乐音持续的时间要符合节拍,用sound 播放你合成的音乐,听起来感觉如何?理论答案:《东方红》第一小节乐音的频率:5:523.25Hz6:587.33 Hz2:392 Hz1:349.23 Hz6.:293.66 Hz分析说明:用sound函数直接播放各个乐音时,音调间的高低关系是正确的。

故用此信号拼出的《东方红》第一小节时,能听出乐曲的旋律,但乐音之间有杂声。

产生杂音是因为计算机在播放合成的乐音片段时,每播放完一个乐音后再播放下一个音,而每个音都是瞬间达到最大值后保持一段时间然后立即消失,因此音跟音之间有微小间隔,听上去有“噗”的杂声。

而在现实中,用乐器演奏乐曲时,弹完一个音后,琴弦还在震动是,另一个音就会被拨响,这样音节之间会有重叠,每个音调也是有渐强和渐弱的过程。

如果想消除此处的杂音,必须是音调实现上述真实乐器的播放方式。

2、你一定注意到(1) 的乐曲中相邻乐音之间有“啪”的杂声,这是由于相位不连续产生了高频分量。

这种噪声严重影响合成音乐的质量,丧失真实感。

为了消除它,我们可以用图6.5 所示包络修正每个乐音,以保证在乐音的邻接处信号幅度为零。

此外建议用指数衰减的包络来表示。

开始使用教材中的包络对1中的乐音进行修正,但发现怎样也无法很好的消除“啪”的杂声,进过不断的修正包络的函数慢慢使杂音减小,最后得到的新的音乐明显比1中的音乐更为自然、动听。

程序中产生的包络如下图所示:加包络后的音乐如上图所示,可以发现音节间都有较短的重叠部分,正是这部分起到了消除“啪”声的作用。

3、请用最简单的方法将2中的音乐分别升高和降低一个八度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

音乐合成实验目录音乐合成实验 (1)摘要: (1)第一部分简单的合成音乐 (2)1.1合成《东方红》 (2)1.2 除噪音,加包络 (3)1.3改变程序,实现1.2中的音乐升高和降低一个八度 (8)1.4在1.2的音乐中加入谐波 (9)1.5自选音乐合成——《两只老虎》 (10)第二部分用傅里叶变换分析音乐 (11)2.1载入fmt.wav并播放 (11)2.2载入文件Guitar.mat,处理原始数据realwave (11)2.3分析wave2proc的基波和谐波 (13)2.4自动分析fmt.wav的音调和节拍 (16)第三部分基于傅里叶级数的音乐合成 (19)3.1 用2.3分析出来的结果重新加谐波 (19)3.2 通过2.4提取的吉他音调信息弹奏《东方红》 (19)实验收获 (21)摘要:本文共有三大部分:第一部分,简单的音乐合成;第二部分,用傅里叶变换分析音乐;第三部分,基于傅里叶级数的音乐合成。

由潜入深,一步一步分析了用MATLAB 进行音乐合成的过程。

通过本实验达到了加深对傅里叶级数和傅里叶分析的理解,熟悉对MATLAB 基本使用的目标。

第一部分 简单的合成音乐1.1 合成《东方红》根据《东方红》第一小节的简谱和十二平均律计算出该小节每个乐音的频率,在MATLAB 中生成幅度为1,抽样频率为8kHz 的正弦信号表示这些乐音,用sound 播放合成的音乐由图可知《东方红》的曲调定为F ,即1=F ,对应的频率为349.23Hz ,据此可以计算出其他乐音的频率,例如5对应的频率为7/125349.232523.25f =⨯=,一次类推计算出第一小节各乐音对应的频率为: 乐音 5562 1162在确定了各乐音的频率之后需要确定每个乐音的持续时间。

每小节有两拍,一拍的时间是0.5s ,因此各乐音的持续时间为: 乐音 5 5 6 2 1 1 6 2而在MATLAB 中表示乐音所用的抽样频率为fs=8000Hz ,也就是所1s 钟内有8000个点,抽样点数的多少就可表示出每个乐音的持续时间的长短。

用一个行向量来存储这段音乐对应的抽样点,在用sound 函数播放即可。

根据以上分析在MATLAB 中编写如下程序: sound_1_1.m在MATLAB中运行sound_1_1.m,播放出了《东方红》的第一段,但是可以听出效果很不好,只能听出具有《东方红》的调子而已。

1.2 除噪音,加包络在1.1中听到有“啪”的杂声,下面通过加包络来消噪音。

eα-因子,在最简单的包络为指数衰减。

最简单的指数衰减是对每个音乘以te-的衰减,这种衰减方法使用的是相同速度的衰减,但是实验中首先加的是 1.5t发现噪音并没有完全消除,播放的音乐效果不是很好,感觉音乐起伏性不强。

于是采用不同速度的衰减,根据乐音持续时间的长短来确定衰减的快慢,乐音持续时间越长,衰减的越慢,持续时间越短,衰减的越快。

在1.1程序的基础上加上包络,编写如下程序:sound_1_21.m播放后可以听出噪音已经消除,同时因为不同时长的乐音衰减的快慢不一样,音乐听起来更有起伏感,下图是加包络后的east 图像。

更科学的包络如下图所示,每个乐音都经过冲激、衰减、持续、消失四个阶00.51 1.52 2.53 3.5x 104-3-2-1123段。

由上图可以看出这个包络是四段直线段构成的,因此只要确定了每段线段的端点,即可用端点数据写出直线方程,因为直线方程可以用通式写出(我用的是斜截式),因此这段包络可以用简单的循环来完成。

例如认为包络线上的数据如下图所示:据此在MATLAB中编写如下程序:sound_1_22.m运行得到的图像为:下图是两个乐音交接处的局部放大图,可以看到前一个乐音一直衰减到0,后一个乐音从0开始增加,因此消除了噪音。

00.51 1.52 2.53 3.5x 104-2-1.5-1-0.500.511.52若不需要每个音都衰减到0,例如只需衰减到持续阶段幅值的20%,对程序做简单的修改即可,将T=[0 1.5 1 1 0]改为T=[0.2 1.5 1 1 0.2]运行得到的结果为:由图可见,每个乐音都是衰减到一较小值而不是0,也能消除噪音,同时音乐听起来更加连续。

1.3 改变程序,实现1.2中的音乐升高和降低一个八度升高一个八度即每个乐音的频率都提高一倍,变为原来的2被;降低一个八度即每个乐音的频率都减小一倍,变为原来的1/2。

因此最简单的办法是将存储乐音频率的向量每个元素改变为2或1/2倍。

即将程序中的f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392];改为 f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392]*2;或 f=[523.25 523.25 587.33 392 349.23 349.23 293.66 392]/2;将上述音乐上高半个音阶,即将频率变为原来的1/122(1.06)倍,可以利用resamlpe 函数对原来的数据点进行重采样来实现 east=resample(east,100,106);因为resample 进行重新采样后会使每个乐音的持续时间改变,但是因为升高半个音阶,频率改变不大,所以每个音的持续时间是基本不变的。

00.51 1.52 2.53 3.5x 104-2-1.5-1-0.500.511.521.4 在1.2的音乐中加入谐波在1.2的音乐中加上二、三、四次谐波,基波幅度为1,高次谐波幅度分别为0.2、0.3、0.1。

只需将1.2程序改为sound_1_4.m即可,加颜色部分为修改的部分,加上谐波后音乐效果变得更好了。

1.5 自选音乐合成——《两只老虎》两只老虎曲调为C,因此可以得到每个乐音对应的频率分别为:每小节有四拍,一拍的时间是0.5s,因此各乐音的持续时间为:乐音 1 2 3 1 1 2 3 1sound_1_5.m第二部分用傅里叶变换分析音乐2.1 载入fmt.wav并播放利用wavread函数载入,用sound函数播放,程序如下:sound_2_1.m这段音乐听起来比之前合成的音乐更加真实,因为里边含有丰富的谐波。

2.2 载入文件Guitar.mat,处理原始数据realwave载入文件Guitar.mat,分析wave2proc是怎么由realwave得到的。

利用load Guitar.mat;载入并用plot函数将realwave、wave2proc分别画出,得到以下两幅图050100150200250050100150200250可以看到,wave2proc比realwave的周期性好得多,去掉了非线性谐波和噪声。

在时域做,从图上可以看到,realwave的数据大约是10个周期的共243个数据,因此可以用resample函数对realwave进行重新采样,将采样点提高到250个,那么重采样后每个周期有25个点,将这25个点对应相加求平均值后得到一个周期的值,因为进行了平均,减小了非线性谐波和噪音,然后将这25个数据延托成十个周期即250个点,在利用resample函数对得到的函数重新采样将采样点数恢复到243个。

根据以上分析,编写实现这个思路的程序如下:sound_2_2.m由图可见,两组数据重合的很好,说明这种方法是很不错的方法。

2.3 分析wave2proc 的基波和谐波为了分析wave2proc 的基波和谐波,可以对wave2proc 进行傅里叶变换,得到wave2proc 的幅值谱,在频谱图上的第一个突出的波峰对应的频率即为wave2proc 基频,利用help fft 学习了MATLAB 中快速傅里叶变换函数fft 的用法,编写了如下程序:050100150200250-0.15-0.1-0.0500.050.10.150.20.25虽然从图上可以大概看出包络,但是非常不明显,假如提高频域的抽样频率,例如将抽样频率由NFFT = 2^nextpow2(length(wave2proc))改为 NFFT = 8^nextpow2(length(wave2proc))得到的结果如下;050010001500200025003000350040000.010.020.030.040.050.060.070.08050010001500200025003000350040000.010.020.030.040.050.060.070.08由图可见虽然频域的抽样频率提高了很多,但是得到的包络依然不精确,这是因为wave2proc 是周期函数,但是现在的wave2proc 只有243个数据点,并不能非常明显的体现出其周期性,因此它的幅值谱的离散化程度不高,虽然提高了频域的抽样频率,但是wave2proc 数据点的周期性并没有增加,所以要显示出离散化程度高的幅值谱,就要增加wave2proc 的周期性,即让wave2proc 在时域重复多次后在进行傅里叶变换。

利用repmat 函数可以将wave2proc 在时域重复。

将程序修改为 sound_2_3.m运行后得到的幅值谱为050010001500200025003000350040000.010.020.030.040.050.060.070.08可以看出幅值谱的离散化程度已经非常高了。

由图读出wave2proc的基频为329.1Hz,幅值为0.05401,高次谐波幅值分别为:谐 2 3 4 5 6 7 8 92.4 自动分析fmt.wav的音调和节拍思路分析:将fmt.wav导入后得到的是一个向量,它包含了这段音乐的所有信息,要自动分析这段音乐的音调就需要将每个音调对应的点进行傅里叶变换得到其幅值谱,在幅值谱上找到第一个幅值较大的极大值点,该点对应的就是该音调的基频,得到基频后就可以得到高次谐波的幅值。

为了使对每个音调进行傅里叶变换后得到的幅值谱离散程度高,应该将每个音调的数据在时域上重复多次,由于这些点都是直接采集的为做处理的点,因此其重复次数应该足够大才能体现出较强周期性,本实验采用重复1000次,虽然重复次数越多越好,但是次数太大,程序运行的速度会大大降低。

这里边还有两个关键点:第一,在从幅值谱上找基频时,因为图上的极大值点很多,怎么能让程序自动确定出准确的基频。

第二,在程序找到了基频之后,再由基频去获取高次谐波的幅值时需要有一定的容错能力,例如若基频为200Hz,幅值为1,那么对应的二次谐波的频率为400Hz,但是很可能恰好幅值谱上400Hz 处的幅值为0.01,但是401Hz处的幅值为0.2,这时实际上的二次谐波应该为401Hz,但是若没有给基频一个容错范围,显然找到的二次谐波的幅值是不正确的。

相关文档
最新文档