基于MATLAB软件的音乐合成_第1页
基于MATLAB软件的音乐合成_第2页
基于MATLAB软件的音乐合成_第3页
基于MATLAB软件的音乐合成_第4页
基于MATLAB软件的音乐合成_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

河北经贸大学毕业论文河北经贸大学毕业论文基于MATLAB软件的音乐合成专业名称:电子信息工程班级:学生姓名:指导老师:完成时间:2015年5月④在设计GUI界面时的布局、各种参数设置以及各个模块演示编程的问题。本设计使用的是MATLAB2013a软件,设计所实现的功能都在GUI图形应用界面体现出来,便于研究与操作。通过本设计让用户更直观地了解简单音乐处理的几种方法,并在各种相应处理前后的对比中更容易接受与其对应的方法及特点,学会并掌握MATLAB信号处理的编程以及MATLAB下GUI的设计。2MATLAB软件的简介MATLAB(matrix&laboratory)矩阵实验室,作为一款拥有算法开发、数据分析及数值计算、创建用户界面等强大功能的仿真软件,被美国MathWorks公司发行,将众多功能合成在一个便于操作的视窗交互化环境中。在科学研究、工程计算、信号处理、图像处理等方面得到广泛应用。而在本设计中用到的是MATLAB2013a时频域分析、音乐合成及GUI图形应用界面等信号处理方面的功能。2.1MATLAB的发展史1980年,身为美国NewMexico大学计算机系系主任的CleveMoler为了让学生方便地调用EISPACK和LINPACK,编写了它们的接口程序,命名为MATLAB。在此之后,国内外许多大学将MATLAB作为教学辅助软件广泛使用。CleveMoler和JohnLittle在1984年创建了MathWorks并推出了MATLABDOS版,即第一版,其核心是用C语言编写。自此之后,MATLAB不断发展,功能愈加强大。MATLAB5.x版本于20世纪90年代末期推出,可以处理更多的数据结构。2000年,MATLAB6.0被发行,其操作界面拥有了程序、历史信息及变量管理三个窗口。并且替换为FFTW系统,使得计算速度更佳。2001年,MATLAB6.1及Simulink4.0问世和2002年,公司推出MATLAB6.5,其功能更加强大。2004年发行了MATLAB7.0版本,在编程环境、数据可视化、计算和文件I/O等方面的功能进行了改善。随后几年,公司陆续推出了MATLAB7.1~7.14版本,不断优化性能。近几年公司推出了MATLAB2012b(8.0版)及MATLAB2013a版本,有了很大改变,最明显的是其桌面,在主窗口中,工具条取代了菜单和工具栏。重新设计了帮助文档,在搜索、浏览及筛选功能上有进一步的提高。到目前为止,还有MATLAB2014a和MATLAB2014b版本。在本设计中用到的是MATLAB2013a版本,此版本较之前版本添加了许多新函数,功能也更加强大,使用更加方便快捷。2.2MATLAB的系统构成MATLAB软件可以说是由以下五大部分组成,分别是:软件的开发环境、数学函数库、软件的编程语言、图形处理系统以及该软件的应用接口(API)。MATLAB开发环境是一个方便用户使用的集成工作空间,拥有M文件的编程与调试环境,许可用户进行数据的输入与输出。MATLAB软件的数学函数库拥有全面的计算算法,可以说从加减法最基本的算法到傅里叶变换等复杂算法都涵括在内。所以说,MATLAB能够解决很多复杂的数据计算与工程设计仿真运算。MATLAB语言的语法特征与C++语言非常相似,是在矩阵与数组的基础上进行设计的语言。操作者能够在命令窗口输入命令语句后就可执行该命令,也能够先编写好程序,保存为.M文件后再执行程序。MATLAB的图形处理系统的功能应用主要体现在GUI图形用户应用界面,能够使向量与矩阵完成图形化显示,满足用户的特殊要求。MATLAB软件应用程序接口主要完成的功能是能让MATLAB语言与其他编程语言进行交互,例如在MATLAB中调用C语言程序等。3MATLAB音乐合成的原理在本设计中,通过MATLAB软件对音乐信号频率与时长的分析与组合来完成音乐的简单合成。所以在设计过程中,根据音调用频率来体现,节拍用时长来体现的原理,用MATLAB软件进行编程来存储音乐的频率与时长,通过将正弦波形的不同叠加与包络设置来仿真实现音乐的音调与节奏的变化。3.1所涉及的乐理知识简述要想实现音乐的合成,就要了解合成音乐所需要的相关数据,也就是音乐的三个特性:音调、响度、音色。音乐的音调就是音的高低,需要考虑影响音调的主要因素即声波的频率。音乐的响度是音的强弱,需要考虑影响响度的主要因素即声波的振动幅度。而音乐音色的变化是由音乐波形中谐波的作用产生的。3.1.1音调与唱名在日常生活中,读音乐曲谱时发出的1(do)、2(re)、3(mi)、4(fa)这些就称作为唱名。这些唱名分别代表着相应的基波频率。但是只有当确定了音乐的音调之后才能确切的知道各个唱名所真正代表的基波频率值。例如乐谱为1=C,代表着音调为C调则“1(do)”的基波频率是261.6Hz,若乐谱为1=E则“1(do)”频率是239.6Hz,乐谱为1=G则“1(do)”的频率是392.1Hz,“3(mi)”的频率是493.9Hz。3.1.2音色与谐波音色的变化是由音乐波形中谐波的作用产生的。在音乐的专业中所指的“泛音”指的就是谐波,在得知音调之后,只能确定音乐信号的基波频率值,但是谐波频率无法确定。不同的乐器会发出不同的音色,这是由于不同的谐波成分和频谱结构导致的。并且不同的乐器所发出的的音乐包络波形是不同的,为了便于用程序来表示波形包络,通常把音乐的复杂包络函数近似直线化,所以音乐波形的包络通常都是折线型。3.1.3十二平均律十二平均律,在音乐领域中作为一种音乐定律的方法,指将音乐的八度按照频率等比例地分成十二份。由于“五度相生律”和“十二平均律”发音非常相似而且十二平均律能够解决转调问题,所以,它被广泛应用在键盘乐器与交响乐队中。根据国际标准音的规定,相邻的半音之间的频率之比定为2^(1/12)≈1.059,作为最常见的应用十二平均律而制成的乐器就是钢琴,钢琴的琴键a1的频率规定为440Hz,那么就可以根据比值得出钢琴其他的琴键音对应的频率。例如与a1左边相邻#g1频率是440/1.059=415.03Hz,同理,与a1右边相邻的半音#a1的频率是466.16Hz,也可以算出不同音调下“1(do)”的对应的基波频率,即C:261.63Hz,F:349.23Hz和G:392Hz等。3.2傅里叶变换与频谱分析合成一段简单的音乐,需要综合考虑音乐的三要素,也就是必须知道该段音乐的基波与谐波频率成分以及包络的形状特征。为了便于分析上述特征,就要进行信号的频谱分析,也就是利用傅里叶变化,得出该音乐信号的频谱结构,来进行其频谱特征的提取。有限长序列的离散傅氏变换(DFT),在信号处理的理论上有重要意义,它将频域也离散化,是现代信号频谱分析主要方法。N点DFT实质上是其频谱的离散频域采样,对频率具有选择性(ωk=2πk/N),在这些点上反映了信号的频谱。但DFT计算量大,处理复杂,所以引用了快速傅里叶变化(FFT)算法最简单、编程最容易的是基2FFT,还有基4FFT、基8FFT等快速算法。根据采样定律,FFT变换相当于对有限长序列进行频域采样,而不丢失任何信息。所以只要时域序列的长度足够长,采样的点数足够多,频域采样也可以很好地反映信号的频谱趋势,所以在设计中可以用FFT进行语音信号的频谱分析。4MATLAB音乐合成系统的总体设计4.1系统的总体设计MATLAB音乐合成系统,能实现音乐的简单合成、音乐的降噪处理、音乐的加谐波处理、音乐的升八度处理、音乐的降八度处理、音乐时域与频域波形显示、利用傅里叶级数合成音乐以及音乐字幕的动态显示的操作。该系统的全部功能都通过GUI图形用户界面显示出来,并且使用模块化的设计方法,将系统分为四个模块,如图4-1所示。基于MATLAB软件的音乐合成系统基于MATLAB软件的音乐合成系统简单合成及处理音乐的模块音乐的傅里叶频域分析模块傅里叶级数合成音乐模块音乐的字幕动态显示模块图4-1系统总体设计结构图4.2GUI界面的设计GUIDE(GraphicUserInterfaceDesignEnvironment)是专门设计图形用户界面GUI的集成开发环境。GUI界面一般包括窗口、菜单、按钮和文本框等各种图形对象。在设计GUI时,可以通过鼠标操作就能产生各种GUI控件,这样让用户对图形界面的生成与管理变得直接、方便,能让用户定制用户与MATLAB2013a的交互方式。可以形成一种除命令窗口之外的与MATLAB2013a的交互方式。4.2.1启动GUIDE在MATLAB2013a中Command窗口里面输入guide按回车键,或者从菜单里面均可进入GUIDE。MATLAB2013a为GUI图形应用界面的设计准备了以下四种模板,如图4-2所示。图4-2GUI设计模板选择对话框在GUI设计模板中选中第一个模板,新建并且保存为yinyuehecheng后,MATLAB2013a会自动产生相应的.fig文件和.m文件。4.2.2GUIDE设计环境在进入GUI界面之后,下一步就是进行界面设计编辑。在GUIDE设计环境中用到的事Layout编辑器,操作者可以通过鼠标移动模板左边的控件到中间布局区域,如按钮、坐标轴、文本框等。接下来,通过属性编辑器和对齐编辑器对各控件设置相关属性和进行界面布置,以完善界面功能。本设计总体布局如下图4-3所示。图4-3GUI设计面板布局4.2.3GUI界面的功能设计设计好GUI界面的整体布局之后,接下来就该利用程序代码的编写进行各个按钮功能的设置。找到上述的GUI的M文件yinyuehecheng.m,打开之后,会看到里面已经存在许多自动生成的程序代码,只需要找到各个按钮及文本编辑框对应的函数。在对应的函数名下输入要实现相应功能所需要的程序。例如在yinyuehecheng.m文件中找到函数:functionbutton1_Callback在这个函数名称下面写入具有简单音乐合成功能的程序。globalflagglobalwestfsftimef_flag;flag=1;f_flag=0;fs=8000;%该段音乐抽样频率F=[493.88493.88493.88587.33493.88440392329.63392440493.88];%各个唱名对应的频率time=fs*[1/4,1/4,1/4,1/4,3/4,1/4,1/4,1/4,1/4,1/4,1];%各个唱名的持续时间值N=length(time);%这段音乐的总抽样点数west=zeros(1,N);%用west向量来储存抽样点n=1;fora=1:N%利用循环产生抽样数据,a表示乐音编号t=1/fs:1/fs:time(a)/fs;%产生第a个乐音的抽样点west(n:n+time(a)-1)=sin(2*pi*f(a)*t);%抽样点对应的幅值n=n+time(a);End然后定位相应的简单音乐合成按钮的坐标程序。t1=linspace(0,length(west)/fs,length(west));set(handles.axes1,'HandleVisibility','ON');%开始使用坐标,便于操作axes(handles.axes1);%使用图像,操作在坐标1plot(t1,west');axis([-0.24.2-1.21.2]);xlabel('t/s');ylabel('幅度');这样相应设置好各个功能按钮所对应的程序,就算基本完成了GUI界面的设置。5MATLAB音乐合成系统的设计与实现5.1简单合成及处理音乐模块的设计与实现通过给定的音乐简谱和掌握的乐理知识与频谱分析来进行简单音乐的合成。并且在此基础上对音乐进行相应的处理,来比较经不同处理后的音乐播放效果。5.1.1合成《社会主义好》依据音乐《社会主义好》一小段的音乐简谱和国际规定的十二平均律的计算方法对应地得到此小段音乐中各个唱名的频率,利用MATLAB软件来编程仿真实现音乐的简单合成。音乐简谱如图5-1所示。图5-1音乐简谱由图5-1可知《社会主义好》的曲调定为G,也就是说1=G,那么可以知道其对应的频率为329.1Hz,其中6是低音的意思,即对应G调“6”的频率659.26Hz,取其频率的一半,即659.26/2=329.63Hz。根据“十二平均律”计算得到各个唱名对应的频率如下表5-1。表5-1唱名对应的频率表唱名33353216123频率493.88493.88493.88587.33493.88440392329.63392440493.88得到该小段音乐各个唱名对应的频率之后,还有很重要的一个数据需要得到,那就是根据乐理知识推算出各个唱名对应的持续时间。由图5-1中1=G2/4可以知道各唱名的持续时间如下表5-2所示。表5-2唱名持续时间表唱名33353216123时间50.250.750.250.251依据上述得到的数据可以编写如下程序。functionbutton1_Callback(hObject,eventdata,handles)%简单音乐的合成globalflagglobalwestfsftimef_flag;flag=1;f_flag=0;fs=8000;%该段音乐抽样的频率f=[493.88493.88493.88587.33493.88440392329.63392440493.88];%各个唱名所对应的频率值time=fs*[1/4,1/4,1/4,1/4,3/4,1/4,1/4,1/4,1/4,1/4,1];%各个唱名的持续时间N=length(time);%这段音乐的总抽样点数west=zeros(1,N);%用west向量来储存抽样点n=1;fora=1:N%利用循环产生抽样数据,a表示乐音编号t=1/fs:1/fs:time(a)/fs;%产生第a个乐音的抽样点west(n:n+time(a)-1)=sin(2*pi*f(a)*t);%抽样点对应的幅值n=n+time(a);end5.1.2加包络,除噪音在MATLAB中,播放出了《社会主义好》的第一小节,但可听出声音不是很好,只能听出具有《社会主义好》的调子而已。会听到有“啪”的杂声,声音比较刺耳,下面通过加上外形相似的包络来消噪音,使不同音的连接处的响度为零即可。编写如下程序。functionbutton4_Callback(hObject,eventdata,handles)%音乐的降噪globalflagglobalwestfsftimef_flag;ifflag==1f_flag=0;N=length(time);%这段音乐的总抽样点数west=zeros(1,N);%用west向量来储存抽样点n=1;fora=1:N%利用循环产生抽样数据,a表示乐音编号t=1/fs:1/fs:time(a)/fs;%产生第a个乐音的抽样点G=zeros(1,time(a));%G为存储包络数据的向量G(1:time(a))=exp(1:(-1/time(a)):1/8000);%产生包络点west(n:n+time(a)-1)=sin(2*pi*f(a)*t).*G(1:time(a));n=n+time(a);end加包络后的仿真时域波形如图5-2所示。图5-2音乐降噪时域图形由图可见,通过加包络,使每个音的连接处的幅度有所减小,使音乐听起来更加连续,悦耳。5.1.3音乐升降度处理升高一个八度即每个唱名的频率都提高一倍,变为原来的2倍;降低一个八度即每个唱名的频率都减小一倍,变为原来的1/2。因此最简单的办法是将存储该段音乐的各个乐音频率的向量中每个元素改变为原来的2或1/2倍即可。编写程序如下。functionbutton6_Callback(hObject,eventdata,handles)%音乐升八度globalflag%定义全局变量globalwestfstimef_flag;ifflag==1f_flag=1;f=[493.88493.88493.88587.33493.88440392329.63392440493.88]*2;%频率升高N=length(time);%这段音乐的总抽样点数west=zeros(1,N);%用west向量来储存抽样点n=1;fora=1:N%利用循环产生抽样数据,a表示乐音编号t=1/fs:1/fs:(time(a))/fs;%产生第a个乐音的抽样点P=zeros(1,time(a));%P为存储包络数据的向量L=(time(a))*[01/5333/1000333/5001];%包络线端点对应的横坐标T=[0.21.5110.2];%包络线端点对应的纵坐标s=1;b=1:1:time(a);%产生包络线抽样点fork=1:4P(s:L(k+1)-1)=(T(k+1)-T(k))/(L(k+1)-L(k))*(b(s:L(k+1)-1)-L(k+1)*ones(1,L(k+1)-s))+T(k+1)*ones(1,L(k+1)-s);%包络线直线方程通式s=L(k+1);endwest(n:n+time(a)-1)=sin(2*pi*f(a)*t).*P(1:time(a));n=n+time(a);end将音乐升八度之后的仿真时域波形如下图5-3所示。图5-3音乐升八度时域图同样地,将音乐进行降八度处理只需改变上述程序中的一条语句即可。即将f=[493.88493.88493.88587.33493.88440392329.63392440493.88]*2改为:f=[493.88493.88493.88587.33493.88440392329.63392440493.88]/2。5.1.4音乐加谐波处理在5.1.1的音乐中加上二、三、四次谐波,基波幅度为1,高次谐波幅度分别为0.2、0.3、0.1。主要的功能程序如下。functionbutton5_Callback(hObject,eventdata,handles)%音乐加谐波m=[10.30.2];%波形幅值矩阵ss=zeros(1,length(t));fori=1:length(m)ss=ss+m(i)*sin(2*i*pi*f(a)*t);%加谐波endwest(n:n+time(a)-1)=ss.*P(1:time(a));n=n+time(a);end加入谐波之后的仿真时域波形如图5-5。图5-5音乐加谐波的时域图形由图可见,每个音的连接处同样是衰减到一较小值而不是0,同时音乐听起来更加真是实,效果更好。5.2用傅里叶变换分析音乐频谱模块的设计与实现为了更加清晰地了解经过不同处理的音乐所发生的变化,就要研究音乐的基波与谐波,即每种音乐的频谱图,可以对音乐时域波形进行傅里叶变换,得到的幅值谱,在频谱图上的第一个突出的波峰对应的频率即为基频。编写了如下程序。functionbutton10_Callback(hObject,eventdata,handles)%傅里叶分析globalflagglobalwestfsff_flag;%定义全局变量ifflag==1iff_flag==1f1=f*2;elseiff_flag==2f1=f/2;elseiff_flag==0f1=f;end%所用到的抽样频率为8000.NFFT=2^nextpow2(length(west));Y=fft(west,NFFT)*2/length(west);g=fs/2*linspace(0,1,NFFT/2+1);set(handles.axes2,'HandleVisibility','ON');%开始使用坐标,更便于操作axes(handles.axes2);%开始用图像,在坐标2处进行操作plot(g,2*abs(Y(1:NFFT/2+1)));axis([-0.1max(f1)+50-0.1max(2*abs(Y(1:NFFT/2+1)))+0.2]);xlabel('f/Hz');ylabel('幅度');elseerrordlg('请您先点击简单音乐合成按钮!!','温馨提示');end经过分别处理的音乐通过调用该段程序就会分别显示出相对应的频谱图,以便从视觉上更加直观地了解各个音乐的不同之处,在各种相应处理前后的对比中更容易让用户接受与其对应的方法及特点。音乐《社会主义好》简单合成后的仿真频谱图形如下图5-6所示。图5-6简单音乐合成频谱图由图5-6可知,该段音乐的基波频率为329.1Hz,它的幅度值是0.125,以此类推,它对应的各个高次谐波幅度值如下表5-3所示。表5-3高次谐波幅值表谐波234567幅度0.250.2560.7550.0250.1250.01图5-7为音乐加谐波之后的仿真频谱图。图5-7音乐加谐波频谱图该图与图5-6所示的简单音乐合成有明显的区别,波形边缘更加平缓,音乐听起来更加清晰,效果更好。图5-8与图5-9分别为音乐升八度和降八度处理的仿真频谱图。图5-8音乐升八度频谱图图5-9音乐降八度处理频谱图由上述图5-8与图5-9所示频谱图可以清楚地看到,升八度处理是在简单音乐合成图5-6的基础上频率增加了一倍,并且各个幅值有所升高,降八度处理是在图5-6的基础上频率降低了一倍,并且幅值有轻微的下降。利用傅里叶级数的原理合成的音乐的仿真频谱图形,如图5-10所示。图5-10基于傅里叶级数合成的音乐频谱由上图5-10与5-6频谱图的比较,可以直观的看出,利用傅里叶级数分析原理合成的音乐频谱曲线愈加光滑,噪声干扰少,只是幅值很小,质量较简单音乐合成的高。5.3基于傅里叶级数合成的音乐模块的设计与实现运用傅里叶级数变换的原理来再次合成音乐《社会主义好》的第一小节,只需将5.1.4中音乐加谐波的程序幅度修改一下。将m=[10.30.2];%波形幅值矩阵改为:m=[0.1250.250.2560.7550.0250.1250.01];%波形幅值矩阵运行后可以听出声音更加真实了。仿真时域波形如图5-11。图5-11基于傅里叶级数合成音乐的时域波形利用傅里叶级数合成音乐的部分程序。functionbutton11_Callback(hObject,eventdata,handles)%傅里叶级数合成的音乐%m=[10.30.2];%波形幅值矩阵m=[0.1250.250.2560.7550.0250.1250.01]*1;ss=zeros(1,length(t));fori=1:length(m)ss=ss+m(i)*sin(2*i*pi*f(a)*t);%加谐波endwest(n:n+time(a)-1)=ss.*P(1:time(a));%给第a个乐音加上包络n=n+time(a);endt1=linspace(0,length(west)/fs,length(west));set(handles.axes1,'HandleVisibility','ON');%开始使用坐标,便于操作axes(handles.axes1);%操作在坐标1plot(t1,west');axis([-0.24.2-1.71.7]);xlabel('t/s');ylabel('幅度');5.4音乐《小星星》字幕动态显示模块的设计与实现运用前面的简单音乐合成的相关原理及方法来合成音乐《小星星》并且实现小星星歌词字幕的动态显示。《小星星》的音乐简谱如图5-12所示。图5-12《小星星》音乐简谱用钢琴的标准音A4=440Hz,根据国际上规定的十二平均律,相邻的半音之间频率之比是1.059463,而且由图可知乐谱的基调是1=C,即该段音乐的基准频率设置为Pt=44100Hz。在编写程序的过程中运用十二平均律的计算方法即:scale12=A4/2^(9/12)*2.^((0:11)/12)。由上图5-12的音乐简谱可知,此音乐为七音符,程序中设置为map=[135681012]。其中的乐谱写为:score=[1155665,4433221,5544332,5544332,1155665,4433221]。音乐的每个唱名持续的时间设置为rhythm=repmat([1111112],1,6)。针对于音乐《小星星》的歌词在GUI界面实现边播放边显示,用到的是GUI中的edit1文本框,应用语句set(handles.edit1,‘string’,变量名)来达到显示的目的,其中歌词的文字用矩阵lyric=[‘一闪一闪亮晶晶’‘满天都是小星星’‘挂在天上放光明’‘它是我们的小眼睛’‘一闪一闪亮晶晶’‘满天都是小星星’]来完成编辑。其中该段音乐合成及频谱显示的程序如下。y=[];fori=1:length(score)%length(score)为score的长度为7*6=42y=[ysin((1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i))))];%音乐合成endt=linspace(0,length(y)/pt,length(y));%时域波形在界面坐标显示set(handles.axes1,'HandleVisibility','ON');%开始启动坐标,便于操作axes(handles.axes1);%开始图像的使用,基本操作在坐标1plot(t(1:pt/10),y(1:pt/10));axis([-0.010.11-1.21.2]);xlabel('t/s');ylabel('幅度');NFFT=2^nextpow2(length(y));%傅里叶频谱分析Y=fft(y,NFFT)*2/length(y);g=pt/2*linspace(0,1,NFFT/2+1);set(handles.axes2,'HandleVisibility','ON');%开始启动坐标,便于操作axes(handles.axes2);%开始使用图像,操作在坐标2plot(g,2*abs(Y(1:NFFT/2+1)));axis([-0.1550-0.1max(2*abs(Y(1:NFFT/2+1)))+0.2]);xlabel('f/Hz');ylabel('幅度');str=[];fori=1:length(score)ifmod(i,7)==0s=sprintf('%1c',[lyric(i)]);str=strcat(str,s);str=[str,10];set(handles.edit1,'String',str);pause(0);wavplay(sin((1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i)))),pt);elsewavplay(sin((1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i)))),pt);s=sprintf('%1c',lyric(i));str=strcat(str,s);set(handles.edit1,'String',str)pause(0);End图5-13为音乐《小星星》在GUI界面的字幕显示。图5-13《小星星》的字幕显示图5-13中的字幕显示在GUI界面中实现的是边播放边显示。图5-14是音乐小星星的时域与频域仿真实现图。图5-14《小星星》时域与频域图形6系统的调试与运行本设计利用MATLAB软件,通过MATLABGUI构建一个具有图形用户界面的音乐合成系统,界面友好、操作方便。该系统成功地实现了音乐的简单合成、音乐的降噪处理、音乐的加谐波处理、音乐的升降度处理、音乐的时域和频域波形显示分析及基于傅里叶级数分析合成的音乐的操作。但这些操作并不是轻松实现的,在编程与设计过程中,各个模块也是经过验证与调试才达到如今的效果。6.1音乐的播放、暂停的调试与运行在设计音乐的播放与暂停这个功能时,一开始是用MATLAB中的sound函数,将向量转换成声音,进行音乐的播放,但是它的不足之处是在播放的过程中不能中途暂停,也就是暂停的功能不能体现出来,因此,将sound函数的语句sound(west,8000)替换,分别有播放、暂停、继续播放,实现了音乐的暂停与播放功能。编写程序如下。functionbutton8_Callback(hObject,eventdata,handles)%音乐的播放globalflagglobalwestfsp;ifflag==1p=audioplayer(west,fs);%将向量转换成声音play(p);%播放音乐endfunctionbutton9_Callback(hObject,eventdata,handles)%音乐的暂停globalpflag;ifflag==1pause(p);%音乐的暂停endfunctionbutton12_Callback(hObject,eventdata,handles)%音乐的继续播放globalp;ifflag==1reae(p);%音乐的继续播放end6.2傅里叶变换分析音乐的调试与运行在用傅里叶分析合成的音乐的模块中,一开始计划使用MATLAB中的wavread函数来读取.wav文件,实现相应功能,但是总不成功,后来通过查阅资料和MATLABhelp的帮助才意识到那个光盘中并不存在现成的fmt.wav文件,所以用另一种方法实现音乐傅里叶频谱显示,通过学习了MATLAB中快速傅里叶变换函数FFT的用法,利用FFT函数实现了该功能,编写程序如下。NFFT=2^nextpow2(length(west));Y=fft(west,NFFT)*2/length(west);g=fs/2*linspace(0,1,NFFT/2+1);set(handles.axes2,'HandleVisibility','ON');%打开坐标,方便操作axes(handles.axes2);%使用图像,操作在坐标2plot(g,2*abs(Y(1:NFFT/2+1)));axis([-0.1max(f1)+50-0.1max(2*abs(Y(1:NFFT/2+1)))+0.2]);xlabel('f/Hz');ylabel('幅度');在该系统各个模块设计的过程中,都会也遇到或大或小的问题,比如,在合成音乐的过程中,4节拍对应的频率与持续时间的计算问题;在GUI界面设计过程中参数的设置问题等,这些问题都通过查阅资料,进一步的调试与运行,成功地实现了要达到的功能。成功地实现了音乐的播放以及经过各种处理之后的音乐播放。总结本设计利用PC机,通过MATLABGUI构建了一个具有图形用户界面的音乐合成的软件系统,该系统成功的实现了音乐的简单合成、音乐的降噪处理、音乐的加谐波处理、音乐的升八度处理、音乐的降八度处理、音乐时域波形和用傅里叶变换的频域波形显示分析以及利用傅里叶级数分析再次合成音乐的操作。基于MATLAB软件的音乐合成系统作为教学辅助软件可以为语音信号处理课程的教学提供一定的帮助,学会应用MATLAB这个仿真软件,让我们能够更好地深入学习与了解信号处理的相关课程内容,充分发挥自己的创新能力,该系统可以通过选取不同的加工算法,对音乐分别处理,达到抑制噪声,改善音乐质量的效果,便于更高层次的处理。该系统界面友好、操作方便,通过菜单、控件的使用可以方便的选取不同的方法,设置不同的参数以便于用户操作使用。系统通过对各种处理效果的演示,也可以让用户更直观地了解简单音乐处理的几种方法,并在各种相应处理前后的对比中更容易接受与其对应的方法及特点。该系统也存在一定的局限性,该系统只能作为语音信号处理和信号与系统课程的辅助学习使用,实现简单的相应的处理功能,加深学生对相关知识的了解,对于更高层次的应用是不行的,还有该系统存在许多不足,在用傅里叶分析音乐时没有使用.wav文件,只是简单的进行了音乐信号的傅里叶变换。参考文献[1]程佩青,数字信号处理教程,北京:清华大学出版社,2007,30-120。[2]丛玉良,王宏志,数字信号处理原理及其MATLAB实现(第2版),北京:电子工业出版社,2009,3-100。[3]徐明远,刘增力,MATLAB仿真在信号处理中的应用,西安:西安电子科技大学出版社,2007,1-30。[4]郑君里,信号与系统(第三版)上•下册[M],北京:高等教育出版社,2012,1-255。[5]楼天顺,李博菡,基于MATLAB的系统分析与设计—信号处理,西安电子科技大学出版社,1998,10-30。[6]李敏,基于MATLAB的音乐分析与合成实验设计,大连:大连民族学院学报,2010。[7]冯彦君,靳鸿,章晓眉,应用MATLAB分析语音信号,光电技术应用,2011年,第3期。[8]陈垚光,精通MATLABGUI设计,北京:电子工业出版社,2011,125-190。[9]纪元法,孙希延,基于MATLAB的“信号与系统”软件实验系统设计与实践,科技信息,2010年,第30期。[10]石良辰,MATLAB/Simulink系统仿真超级学习手册,北京:人民邮电出版社,2014,1-146。[11]陈怀琛,MATLAB及在电子信息课程中的应用,北京:电子工业出版社2006,52-130。[12]高西全,丁玉美,数字信号处理,西安:西安电子科技大学出版社,2008,1-230。[13]D.Hanselman,B.Littlefield,MasteringMATLAB5,PrenticeHall,NewJerscy,1998。[14]王亚芳,MATLAB仿真及电子信息应用,北京:人民邮电出版社,2011,26-100。[15]Xiao-hanGuan,《MatlabSimulationinSignals&Systems——UsingMatlabatdifferentlevels》,Beijing,China:CollegeofElectromechanicalEngineeringNorth。ChinaUniversityofTechnology,2009。基于C8051F单片机直流电动机反馈控制系统的设计与研究基于单片机的嵌入式Web服务器的研究MOTOROLA单片机MC68HC(8)05PV8/A内嵌EEPROM的工艺和制程方法及对良率的影响研究基于模糊控制的电阻钎焊单片机温度控制系统的研制基于MCS-51系列单片机的通用控制模块的研究基于单片机实现的供暖系统最佳启停自校正(STR)调节器单片机控制的二级倒立摆系统的研究基于增强型51系列单片机的TCP/IP协议栈的实现基于单片机的蓄电池自动监测系统基于32位嵌入式单片机系统的图像采集与处理技术的研究基于单片机的作物营养诊断专家系统的研究基于单片机的交流伺服电机运动控制系统研究与开发基于单片机的泵管内壁硬度测试仪的研制基于单片机的自动找平控制系统研究基于C8051F040单片机的嵌入式系统开发基于单片机的液压动力系统状态监测仪开发模糊Smith智能控制方法的研究及其单片机实现一种基于单片机的轴快流CO〈,2〉激光器的手持控制面板的研制基于双单片机冲床数控系统的研究基于CYGNAL单片机的在线间歇式浊度仪的研制基于单片机的喷油泵试验台控制器的研制基于单片机的软起动器的研究和设计基于单片机控制的高速快走丝电火花线切割机床短循环走丝方式研究基于单片机的机电产品控制系统开发基于PIC单片机的智能手机充电器基于单片机的实时内核设计及其应用研究基于单片机的远程抄表系统的设计与研究基于单片机的烟气二氧化硫浓度检测仪的研制基于微型光谱仪的单片机系统单片机系统软件构件开发的技术研究基于单片机的液体点滴速度自动检测仪的研制基于单片机系统的多功能温度测量仪的研制基于PIC单片机的电能采集终端的设计和应用基于单片机的光纤光栅解调仪的研制气压式线性摩擦焊机单片机控制系统的研制基于单片机的数字磁通门传感器基于单片机的旋转变压器-数字转换器的研究基于单片机的光纤Bragg光栅解调系统的研究单片机控制的便携式多功能乳腺治疗仪的研制基于C8051F020单片机的多生理信号检测仪基于单片机的电机运动控制系统设计Pico专用单片机核的可测性设计研究基于MCS-51单片机的热量计基于双单片机的智能遥测微型气象站MCS-51单片机构建机器人的实践研究基于单片机的轮轨力检测基于单片机的GPS定位仪的研究与实现基于单片机的电液伺服控制系统用于单片机系统的MMC卡文件系统研制基于单片机的时控和计数系统性能优化的研究基于单片机和CPLD的粗光栅位移测量系统研究单片机控制的后备式方波UPS提升高职学生单片机应用能力的探究基于单片机控制的自动低频减载装置研究基于单片机控制的水下焊接电源的研究基于单片机的多通道数据采集系统基于uPSD3234单片机的氚表面污染测量仪的研制基于单片机的红外测油仪的研究96系列单片机仿真器研究与设计基于单片机的单晶金刚石刀具刃磨设备的数控改造基于单片机的温度智能控制系统的设计与实现基于MSP430单片机的电梯门机控制器的研制基于单片机的气体测漏仪的研究基于三菱M16C/6N系列单片机的CAN/USB协议转换器基于单片机和DSP的变压器油色谱在线监测技术研究基于单片机的膛壁温度报警系统设计基于AVR单片机的低压无功补偿控制器的设计基于单片机船舶电力推进电机监测系统基于单片机网络的振动信号的采集系统基于单片机的大容量数据存储技术的应用研究基于单片机的叠图机研究与教学方法实践基于单片机嵌入式Web服务器技术的研究及实现基于AT89S52单片机的通用数据采集系统基于单片机的多道脉冲幅度分析仪研究机器人旋转电弧传感角焊缝跟踪单片机控制系统基于单片机的控制系统在PLC虚拟教学实验中的应用研究基于单片机系统的网络通信研究与应用基于PIC16F877单片机的莫尔斯码自动译码系统设计与研究基于单片机的模糊控制器在工业电阻炉上的应用研究基于双单片机冲床数控系统的研究与开发基于Cygnal单片机的μC/OS-Ⅱ的研究基于单片机的一体化智能差示扫描量热仪系统研究HYPERLINK"/detail.htm?36

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论