Matlab课程设计报告--MATLABGUI的音乐键盘仿真.doc_第1页
Matlab课程设计报告--MATLABGUI的音乐键盘仿真.doc_第2页
Matlab课程设计报告--MATLABGUI的音乐键盘仿真.doc_第3页
Matlab课程设计报告--MATLABGUI的音乐键盘仿真.doc_第4页
Matlab课程设计报告--MATLABGUI的音乐键盘仿真.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

MATLAB 实践 课程设计目 录1.设计目的32.题目分析33.总体设计44.具体设计45.结果分析156.心得体会151、 设计目的:运用MATLAB实现MATLAB的GUI程序设计。2、题目分析:课程设计题目:MATLAB GUI的音乐键盘仿真 课程设计的基本要求:1)熟悉和掌握MATLAB 程序设计方法。2)掌握MATLAB GUI 程序设计。3)学习音乐合成基本知识。设计分析:这次使用的设计软件是MATLAB的GUI模块,要设计一个音乐键盘要知道一个最简单的键盘本身要有36个发音键,既21个音阶和15个辅音阶。于是就要在界面上画出36个pushbutton键,再根据其他要求的功能设计出其他相应的模块。模拟键盘发音是使用音频函数soundsc将不同频率的函数以声音的模式表现出来,而每个音阶相差频率f=440*22/12;音阶与相应的辅音阶相差频率f=440*21/12。有了音乐合成的这些基本知识后便可根据自己需要设计界面根据功能编写相应的回调函数。课程设计的内容:学习MATLAB GUI程序设计,设计和实现一个音乐键盘仿真系统。要求:按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照自己拟定的功能要求进行程序设计和调试。1)设计音乐键盘GUI界面,实现单音键盘的发声。2)实现键盘的双音多频,即每个键盘对应低音频组的一个频率和高音频组的一个频率,实现按键的发出双音。3)能改变音乐包络形式,实现音型的改变。4)能够演奏一段音乐。5)改变键盘的音色,给基音加上泛音序列,模拟不同的乐器演奏。6)选作:根据节奏节拍,根据简谱自动演奏一段音乐。3、总体设计其中琴键区域实现按键发声,可用鼠标点击,也可以用键盘实现;显示屏区域实现声音波形的实时显示;控制区域实现对整个系统的控制,包括音乐播放、暂停、停止,视屏播放,乐器切换,节拍切换和谐波切换。4、具体设计外板设计图如下:4.1 琴键区域设计(1) 界面设计(2) 单个按键函数设计该琴键设计为C调,1对应频率为261.63Hz,相邻两键为一个半音,频率比为:21/12,因此后面频率类推,如2对应293.67Hz。单个按键函数如下:function pushbutton1_Callback(hObject, eventdata, handles)f=261.63;if get(handles.radiobutton3,Value)=1; N=8000;end;if get(handles.radiobutton4,Value)=1; N=2000;end;if get(handles.radiobutton5,Value)=1; N=25000;end;if get(handles.radiobutton9,Value)=1; T=1;end;if get(handles.radiobutton10,Value)=1; T=0.5;end;if get(handles.radiobutton11,Value)=1; T=0.25;end;n=0:1/N:T;x=exp(-2*n);if get(handles.radiobutton14,Value)=1; ft=x.*sin(f*2*pi*n);endif get(handles.radiobutton13,Value)=1; ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n);endif get(handles.radiobutton12,Value)=1; ft=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);plot(n,ft);axis tight;(3) 实现结果:可以根据按下不同的键,发出不同音调的声音,且没有失真。4.2显示屏区域设计(1)界面设计(2)函数设计改模块主要功能是用来实现声音波形实时显示,因此只需要要在每个按键函数里面添加波形显示函数即可:plot(n,ft);axis tight;(3)功能实现钢琴,1/2节拍,单音波形敲击,1/8节拍,2次谐波波形4.3 节拍切换设计(1)界面设计(2)函数设计if get(handles.radiobutton3,Value)=1; N=8000;end;if get(handles.radiobutton4,Value)=1; N=2000;end;if get(handles.radiobutton5,Value)=1; N=25000;end;if get(handles.radiobutton9,Value)=1; T=1;end;if get(handles.radiobutton10,Value)=1; T=0.5;end;if get(handles.radiobutton11,Value)=1; T=0.25;end;n=0:1/N:T;(3)功能实现duo音,1/2节拍:duo音,1/4节拍:duo音,1/8节拍:4.4 谐波切换设计(1)界面设计(2)函数设计if get(handles.radiobutton14,Value)=1; ft=x.*sin(f*2*pi*n);endif get(handles.radiobutton13,Value)=1; ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n);endif get(handles.radiobutton12,Value)=1; ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n)+0.3*sin(f*3*2*pi*n);end(3)功能实现duo音,单音谐波:duo音,1次谐波:duo音,2次谐波:4.5 音乐播放设计(1)界面设计(2)函数设计Music:选取音乐function pushbutton35_Callback(hObject, eventdata, handles)global yinyue;FileName,PathName=uigetfile(*.wav,Music Play);y,fs,bits=wavread(FileName);yinyue=audioplayer(y,fs)voice=get(handles.voice,Value)play(yinyue);Pauses:播放暂停function pushbutton38_Callback(hObject, eventdata, handles)global yinyue;pause(yinyue);Stop:播放停止function pushbutton37_Callback(hObject, eventdata, handles)global yinyue;stop(yinyue);Resume:播放恢复function pushbutton40_Callback(hObject, eventdata, handles)global yinyue;resume(yinyue);(3)功能实现4.6 电影播放设计(1)界面设计(2)函数设计function pushbutton48_Callback(hObject, eventdata, handles) name,path=uigetfile(*.*,);file=sprintf(%s%s,path,name);mplay(file,24);(3)功能实现4.7 音量控制设计(1)界面设计(2)函数设计voice=get(handles.voice,Value)sound(ft*voice,8000);(3)功能实现能实现对音量的调节4.8键盘控制发音设计(1)界面设计(2)函数设计function figure1_KeyPressFcn(hObject, eventdata, handles)if get(gcf,CurrentCharacter)=49, %1 pushbutton10_Callback(hObject,eventdata,handles);endif get(gcf,CurrentCharacter)=50, %2 pushbutton15_Callback(hObject,eventdata,handles);endif get(gcf,CurrentCharacter)=51, %3 pushbutton16_Callback(hObject,eventdata,handles);endif get(gcf,CurrentCharacter)=52, %4 pushbutton17_Callback(hObject,eventdata,handles);endif get(gcf,CurrentCharacter)=53, %5 pushbutton18_Callback(hObject,eventdata,handles);endif get(gcf,CurrentCharacter)=C, %C pushbutton1_Callback(hObject,eventdata,handles); endif get(gcf,CurrentCharacter)=68, %D pushbutton2_Callback(hObject,eventdata,handles);endif get(gcf,CurrentCharacter)=69, %E pushbutton3_Callback(hObject,eventdata,handles);endif get(gcf,CurrentCharacter)=70, %F pushbutton4_Callback(hObject,eventdata,handles);endif get(gcf,CurrentCharacter)=71, %G pushbutton5_Callback(hObject,eventdata,handles);endif get(gcf,CurrentCharacter)=65, %A pushbutton6_Callback(hObject,eventdata,handles);endif get(gcf,CurrentCharacter)=66, %B pushbutton7_Callback(hObject,eventdata,handles);end(3)功能实现能通过按下对应键盘,发出对应声音。如按下C键,发“duo”音4.9界面美观设计:选自己的图片作为背景(1)界面设计(2)函数设计function figure1_CreateFcn(hObject, eventdata, handles)ha=axes(units,normalized,position,0.583 0.01 0.417 0.984);uistack(ha,down)II=imread(2.bmp);image(II)colormap grayset(ha,handlevisibility,off,visible,off);(3)功能实现4.10乐谱播放设计(1)界面设计(2)函数设计function qinpu(a,b) f=261.6*2(a/12);n=0:1/8000:b*0.5;x=exp(-2*n); ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n)+0.3*sin(f*3*2*pi*n);soundsc(ft);plot(n,ft);axis tight;function pushbutton49_Callback(hObject, eventdata, handles)name,path=uigetfile(*.*,); file=sprintf(%s%s,path,name);de=importdata(file);for k=1:length(de) qinpu(de(k),de(k+length(de); pause(0.5)end(3)功能实现播放事先编辑好的乐谱5、结果分析基本上要求的内容都能实现,但是也纯在一些欠缺:(1)使用键盘发声时如果弹得太快,函数执行的速度跟不上容易形成音阶与节拍对不上位,在用其演奏歌曲时有点欠缺。(2)在播放视频时无法将食品中的声音一起播出,我有上网查过好像MATLAB现在还无法实现播放视频连带视频中的声音。(3)乐器切换功能做的不够完善,一方面也是因为自己对音律知识的欠缺。在今后的学习过程中,希望能通过自己的努力去完成修补这些欠缺的点。6、心得体会说实在的这次的MATLAB实验的题目比较令人感兴趣,无论是做PS,音乐键盘还是数据库都让人比较有兴趣去尝试。跟以往很学术性的实验课设题目大大不同,做完实验每个人都可以利用自己的作品要么玩弄自己的照片,要嘛编歌或者自弹自唱等!模板的设计多种做样格局自己的审美可以设计不同的界面。查数据、编程序的过程也可以让自己学到许多知识同时也培养了自己的动手能力,总之,通过这次试验和同学的交流学到了很多东西,培养了动手实验的兴趣也很有成就感。通过对电子琴此程序的研究与设计,对我们以后论文的书写打下了坚实的基础,同时也使思想提前进入了对

温馨提示

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

评论

0/150

提交评论