Matlab课程设计报告MATLAB GUI的音乐键盘仿真.docx
- 文档编号:15411398
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:18
- 大小:1.50MB
Matlab课程设计报告MATLAB GUI的音乐键盘仿真.docx
《Matlab课程设计报告MATLAB GUI的音乐键盘仿真.docx》由会员分享,可在线阅读,更多相关《Matlab课程设计报告MATLAB GUI的音乐键盘仿真.docx(18页珍藏版)》请在冰点文库上搜索。
Matlab课程设计报告MATLABGUI的音乐键盘仿真
《MATLAB实践》
课程设计
1.设计目的…………………………………………………3
2.题目分析…………………………………………………3
3.总体设计…………………………………………………4
4.具体设计…………………………………………………4
5.结果分析…………………………………………………15
6.心得体会…………………………………………………15
1、设计目的:
运用MATLAB实现MATLAB的GUI程序设计。
2、题目分析:
课程设计题目:
MATLABGUI的音乐键盘仿真
课程设计的基本要求:
1)熟悉和掌握MATLAB程序设计方法。
2)掌握MATLABGUI程序设计。
3)学习音乐合成基本知识。
设计分析:
这次使用的设计软件是MATLAB的GUI模块,要设计一个音乐键盘要知道一个最简单的键盘本身要有36个发音键,既21个音阶和15个辅音阶。
于是就要在界面上画出36个pushbutton键,再根据其他要求的功能设计出其他相应的模块。
模拟键盘发音是使用音频函数soundsc将不同频率的函数以声音的模式表现出来,而每个音阶相差频率f=440*2^2/12;音阶与相应的辅音阶相差频率f=440*2^1/12。
有了音乐合成的这些基本知识后便可根据自己需要设计界面根据功能编写相应的回调函数。
课程设计的内容:
学习MATLABGUI程序设计,设计和实现一个音乐键盘仿真系统。
要求:
按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。
然后按照自己拟定的功能要求进行程序设计和调试。
1)设计音乐键盘GUI界面,实现单音键盘的发声。
2)实现键盘的双音多频,即每个键盘对应低音频组的一个频率和高音频组的一个频率,实现按键的发出双音。
3)能改变音乐包络形式,实现音型的改变。
4)能够演奏一段音乐。
5)改变键盘的音色,给基音加上泛音序列,模拟不同的乐器演奏。
6)选作:
根据节奏节拍,根据简谱自动演奏一段音乐。
3、总体设计
其中琴键区域实现按键发声,可用鼠标点击,也可以用键盘实现;显示屏区域实现声音波形的实时显示;控制区域实现对整个系统的控制,包括音乐播放、暂停、停止,视屏播放,乐器切换,节拍切换和谐波切换。
4、具体设计
外板设计图如下:
4.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;
ifget(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.radiobutton14,'Value')==1;
ft=x.*sin(f*2*pi*n);
end
ifget(handles.radiobutton13,'Value')==1;
ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n);
end
ifget(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
voice=get(handles.voice,'Value')
sound(ft*voice,8000);
plot(n,ft);
axistight;
(3)实现结果:
可以根据按下不同的键,发出不同音调的声音,且没有失真。
4.2显示屏区域设计
(1)界面设计
(2)函数设计
改模块主要功能是用来实现声音波形实时显示,因此只需要要在每个按键函数里面添加波形显示函数即可:
plot(n,ft);
axistight;
(3)功能实现
钢琴,1/2节拍,单音波形
敲击,1/8节拍,2次谐波波形
4.3节拍切换设计
(1)界面设计
(2)函数设计
ifget(handles.radiobutton3,'Value')==1;
N=8000;
end;
ifget(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;
(3)功能实现
‘duo’音,1/2节拍:
‘duo’音,1/4节拍:
‘duo’音,1/8节拍:
4.4谐波切换设计
(1)界面设计
(2)函数设计
ifget(handles.radiobutton14,'Value')==1;
ft=x.*sin(f*2*pi*n);
end
ifget(handles.radiobutton13,'Value')==1;
ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n);
end
ifget(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:
选取音乐
functionpushbutton35_Callback(hObject,eventdata,handles)
globalyinyue;
[FileName,PathName]=uigetfile('*.wav','MusicPlay');
[y,fs,bits]=wavread(FileName);
yinyue=audioplayer(y,fs)
voice=get(handles.voice,'Value')
play(yinyue);
Pauses:
播放暂停
functionpushbutton38_Callback(hObject,eventdata,handles)
globalyinyue;
pause(yinyue);
Stop:
播放停止
functionpushbutton37_Callback(hObject,eventdata,handles)
globalyinyue;
stop(yinyue);
Resume:
播放恢复
functionpushbutton40_Callback(hObject,eventdata,handles)
globalyinyue;
resume(yinyue);
(3)功能实现
4.6电影播放设计
(1)界面设计
(2)函数设计
functionpushbutton48_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)函数设计
functionfigure1_KeyPressFcn(hObject,eventdata,handles)
ifget(gcf,'CurrentCharacter')==49,%Èç¹û°´ÏµÄÊÇ1
pushbutton10_Callback(hObject,eventdata,handles);end
ifget(gcf,'CurrentCharacter')==50,%Èç¹û°´ÏµÄÊÇ2
pushbutton15_Callback(hObject,eventdata,handles);end
ifget(gcf,'CurrentCharacter')==51,%Èç¹û°´ÏµÄÊÇ3
pushbutton16_Callback(hObject,eventdata,handles);end
ifget(gcf,'CurrentCharacter')==52,%Èç¹û°´ÏµÄÊÇ4
pushbutton17_Callback(hObject,eventdata,handles);end
ifget(gcf,'CurrentCharacter')==53,%Èç¹û°´ÏµÄÊÇ5
pushbutton18_Callback(hObject,eventdata,handles);end
ifget(gcf,'CurrentCharacter')=='C',%Èç¹û°´ÏµÄÊÇC
pushbutton1_Callback(hObject,eventdata,handles);end
ifget(gcf,'CurrentCharacter')==68,%Èç¹û°´ÏµÄÊÇD
pushbutton2_Callback(hObject,eventdata,handles);end
ifget(gcf,'CurrentCharacter')==69,%Èç¹û°´ÏµÄÊÇE
pushbutton3_Callback(hObject,eventdata,handles);end
ifget(gcf,'CurrentCharacter')==70,%Èç¹û°´ÏµÄÊÇF
pushbutton4_Callback(hObject,eventdata,handles);end
ifget(gcf,'CurrentCharacter')==71,%Èç¹û°´ÏµÄÊÇG
pushbutton5_Callback(hObject,eventdata,handles);end
ifget(gcf,'CurrentCharacter')==65,%Èç¹û°´ÏµÄÊÇA
pushbutton6_Callback(hObject,eventdata,handles);end
ifget(gcf,'CurrentCharacter')==66,%Èç¹û°´ÏµÄÊÇB
pushbutton7_Callback(hObject,eventdata,handles);end
(3)功能实现
能通过按下对应键盘,发出对应声音。
如按下C键,发“duo”音
4.9界面美观设计:
选自己的图片作为背景
(1)界面设计
(2)函数设计
functionfigure1_CreateFcn(hObject,eventdata,handles)
ha=axes('units','normalized','position',[0.5830.010.4170.984]);
uistack(ha,'down')
II=imread('2.bmp');
image(II)
colormapgray
set(ha,'handlevisibility','off','visible','off');
(3)功能实现
4.10乐谱播放设计
(1)界面设计
(2)函数设计
functionqinpu(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);
axistight;
functionpushbutton49_Callback(hObject,eventdata,handles)
[name,path]=uigetfile('*.*','');
file=sprintf('%s%s',path,name);
de=importdata(file);
fork=1:
length(de)
qinpu(de(k),de(k+length(de)));
pause(0.5)
end
(3)功能实现
播放事先编辑好的乐谱
5、结果分析
基本上要求的内容都能实现,但是也纯在一些欠缺:
(1)使用键盘发声时如果弹得太快,函数执行的速度跟不上容易形成音阶与节拍对不上位,在用其演奏歌曲时有点欠缺。
(2)在播放视频时无法将食品中的声音一起播出,我有上网查过好像MATLAB现在还无法实现播放视频连带视频中的声音。
(3)乐器切换功能做的不够完善,一方面也是因为自己对音律知识的欠缺。
在今后的学习过程中,希望能通过自己的努力去完成修补这些欠缺的点。
6、心得体会
说实在的这次的MATLAB实验的题目比较令人感兴趣,无论是做PS,音乐键盘还是数据库都让人比较有兴趣去尝试。
跟以往很学术性的实验课设题目大大不同,做完实验每个人都可以利用自己的作品要么玩弄自己的照片,要嘛编歌或者自弹自唱等!
模板的设计多种做样格局自己的审美可以设计不同的界面。
查数据、编程序的过程也可以让自己学到许多知识同时也培养了自己的动手能力,总之,通过这次试验和同学的交流学到了很多东西,培养了动手实验的兴趣也很有成就感。
通过对电子琴此程序的研究与设计,对我们以后论文的书写打下了坚实的基础,同时也使思想提前进入了对论文的思考,这些无疑是给我们提供了一个很好的平台。
参考书目:
[1]MATLAB实用教程(第二版)电子工业出版社
[2]《信号与系统—MATLAB综合实验》谷源涛高等教育出版社
[3]张志涌等精通MATLAB【M】6.5版.北京:
北京航空航天大学出版社,2003,3
[4]董霖.MATLAB使用详解——基础、开发及工程应用北京:
电子工业出版社,2009.1
[5]蔡旭辉,刘卫国,蔡立燕.MATLAB基础与应用教程北京:
人民邮电出版社,2009.8
[6]ChapmanSJ.MATLABProgrammingforEnginerrs.
Brooks/Cole.CA,2002.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Matlab课程设计报告MATLAB GUI的音乐键盘仿真 Matlab 课程设计 报告 GUI 音乐 键盘 仿真