課程設(shè)計(jì)報(bào)告MATLABGUI的音樂(lè)鍵盤(pán)仿真_第1頁(yè)
課程設(shè)計(jì)報(bào)告MATLABGUI的音樂(lè)鍵盤(pán)仿真_第2頁(yè)
課程設(shè)計(jì)報(bào)告MATLABGUI的音樂(lè)鍵盤(pán)仿真_第3頁(yè)
課程設(shè)計(jì)報(bào)告MATLABGUI的音樂(lè)鍵盤(pán)仿真_第4頁(yè)
課程設(shè)計(jì)報(bào)告MATLABGUI的音樂(lè)鍵盤(pán)仿真_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、MATLAB 實(shí)踐課程設(shè)計(jì)目 錄1.設(shè)計(jì)目的32.題目分析33.總體設(shè)計(jì)44.具體設(shè)計(jì)45.結(jié)果分析156.心得體會(huì)151、 設(shè)計(jì)目的:運(yùn)用MATLAB實(shí)現(xiàn)MATLAB的GUI程序設(shè)計(jì)。2、題目分析:課程設(shè)計(jì)題目:MATLAB GUI的音樂(lè)鍵盤(pán)仿真 課程設(shè)計(jì)的基本要求:1)熟悉和掌握MATLAB 程序設(shè)計(jì)方法。2)掌握MATLAB GUI 程序設(shè)計(jì)。3)學(xué)習(xí)音樂(lè)合成基本知識(shí)。設(shè)計(jì)分析:這次使用的設(shè)計(jì)軟件是MATLAB的GUI模塊,要設(shè)計(jì)一個(gè)音樂(lè)鍵盤(pán)要知道一個(gè)最簡(jiǎn)單的鍵盤(pán)本身要有36個(gè)發(fā)音鍵,既21個(gè)音階和15個(gè)輔音階。于是就要在界面上畫(huà)出36個(gè)pushbutton鍵,再根據(jù)其他要求的功能設(shè)計(jì)出

2、其他相應(yīng)的模塊。模擬鍵盤(pán)發(fā)音是使用音頻函數(shù)soundsc將不同頻率的函數(shù)以聲音的模式表現(xiàn)出來(lái),而每個(gè)音階相差頻率f=440*22/12;音階與相應(yīng)的輔音階相差頻率f=440*21/12。有了音樂(lè)合成的這些基本知識(shí)后便可根據(jù)自己需要設(shè)計(jì)界面根據(jù)功能編寫(xiě)相應(yīng)的回調(diào)函數(shù)。課程設(shè)計(jì)的內(nèi)容:學(xué)習(xí)MATLAB GUI程序設(shè)計(jì),設(shè)計(jì)和實(shí)現(xiàn)一個(gè)音樂(lè)鍵盤(pán)仿真系統(tǒng)。要求:按照軟件工程方法,根據(jù)需求進(jìn)行程序的功能分析和界面設(shè)計(jì),給出設(shè)計(jì)詳細(xì)說(shuō)明。然后按照自己擬定的功能要求進(jìn)行程序設(shè)計(jì)和調(diào)試。1)設(shè)計(jì)音樂(lè)鍵盤(pán)GUI界面,實(shí)現(xiàn)單音鍵盤(pán)的發(fā)聲。2)實(shí)現(xiàn)鍵盤(pán)的雙音多頻,即每個(gè)鍵盤(pán)對(duì)應(yīng)低音頻組的一個(gè)頻率和高音頻組的一個(gè)頻率,

3、實(shí)現(xiàn)按鍵的發(fā)出雙音。3)能改變音樂(lè)包絡(luò)形式,實(shí)現(xiàn)音型的改變。4)能夠演奏一段音樂(lè)。5)改變鍵盤(pán)的音色,給基音加上泛音序列,模擬不同的樂(lè)器演奏。6)選作:根據(jù)節(jié)奏節(jié)拍,根據(jù)簡(jiǎn)譜自動(dòng)演奏一段音樂(lè)。3、總體設(shè)計(jì)其中琴鍵區(qū)域?qū)崿F(xiàn)按鍵發(fā)聲,可用鼠標(biāo)點(diǎn)擊,也可以用鍵盤(pán)實(shí)現(xiàn);顯示屏區(qū)域?qū)崿F(xiàn)聲音波形的實(shí)時(shí)顯示;控制區(qū)域?qū)崿F(xiàn)對(duì)整個(gè)系統(tǒng)的控制,包括音樂(lè)播放、暫停、停止,視屏播放,樂(lè)器切換,節(jié)拍切換和諧波切換。4、具體設(shè)計(jì)外板設(shè)計(jì)圖如下:4.1 琴鍵區(qū)域設(shè)計(jì)(1) 界面設(shè)計(jì)(2) 單個(gè)按鍵函數(shù)設(shè)計(jì)該琴鍵設(shè)計(jì)為C調(diào),1對(duì)應(yīng)頻率為261.63Hz,相鄰兩鍵為一個(gè)半音,頻率比為:21/12,因此后面頻率類(lèi)推,如2對(duì)應(yīng)29

4、3.67Hz。單個(gè)按鍵函數(shù)如下: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&

5、#39;)=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

6、.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) 實(shí)現(xiàn)結(jié)果:可以根據(jù)按下不同的鍵,發(fā)出不同音調(diào)的聲音,且沒(méi)有失真。4.2顯示屏區(qū)域設(shè)計(jì)(1)界面設(shè)計(jì)(2)函數(shù)設(shè)計(jì)改模塊主要功能是用來(lái)實(shí)現(xiàn)聲音波形實(shí)時(shí)顯示,因此

7、只需要要在每個(gè)按鍵函數(shù)里面添加波形顯示函數(shù)即可:plot(n,ft);axis tight;(3)功能實(shí)現(xiàn)鋼琴,1/2節(jié)拍,單音波形敲擊,1/8節(jié)拍,2次諧波波形4.3 節(jié)拍切換設(shè)計(jì)(1)界面設(shè)計(jì)(2)函數(shù)設(shè)計(jì)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.ra

8、diobutton9,'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)功能實(shí)現(xiàn)duo音,1/2節(jié)拍:duo音,1/4節(jié)拍:duo音,1/8節(jié)拍:4.4諧波切換設(shè)計(jì)(1)界面設(shè)計(jì)(2)函數(shù)設(shè)計(jì)if get(handles.radiobutton14,'Value')=1;ft=x.*sin(f*2*pi*n);e

9、ndif 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)功能實(shí)現(xiàn)duo音,單音諧波:duo音,1次諧波:duo音,2次諧波:4.5音樂(lè)播放設(shè)計(jì)(1)界面設(shè)計(jì)(2)函數(shù)設(shè)計(jì)Music:選取音樂(lè)function pushbutton35_Ca

10、llback(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 yin

11、yue;pause(yinyue);Stop:播放停止function pushbutton37_Callback(hObject, eventdata, handles)global yinyue;stop(yinyue);Resume:播放恢復(fù)function pushbutton40_Callback(hObject, eventdata, handles)global yinyue;resume(yinyue);(3)功能實(shí)現(xiàn)4.6 電影播放設(shè)計(jì)(1)界面設(shè)計(jì)(2)函數(shù)設(shè)計(jì)function pushbutton48_Callback(hObject, eventdata, handle

12、s) name,path=uigetfile('*.*','');file=sprintf('%s%s',path,name);mplay(file,24);(3)功能實(shí)現(xiàn)4.7 音量控制設(shè)計(jì)(1)界面設(shè)計(jì)(2)函數(shù)設(shè)計(jì)voice=get(handles.voice,'Value')sound(ft*voice,8000);(3)功能實(shí)現(xiàn)能實(shí)現(xiàn)對(duì)音量的調(diào)節(jié)4.8鍵盤(pán)控制發(fā)音設(shè)計(jì)(1)界面設(shè)計(jì)(2)函數(shù)設(shè)計(jì)function figure1_KeyPressFcn(hObject, eventdata, handles)if get(

13、gcf,'CurrentCharacter')=49, %Èç¹û°´ÏµÄÊÇ1 pushbutton10_Callback(hObject,eventdata,handles);endif get(gcf,'CurrentCharacter')=50, %Èç¹û°´ÏµÄÊÇ2 pushbutton15_Callba

14、ck(hObject,eventdata,handles);endif get(gcf,'CurrentCharacter')=51, %Èç¹û°´ÏµÄÊÇ3 pushbutton16_Callback(hObject,eventdata,handles);endif get(gcf,'CurrentCharacter')=52, %Èç¹û°´Ïµ

15、;ÄÊÇ4 pushbutton17_Callback(hObject,eventdata,handles);endif get(gcf,'CurrentCharacter')=53, %Èç¹û°´ÏµÄÊÇ5 pushbutton18_Callback(hObject,eventdata,handles);endif get(gcf,'CurrentCharacter')='C', %

16、0;ç¹û°´ÏµÄÊÇC pushbutton1_Callback(hObject,eventdata,handles); endif get(gcf,'CurrentCharacter')=68, %Èç¹û°´ÏµÄÊÇD pushbutton2_Callback(hObject,eventdata,handles);endif get(gc

17、f,'CurrentCharacter')=69, %Èç¹û°´ÏµÄÊÇE pushbutton3_Callback(hObject,eventdata,handles);endif get(gcf,'CurrentCharacter')=70, %Èç¹û°´ÏµÄÊÇF pushbutton4_Callback(h

18、Object,eventdata,handles);endif get(gcf,'CurrentCharacter')=71, %Èç¹û°´ÏµÄÊÇG pushbutton5_Callback(hObject,eventdata,handles);endif get(gcf,'CurrentCharacter')=65, %Èç¹û°´Ïµ

19、6;ÊÇA pushbutton6_Callback(hObject,eventdata,handles);endif get(gcf,'CurrentCharacter')=66, %Èç¹û°´ÏµÄÊÇB pushbutton7_Callback(hObject,eventdata,handles);end(3)功能實(shí)現(xiàn)能通過(guò)按下對(duì)應(yīng)鍵盤(pán),發(fā)出對(duì)應(yīng)聲音。如按下C鍵,發(fā)“duo”音4.9界面美觀設(shè)計(jì):選自己的圖片作為背景(1)界面設(shè)計(jì)

20、(2)函數(shù)設(shè)計(jì)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&

21、#39;);(3)功能實(shí)現(xiàn)4.10樂(lè)譜播放設(shè)計(jì)(1)界面設(shè)計(jì)(2)函數(shù)設(shè)計(jì)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)功能實(shí)現(xiàn)播放事先編輯好的樂(lè)譜5、結(jié)果分析基本上要求的內(nèi)容都能實(shí)現(xiàn),但是也純?cè)谝恍┣啡保海?)使用鍵盤(pán)發(fā)聲時(shí)如果彈

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論