欢迎来到天天文库
浏览记录
ID:25458896
大小:2.36 MB
页数:14页
时间:2018-11-20
《matlab课程设计报告--matlab gui的音乐键盘仿真》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、《MATLAB实践》课程设计目录1.设计目的…………………………………………………32.题目分析…………………………………………………33.总体设计…………………………………………………44.具体设计…………………………………………………45.结果分析…………………………………………………156.心得体会…………………………………………………15141、设计目的:运用MATLAB实现MATLAB的GUI程序设计。2、题目分析:课程设计题目:MATLABGUI的音乐键盘仿真课程设计的基本要求:1)熟悉和掌握MATLAB程序设计方法。2)掌握MATLABGUI程序设计。
2、3)学习音乐合成基本知识。设计分析:这次使用的设计软件是MATLAB的GUI模块,要设计一个音乐键盘要知道一个最简单的键盘本身要有36个发音键,既21个音阶和15个辅音阶。于是就要在界面上画出36个pushbutton键,再根据其他要求的功能设计出其他相应的模块。模拟键盘发音是使用音频函数soundsc将不同频率的函数以声音的模式表现出来,而每个音阶相差频率f=440*2^2/12;音阶与相应的辅音阶相差频率f=440*2^1/12。有了音乐合成的这些基本知识后便可根据自己需要设计界面根据功能编写相应的回调函数。课程设计的内容:学习MATLABGUI程序设计,设计和
3、实现一个音乐键盘仿真系统。要求:按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照自己拟定的功能要求进行程序设计和调试。1)设计音乐键盘GUI界面,实现单音键盘的发声。2)实现键盘的双音多频,即每个键盘对应低音频组的一个频率和高音频组的一个频率,实现按键的发出双音。3)能改变音乐包络形式,实现音型的改变。4)能够演奏一段音乐。5)改变键盘的音色,给基音加上泛音序列,模拟不同的乐器演奏。6)选作:根据节奏节拍,根据简谱自动演奏一段音乐。143、总体设计其中琴键区域实现按键发声,可用鼠标点击,也可以用键盘实现;显示屏区域实现声音波形的实时
4、显示;控制区域实现对整个系统的控制,包括音乐播放、暂停、停止,视屏播放,乐器切换,节拍切换和谐波切换。4、具体设计外板设计图如下:144.1琴键区域设计(1)界面设计(2)单个按键函数设计该琴键设计为C调,1对应频率为261.63Hz,相邻两键为一个半音,频率比为:2^1/12,因此后面频率类推,如2对应293.67Hz。单个按键函数如下:functionpushbutton1_Callback(hObject,eventdata,handles)f=261.63;ifget(handles.radiobutton3,'Value')==1;N=8000;end;i
5、fget(handles.radiobutton4,'Value')==1;N=2000;end;ifget(handles.radiobutton5,'Value')==1;N=25000;end;ifget(handles.radiobutton9,'Value')==1;T=1;end;ifget(handles.radiobutton10,'Value')==1;T=0.5;end;ifget(handles.radiobutton11,'Value')==1;T=0.25;end;n=0:1/N:T;x=exp(-2*n);ifget(handles.ra
6、diobutton14,'Value')==1;ft=x.*sin(f*2*pi*n);endifget(handles.radiobutton13,'Value')==1;ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n);endifget(handles.radiobutton12,'Value')==1;14ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n)+0.3*sin(f*3*2*pi*n);endvoice=get(handles.voice,'Value')sound(ft*voice,8000
7、);plot(n,ft);axistight;(1)实现结果:可以根据按下不同的键,发出不同音调的声音,且没有失真。4.2显示屏区域设计(1)界面设计(2)函数设计改模块主要功能是用来实现声音波形实时显示,因此只需要要在每个按键函数里面添加波形显示函数即可:plot(n,ft);axistight;(3)功能实现钢琴,1/2节拍,单音波形14敲击,1/8节拍,2次谐波波形4.3节拍切换设计(1)界面设计(2)函数设计ifget(handles.radiobutton3,'Value')==1;N=8000;end;ifget(handles.radiobutto
此文档下载收益归作者所有