版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-经贸大学毕业论文基于MATLAB软件的音乐合成专业名称:电子信息工程班 级:202102学生:王 雪指导教师:章瑞平 完成时间:2021 年5月. z-摘 要 本设计利用MATLAB软件,通过MATLAB GUI构建一个具有图形用户界面的音乐合成系统。该系统能实现音乐的简单合成、音乐的降噪处理、音乐的加谐波处理、音乐的升降度处理、音乐的时域和频域波形图显示及利用傅里叶级数原理合成音乐的操作。本系统应用模块化的思路进展设计,将系统分为四个模块,分别为简单合成及处理音乐的模块、利用傅里叶变换分析音乐频谱的模块、基于傅里叶级数合成音乐的模块和音乐字幕动态显示的模块。本论文阐述了整个系统详细的设计过
2、程,而针对每个模块的设计都有详细的理论根底为依托,包括原理及设计程序,并且有仿真效果的演示。该软件系统作为教学辅助软件可以为语音信号处理课程的教学提供一定的帮助,可以让学生们更好地深入理解信号与系统等主干课程的容,充分发挥自身的创新能力与实践能力。该系统可以通过选取不同的算法,对音乐分别进展处理,根本做到抑制噪声,提高音乐质量,有利于更高层次的处理与应用。此外,从整体效果上看,该系统的用户应用界面友好、便于操作,通过菜单、控件的使用可以方便的选取不同的方法,设置不同的参数以便于用户操作使用。系统通过对各种处理效果的演示,也可以让用户更直观地了解简单音乐处理的几种方法,并在各种相应处理前后的比照
3、中让用户更容易承受与其对应的方法及特点。关键词 音乐合成;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
4、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 proces
5、sing,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 proc
6、ess 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
7、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
8、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 pare with before and after the all treatments,we can accept the corresponding met
9、hods and characteristics more easily.Keywords Music synthesis; MTALAB;GUI;Fourier transform. z-. z-目 录1 绪论11.1 研究背景及意义11.2 研究的主要容12 MATLAB软件的简介32.1 MATLAB的开展史32.2 MATLAB的系统构成43MATLAB音乐合成的原理53.1 所涉及的乐理知识简述53.1.1 音调与唱名53.1.2 音色与谐波53.1.3 十二平均律53.2 傅里叶变换与频谱分析64 MATLAB音乐合成系统的总体设计74.1 系统的总体设计74.2GUI界面的设计7
10、4.2.1 启动GUIDE84.2.2GUIDE设计环境84.2.3 GUI界面的功能设计95 MATLAB音乐合成系统的设计与实现115.1 简单合成及处理音乐模块的设计与实现115.1.1 合成?社会主义好?115.1.2 加包络,除噪音125.1.3 音乐升降度处理135.1.4 音乐加谐波处理155.2 用傅里叶变换分析音乐频谱模块的设计与实现165.3 基于傅里叶级数合成的音乐模块的设计与实现205.4 音乐?小星星?字幕动态显示模块的设计与实现216 系统的调试与运行246.1 音乐的播放、暂停的调试与运行246.2 傅里叶变换分析音乐的调试与运行25总 结26参考文献27. z-
11、. z-基于MATLAB软件的音乐合成1 绪论1.1 研究背景及意义 如今,信息化、数字化程度越来越高,语音信号的处理技术作为基于数字信号处理技术与语音学知识对语音信号进展处理的新兴技术被越来越多的高科技产业广泛应用,这项技术成为信息科学工程与研究领域的核心技术之一。MATLAB在信号处理与通信领域应用广泛,是一款数值计算和编程语言结合的优秀计算机软件。音乐信号合成作为语音信号处理的一局部,属于MATLAB软件重要应用领域之一。MATLAB音乐合成系统的设计针对于许多其他的音乐合成处理软件不易学习、操作不便等问题,利用MATLAB语言编程以及GUI界面设计来实现音乐信号的简单合成以及各种加工处
12、理,程序更加易懂,操作更加简便,在各类教学工作中具有很大的实际应用意义。由于音乐信号可以看成是一系列频率与振幅不同的正弦波叠加并加以不同包络形成的,所以,可以基于这个特点利用MATLAB软件分析处理不同音频信号来进展简单的音乐合成。该软件系统作为教学辅助软件可以为语音信号处理课程的教学提供一定的帮助,可以让学生们更好地深入理解信号与系统等主干课程的容,充分发挥自身的创新能力与实践能力。如今在各高校,MATLAB作为语音信号处理的学习工具已经成为学生们必须学习与掌握的软件。1.2 研究的主要容本设计运用MATLAB软件要实现的功能:第一是要利用相关的语音处理函数进展简单的音乐合成,对音乐进展降噪
13、、加谐波以及升降度处理;第二是用傅里叶变换分析经相应处理后的各音乐频谱;第三是运用傅里叶级数的原理来再次合成音乐;第四是实现音乐字幕的动态显示。整个过程利用MATLAB GUI图形应用界面进展显示,完成根本操作,界面友好,能实现良好的人机交互。 在设计中解决的主要问题: 简单音乐的合成由于相位不连续产生高频分量而使其质量不佳的问题可通过包络修正,消除噪音。 音乐的基波所对应频率的计算。必须充分了解音乐的节拍,即每个音调的持续时间,减少失真。 在设计GUI界面时的布局、各种参数设置以及各个模块演示编程的问题。 本设计使用的是MATLAB2021a软件,设计所实现的功能都在GUI图形应用界面表达出
14、来,便于研究与操作。通过本设计让用户更直观地了解简单音乐处理的几种方法,并在各种相应处理前后的比照中更容易承受与其对应的方法及特点,学会并掌握 MATLAB信号处理的编程以及MATLAB下GUI的设计。2 MATLAB软件的简介MATLABmatri*&laboratory矩阵实验室,作为一款拥有算法开发、数据分析及数值计算、创立用户界面等强大功能的仿真软件,被美国Math Works公司发行,将众多功能合成在一个便于操作的视窗交互化环境中。在科学研究、工程计算、信号处理、图像处理等方面得到广泛应用。而在本设计中用到的是MATLAB2021a时频域分析、音乐合成及GUI图形应用界面等信
15、号处理方面的功能。2.1 MATLAB的开展史1980年,身为美国New Me*ico大学计算机系系主任的Cleve Moler为了让学生方便地调用EISPACK和LINPACK,编写了它们的接口程序,命名为MATLAB。在此之后,国外许多大学将MATLAB作为教学辅助软件广泛使用。Cleve Moler和John Little在1984年创立了Math Works并推出了MATLAB DOS版,即第一版,其核心是用C语言编写。自此之后,MATLAB不断开展,功能愈加强大。MATLAB5.*版本于20世纪90年代末期推出,可以处理更多的数据构造。2000年,MATLAB6.0被发行,其操作界面
16、拥有了程序、历史信息及变量管理三个窗口。并且替换为FFTW系统,使得计算速度更佳。2001年,MATLAB6.1及Simulink4.0问世和2002年,公司推出MATLAB6.5,其功能更加强大。2004年发行了MATLAB7.0版本,在编程环境、数据可视化、计算和文件I/O等方面的功能进展了改善。随后几年,公司陆续推出了MATLAB7.17.14版本,不断优化性能。近几年公司推出了MATLAB2021b8.0版及MATLAB2021a版本,有了很大改变,最明显的是其桌面,在主窗口中,工具条取代了菜单和工具栏。重新设计了帮助文档,在搜索、浏览及筛选功能上有进一步的提高。到目前为止,还有MAT
17、LAB2021a和MATLAB2021b版本。在本设计中用到的是MATLAB2021a版本,此版本较之前版本添加了许多新函数,功能也更加强大,使用更加方便快捷。2.2 MATLAB的系统构成MATLAB软件可以说是由以下五大局部组成,分别是:软件的开发环境、数学函数库、软件的编程语言、图形处理系统以及该软件的应用接口API。MATLAB开发环境是一个方便用户使用的集成工作空间,拥有M文件的编程与调试环境,许可用户进展数据的输入与输出。MATLAB软件的数学函数库拥有全面的计算算法,可以说从加减法最根本的算法到傅里叶变换等复杂算法都涵括在。所以说,MATLAB能够解决很多复杂的数据计算与工程设计
18、仿真运算。MATLAB语言的语法特征与C+语言非常相似,是在矩阵与数组的根底上进展设计的语言。操作者能够在命令窗口输入命令语句后就可执行该命令,也能够先编写好程序,保存为.M文件后再执行程序。MATLAB的图形处理系统的功能应用主要表达在GUI图形用户应用界面,能够使向量与矩阵完成图形化显示,满足用户的特殊要求。MATLAB软件应用程序接口主要完成的功能是能让MATLAB语言与其他编程语言进展交互,例如在MATLAB中调用C语言程序等。3MATLAB音乐合成的原理在本设计中,通过MATLAB软件对音乐信号频率与时长的分析与组合来完成音乐的简单合成。所以在设计过程中,根据音调用频率来表达,节拍用
19、时长来表达的原理,用MATLAB软件进展编程来存储音乐的频率与时长,通过将正弦波形的不同叠加与包络设置来仿真实现音乐的音调与节奏的变化。3.1 所涉及的乐理知识简述 要想实现音乐的合成,就要了解合成音乐所需要的相关数据,也就是音乐的三个特性:音调、响度、音色。音乐的音调就是音的上下,需要考虑影响音调的主要因素即声波的频率。音乐的响度是音的强弱,需要考虑影响响度的主要因素即声波的振动幅度。而音乐音色的变化是由音乐波形中谐波的作用产生的。3.1.1 音调与唱名在日常生活中,读音乐曲谱时发出的1( do)、2( re)、3(mi)、4(fa).这些就称作为唱名。这些唱名分别代表着相应的基波频率。但是
20、只有当确定了音乐的音调之后才能确切的知道各个唱名所真正代表的基波频率值。例如乐谱为1=C,代表着音调为C调则“1( do)的基波频率是261.6Hz,假设乐谱为1=E则“1( do)频率是239.6Hz,乐谱为1=G则“1( do)的频率是392.1Hz,“3mi的频率是493.9Hz。3.1.2 音色与谐波音色的变化是由音乐波形中谐波的作用产生的。在音乐的专业中所指的“泛音指的就是谐波,在得知音调之后,只能确定音乐信号的基波频率值,但是谐波频率无法确定。不同的乐器会发出不同的音色,这是由于不同的谐波成分和频谱构造导致的。并且不同的乐器所发出的的音乐包络波形是不同的,为了便于用程序来表示波形包
21、络,通常把音乐的复杂包络函数近似直线化,所以音乐波形的包络通常都是折线型。3.1.3 十二平均律十二平均律,在音乐领域中作为一种音乐定律的方法,指将音乐的八度按照频率等比例地分成十二份。由于“五度相生律和“十二平均律发音非常相似而且十二平均律能够解决转调问题,所以,它被广泛应用在键盘乐器与交响乐队中。根据国际标准音的规定,相邻的半音之间的频率之比定为2(1/12)1.059,作为最常见的应用十二平均律而制成的乐器就是钢琴,钢琴的琴键a1的频率规定为440Hz,则就可以根据比值得出钢琴其他的琴键音对应的频率。例如与a1左边相邻*g1频率是440/1.059=415.03Hz,同理,与a1右边相邻
22、的半音*a1的频率是466.16Hz,也可以算出不同音调下“1do的对应的基波频率,即C:261.63Hz ,F:349.23Hz和G:392Hz 等 。3.2 傅里叶变换与频谱分析合成一段简单的音乐,需要综合考虑音乐的三要素,也就是必须知道该段音乐的基波与谐波频率成分以及包络的形状特征。为了便于分析上述特征,就要进展信号的频谱分析,也就是利用傅里叶变化,得出该音乐信号的频谱构造,来进展其频谱特征的提取。有限长序列的离散傅氏变换(DFT),在信号处理的理论上有重要意义,它将频域也离散化,是现代信号频谱分析主要方法。N点DFT实质上是其频谱的离散频域采样,对频率具有选择性(k=2k/N),在这些
23、点上反映了信号的频谱。 但DFT计算量大,处理复杂,所以引用了快速傅里叶变化FFT算法最简单、编程最容易的是基2FFT,还有基4FFT、基8FFT等快速算法。根据采样定律,FFT变换相当于对有限长序列进展频域采样,而不丧失任何信息。所以只要时域序列的长度足够长,采样的点数足够多,频域采样也可以很好地反映信号的频谱趋势,所以在设计中可以用FFT进展语音信号的频谱分析。. z-4 MATLAB音乐合成系统的总体设计4.1 系统的总体设计MATLAB音乐合成系统,能实现音乐的简单合成、音乐的降噪处理、音乐的加谐波处理、音乐的升八度处理、音乐的降八度处理、音乐时域与频域波形显示、利用傅里叶级数合成音乐
24、以及音乐字幕的动态显示的操作。该系统的全部功能都通过GUI图形用户界面显示出来,并且使用模块化的设计方法,将系统分为四个模块,如图4-1所示。基于MATLAB 软件的音乐合成系统简单合成及处理音乐的模块音乐的傅里叶频域分析模块傅里叶级数合成音乐模块音乐的字幕动态显示模块图4-1 系统总体设计构造图4.2GUI界面的设计GUIDEGraphic User Interface Design Environment是专门设计图形用户界面GUI的集成开发环境。GUI界面一般包括窗口、菜单、按钮和文本框等各种图形对象。在设计GUI时,可以通过鼠标操作就能产生各种GUI控件,这样让用户对图形界面的生成与管
25、理变得直接、方便,能让用户定制用户与MATLAB2021a的交互方式。可以形成一种除命令窗口之外的与MATLAB2021a的交互方式。4.2.1 启动GUIDE在MATLAB2021a中mand窗口里面输入guide按回车键,或者从菜单里面均可进入GUIDE。MATLAB2021a为GUI图形应用界面的设计准备了以下四种模板,如图4-2所示。图4-2 GUI设计模板选择对话框在GUI设计模板中选中第一个模板,新建并且保存为yinyuehecheng后,MATLAB2021a会自动产生相应的.fig文件和.m文件。4.2.2GUIDE设计环境在进入GUI界面之后,下一步就是进展界面设计编辑。在G
26、UIDE设计环境中用到的事Layout编辑器,操作者可以通过鼠标移动模板左边的控件到中间布局区域,如按钮、坐标轴、文本框等。接下来,通过属性编辑器和对齐编辑器对各控件设置相关属性和进展界面布置,以完善界面功能。本设计总体布局如以下图4-3所示。图4-3 GUI设计面板布局4.2.3 GUI界面的功能设计 设计好GUI界面的整体布局之后,接下来就该利用程序代码的编写进展各个按钮功能的设置。找到上述的GUI 的M文件yinyuehecheng.m,翻开之后,会看到里面已经存在许多自动生成的程序代码,只需要找到各个按钮及文本编辑框对应的函数。在对应的函数名下输入要实现相应功能所需要的程序。例如在yi
27、nyuehecheng.m文件中找到函数:function button1_Callback在这个函数名称下面写入具有简单音乐合成功能的程序。global flagglobal west fs f time f_flag;flag = 1;f_flag=0;fs=8000;%该段音乐抽样频率F=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.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);
28、 %这段音乐的总抽样点数 west=zeros(1,N); %用west向量来储存抽样点n=1;for a=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.a*es1,'HandleVisibility','ON');%
29、开场使用坐标,便于操作 a*es(handles.a*es1);%使用图像,操作在坐标1 plot(t1,west');a*is(-0.2 4.2 -1.2 1.2); *label('t/s');ylabel('幅度'); 这样相应设置好各个功能按钮所对应的程序,就算根本完成了GUI界面的设置。5 MATLAB音乐合成系统的设计与实现5.1 简单合成及处理音乐模块的设计与实现通过给定的音乐简谱和掌握的乐理知识与频谱分析来进展简单音乐的合成。并且在此根底上对音乐进展相应的处理,来比较经不同处理后的音乐播放效果。5.1.1 合成?社会主义好? 依据音乐?社
30、会主义好?一小段的音乐简谱和国际规定的十二平均律的计算方法对应地得到此小段音乐中各个唱名的频率,利用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 唱名对应的频率表唱名3335321 6123频率493.88493.88493.88587.33493.88440392329.633
31、92440493.88得到该小段音乐各个唱名对应的频率之后,还有很重要的一个数据需要得到,那就是根据乐理知识推算出各个唱名对应的持续时间。由图5-1中1=G2/4可以知道各唱名的持续时间如下表5-2所示。表5-2 唱名持续时间表唱名33353216123时间0.250.250.250.250.750.250.250.250.250.251 依据上述得到的数据可以编写如下程序。function button1_Callback(hObject, eventdata, handles)%简单音乐的合成global flagglobal west fs f time f_flag;flag = 1;
32、f_flag=0;fs=8000; %该段音乐抽样的频率f=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.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个乐音的抽样点wes
33、t(n:n+time(a)-1)=sin(2*pi*f(a)*t); %抽样点对应的幅值 n=n+time(a); end5.1.2 加包络,除噪音 在MATLAB中,播放出了?社会主义好?的第一小节,但可听出声音不是很好,只能听出具有?社会主义好?的调子而已。会听到有“啪的杂声,声音比较刺耳,下面通过加上外形相似的包络来消噪音,使不同音的连接处的响度为零即可。编写如下程序。function button4_Callback(hObject, eventdata, handles)%音乐的降噪global flagglobal west fs f time f_flag;if flag =1f
34、_flag=0;N=length(time); %这段音乐的总抽样点数 west=zeros(1,N); %用west向量来储存抽样点n=1;for a=1:N %利用循环产生抽样数据,a表示乐音编号 t=1/fs:1/fs:time(a)/fs; %产生第a个乐音的抽样点 G=zeros(1,time(a); %G为存储包络数据的向量 G(1:time(a)=e*p(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所示。图
35、5-2 音乐降噪时域图形 由图可见,通过加包络,使每个音的连接处的幅度有所减小,使音乐听起来更加连续,悦耳。5.1.3 音乐升降度处理升高一个八度即每个唱名的频率都提高一倍,变为原来的2倍;降低一个八度即每个唱名的频率都减小一倍,变为原来的1/2。因此最简单的方法是将存储该段音乐的各个乐音频率的向量中每个元素改变为原来的2或1/2倍即可。编写程序如下。function button6_Callback(hObject, eventdata, handles)%音乐升八度global flag%定义全局变量global west fs time f_flag;if flag =1f_flag=1
36、;f=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.88*2; %频率升高N=length(time); %这段音乐的总抽样点数west=zeros(1,N); %用west向量来储存抽样点n=1;for a=1:N %利用循环产生抽样数据,a表示乐音编号t=1/fs:1/fs:(time(a)/fs; %产生第a个乐音的抽样点P=zeros(1,time(a); %P为存储包络数据的向量L=(time(a)*0 1/5 333/1000 333/500 1;%包络线端点对应的横坐标T=0.2 1.5 1 1 0.2
37、; %包络线端点对应的纵坐标s=1;b=1:1:time(a); %产生包络线抽样点for k=1:4 P(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 音乐升八度时域图同样地,将音乐进展降八度处理只需改变上述
38、程序中的一条语句即可。即将f=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.88*2改为:f=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.88/2。5.1.4 音乐加谐波处理在5.1.1的音乐中加上二、三、四次谐波,基波幅度为1,高次谐波幅度分别为0.2、0.3、0.1。主要的功能程序如下。function button5_Callback(hObject, eventdata, handles)%音乐加谐波 m=1 0.3 0.2; %
39、波形幅值矩阵 ss=zeros(1,length(t); for i=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 用傅里叶变换分析音乐频谱模块的设计与实现为了更加清晰地了解经过不同处理的音乐所发生的变化,就要研究音乐的基波与谐波,即每种音乐的频谱图,可以对音乐时域波
40、形进展傅里叶变换,得到的幅值谱,在频谱图上的第一个突出的波峰对应的频率即为基频。编写了如下程序。function button10_Callback(hObject, eventdata, handles)%傅里叶分析global flagglobal west fs f f_flag;%定义全局变量if flag=1if f_flag=1 f1=f*2;elseif f_flag=2 f1=f/2;elseif f_flag=0 f1=f;end %所用到的抽样频率为8000.NFFT = 2ne*tpow2(length(west); Y = fft(west,NFFT)*2/length
41、(west);g = fs/2*linspace(0,1,NFFT/2+1);set(handles.a*es2,'HandleVisibility','ON');%开场使用坐标,更便于操作a*es(handles.a*es2);%开场用图像,在坐标2处进展操作plot(g,2*abs(Y(1:NFFT/2+1);a*is(-0.1 ma*(f1)+50 -0.1 ma*(2*abs(Y(1:NFFT/2+1)+0.2);*label('f/Hz');ylabel('幅度');else errordlg('请您先点击简单音
42、乐合成按钮!','温馨提示');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
43、-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频谱图的比较,可以直观的看出,利用傅里叶
44、级数分析原理合成的音乐频谱曲线愈加光滑,噪声干扰少,只是幅值很小,质量较简单音乐合成的高。5.3 基于傅里叶级数合成的音乐模块的设计与实现运用傅里叶级数变换的原理来再次合成音乐?社会主义好?的第一小节,只需将5.1.4中音乐加谐波的程序幅度修改一下。将 m=1 0.3 0.2;%波形幅值矩阵改为:m=0.125 0.25 0.256 0.755 0.025 0.125 0.01; %波形幅值矩阵运行后可以听出声音更加真实了。仿真时域波形如图5-11。图5-11 基于傅里叶级数合成音乐的时域波形利用傅里叶级数合成音乐的局部程序。function button11_Callback(hObject
45、, eventdata, handles)%傅里叶级数合成的音乐% m=1 0.3 0.2; %波形幅值矩阵m=0.125 0.25 0.256 0.755 0.025 0.125 0.01*1;ss=zeros(1,length(t);for i=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.a*es1,
46、39;HandleVisibility','ON');%开场使用坐标,便于操作 a*es(handles.a*es1);%操作在坐标1plot(t1,west');a*is(-0.2 4.2 -1.7 1.7);*label('t/s');ylabel('幅度');5.4 音乐?小星星?字幕动态显示模块的设计与实现 运用前面的简单音乐合成的相关原理及方法来合成音乐?小星星?并且实现小星星歌词字幕的动态显示。?小星星?的音乐简谱如图5-12所示。图5-12 ?小星星?音乐简谱用钢琴的标准音A4=440Hz,根据国际上规定的十二平均律
47、,相邻的半音之间频率之比是1.059463,而且由图可知乐谱的基调是1=C,即该段音乐的基准频率设置为Pt=44100Hz。在编写程序的过程中运用十二平均律的计算方法即:scale12=A4/2(9/12)*2.(0:11)/12)。由上图5-12的音乐简谱可知,此音乐为七音符,程序中设置为map=1 3 5 6 8 10 12。 其中的乐谱写为:score=1 1 5 5 6 6 5,4 4 3 3 2 2 1,5 5 4 4 3 3 2,5 5 4 4 3 3 2,1 1 5 5 6 6 5,4 4 3 3 2 2 1。音乐的每个唱名持续的时间设置为rhythm=repmat1 1 1 1
48、 1 1 2,1,6。 针对于音乐?小星星?的歌词在GUI界面实现边播放边显示,用到的是GUI中的edit1文本框,应用语句sethandles.edit1,string,变量名来到达显示的目的,其中歌词的文字用矩阵lyric=一闪一闪亮晶晶满天都是小星星挂在天上放光明它是我们的小眼睛一闪一闪亮晶晶满天都是小星星来完成编辑。 其中该段音乐合成及频谱显示的程序如下。y = ;for i=1:length(score)%length(score) 为score的长度为7*6=42y =y sin(1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i);%音乐合成e
49、ndt = linspace(0,length(y)/pt,length(y);%时域波形在界面坐标显示set(handles.a*es1,'HandleVisibility','ON');%开场启动坐标,便于操作 a*es(handles.a*es1);%开场图像的使用,根本操作在坐标1plot(t(1:pt/10),y(1:pt/10);a*is(-0.01 0.11 -1.2 1.2);*label('t/s');ylabel('幅度'); NFFT = 2ne*tpow2(length(y);%傅里叶频谱分析Y = fft
50、(y,NFFT)*2/length(y);g = pt/2*linspace(0,1,NFFT/2+1);set(handles.a*es2,'HandleVisibility','ON');%开场启动坐标,便于操作 a*es(handles.a*es2);%开场使用图像,操作在坐标2plot(g,2*abs(Y(1:NFFT/2+1);a*is(-0.1 550 -0.1 ma*(2*abs(Y(1:NFFT/2+1)+0.2);*label('f/Hz');ylabel('幅度');str = ;for i=1:length(
51、score)if mod(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); else wavplay(sin(1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i),pt); s = sprintf('%1c',lyric(i); str=
52、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软件,通过MATLAB GUI构建一个具有图形用户界面的音乐合成系统,界面友好、操作方便。该系统成功地实现了音乐的简单合成、音乐的降噪处理、音乐的加谐波处理、音乐的升降度处理、音乐的时域和频域波形显示分析
53、及基于傅里叶级数分析合成的音乐的操作。但这些操作并不是轻松实现的,在编程与设计过程中,各个模块也是经过验证与调试才到达如今的效果。6.1 音乐的播放、暂停的调试与运行 在设计音乐的播放与暂停这个功能时,一开场是用MATLAB中的sound函数,将向量转换成声音,进展音乐的播放,但是它的缺乏之处是在播放的过程中不能中途暂停,也就是暂停的功能不能表达出来,因此,将sound函数的语句sound(west,8000)替换,分别有播放、暂停、继续播放,实现了音乐的暂停与播放功能。编写程序如下。function button8_Callback(hObject, eventdata, handles)%
54、音乐的播放global flagglobal west fs p;if flag=1p=audio player(west,fs); %将向量转换成声音play(p); %播放音乐endfunction button9_Callback(hObject, eventdata, handles)%音乐的暂停global p flag;if flag=1pause(p);%音乐的暂停endfunction button12_Callback(hObject, eventdata, handles)%音乐的继续播放global p;if flag =1reae(p);%音乐的继续播放end6.2 傅里叶变换分析音乐的调试与运行在用傅里叶分析合成的音乐的模块中,一开场方案使用MATLAB中的wavread函数来读取.wav文件,实现相应功能,但是总不成功,后来通过查阅资料和MATLAB help的帮助才意识到那个光盘中并不存在现成的fmt.wav 文件,所以用另一种方法实现音乐傅里叶频谱显示,通过学习了MATLAB中快速傅里叶变换函数FFT的用法,利用FFT函数实现了该功能,编写程序如下。NFFT = 2ne*tpow2(length(west); Y =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位招聘考试综合类专业能力测试试卷(统计类)-统计预测与
- 员工培训需求调查问卷与结果分析工具
- 质量卓越信誉保证承诺书(4篇)
- 2025年环境工程考试卷子及答案
- 2025年企业人力资源管理师五级真题试卷(含答案)
- 2025年教练员考试模拟考试题及答案
- 2025年消防员(初级)考试题库模拟试卷
- 境外工程建设安全责任承诺函5篇
- 2025年省考事实政治真题试卷带答案
- 2025年小学教师资格考试《综合素质》教育资源整合试卷及答案解析
- 离婚协议书标准电子模板(含书写范文)可编辑A4打印版
- 江西省委社会工作部2025年公开选调事业单位工作人员【10人】备考考试题库附答案解析
- 2025年完整版零星维修工程施工方案服务投标标书
- 医院患者隐私保护制度及培训讲义
- 2025版中国胃癌诊疗指南解读(全文)
- 2025安徽省江南产业集中区建设投资发展(集团)有限公司招聘10人笔试历年参考题库附带答案详解(3卷合一)
- 设备采购安装全流程管理规范
- 咨询方案类收费指导意见
- 2025至2030小型越野汽车行业市场深度分析及竞争格局与投资发展报告
- 云计算应急响应方案
- 计生科应急预案(3篇)
评论
0/150
提交评论