基于MATLAB的音樂(lè)電子琴制作_第1頁(yè)
基于MATLAB的音樂(lè)電子琴制作_第2頁(yè)
基于MATLAB的音樂(lè)電子琴制作_第3頁(yè)
基于MATLAB的音樂(lè)電子琴制作_第4頁(yè)
基于MATLAB的音樂(lè)電子琴制作_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

..基于MATLAB的音樂(lè)電子琴制作簡(jiǎn)述:電子琴的每個(gè)音階均對(duì)應(yīng)一個(gè)特定頻率的信號(hào),通過(guò)調(diào)用數(shù)字信號(hào)發(fā)生器產(chǎn)生一系列指定的頻率的聲音,從而達(dá)到虛擬的電子琴的功能。本次設(shè)計(jì)是基于MATLABGUI程序?qū)崿F(xiàn)的一個(gè)音樂(lè)鍵盤仿真系統(tǒng)。1功能介紹總體設(shè)計(jì)框圖如下圖所示,其包括單音鍵盤發(fā)音模塊,音效長(zhǎng)短的選擇模塊,包絡(luò)的選擇模塊,實(shí)現(xiàn)鍵盤代替鼠標(biāo)輸入模塊,雙音多頻模塊,演奏音樂(lè)模塊,播放歌曲,視頻模塊包括對(duì)文件播放的暫停,停止和復(fù)位,多鍵盤輸入對(duì)輸入后統(tǒng)一播放模塊和畫圖模塊。Matlab的數(shù)據(jù)采集工具箱<DAT>提供了一系列的函數(shù)和命令來(lái)實(shí)現(xiàn)實(shí)時(shí)模擬信號(hào)的輸出,通過(guò)調(diào)用這些函數(shù)和命令可以直接控制聲卡輸出虛擬信號(hào)。只需要一臺(tái)帶有普通多媒體聲卡并安裝了Matlab軟件的計(jì)算機(jī)就可以滿足要求實(shí)現(xiàn)虛擬信號(hào)的輸出,系統(tǒng)結(jié)構(gòu)簡(jiǎn)單方便。交互界面如圖1所示:圖1程序的交互界面1.1功能模塊1單音鍵盤發(fā)音模塊設(shè)計(jì)一個(gè)帶參子函數(shù)實(shí)現(xiàn)鍵盤的發(fā)音功能,當(dāng)實(shí)現(xiàn)需要實(shí)現(xiàn)音階的播放時(shí),只要調(diào)用這個(gè)子函數(shù),并根據(jù)不同音階、不同音調(diào)的頻率改變子函數(shù)的參數(shù)即可。2>音效長(zhǎng)短的選擇模塊制作一個(gè)buttongroup的組控件分別選擇不同的控件實(shí)現(xiàn)不同的音效長(zhǎng)短,音效的長(zhǎng)短是通過(guò)改變播放一個(gè)音階的時(shí)間長(zhǎng)短來(lái)實(shí)現(xiàn)的。3包絡(luò)的選擇模塊制作一個(gè)buttongroup的組控件分別選擇不同的控件實(shí)現(xiàn)不同的包絡(luò),在模塊一的基礎(chǔ)上,設(shè)置選中不同的控件分別對(duì)應(yīng)不同的包絡(luò),x為不同包絡(luò)〔如正弦波、三角波、指數(shù)等的表達(dá)形式,將x與模塊一中實(shí)現(xiàn)單音鍵盤發(fā)音的函數(shù)相乘時(shí)便可實(shí)現(xiàn)不同形式的衰減,實(shí)現(xiàn)音型的改變。4實(shí)現(xiàn)鍵盤代替鼠標(biāo)輸入模塊根據(jù)計(jì)算機(jī)鍵盤上的不同按鍵對(duì)應(yīng)不同的ASCII碼的值,利用函數(shù)get<>獲取當(dāng)前所按下的數(shù)字鍵對(duì)應(yīng)的ASCII碼的值,根據(jù)ASCII碼的值判斷對(duì)應(yīng)是按下鍵盤的值。并執(zhí)行相應(yīng)音階的功能鍵。5雙音多頻模塊通過(guò)設(shè)置一個(gè)radiobutton來(lái)實(shí)現(xiàn)雙音多頻的功能,設(shè)置一個(gè)全局變量,當(dāng)選中該控件時(shí),全局變量的值改變,即在帶參的子函數(shù)中增加它的頻率分量。就可以實(shí)現(xiàn)雙音多頻功能。6演奏音樂(lè)模塊通過(guò)設(shè)置一個(gè)pushbutton鍵來(lái)實(shí)現(xiàn),按下該鍵時(shí),可以選擇事先自己編好的txt的文檔,通過(guò)這個(gè)文檔就可以播放音樂(lè)。7播放歌曲,視頻模塊根據(jù)matlab提供的函數(shù),視頻時(shí)首先對(duì)文件的名字和路徑進(jìn)行提起,直接對(duì)文件的播放。音樂(lè)的則是首先對(duì)文件的名字和路徑進(jìn)行提起,得到名字和路徑后就對(duì)該文件進(jìn)行采樣,使其離散化。最后實(shí)現(xiàn)對(duì)文件的播放。8多鍵盤輸入對(duì)輸入后統(tǒng)一播放模塊該功能實(shí)現(xiàn)先對(duì)鍵盤輸入內(nèi)容進(jìn)行存儲(chǔ),當(dāng)輸入完成后就可以按播放鍵對(duì)剛才的存儲(chǔ)內(nèi)容進(jìn)行播放,本功能通過(guò)radiobutton鍵實(shí)現(xiàn)的鍵盤輸入的存儲(chǔ),當(dāng)該建被選中時(shí),則會(huì)不斷的掃描鍵盤是否有鍵盤按下,并對(duì)按下鍵進(jìn)行存儲(chǔ),直到該鍵沒(méi)有被選中為止,同時(shí)設(shè)置一個(gè)pushbutton鍵對(duì)存儲(chǔ)的信息進(jìn)行播放,播放完成后自動(dòng)清除存儲(chǔ)的內(nèi)容,以便下一次存儲(chǔ)。9畫圖模塊該模塊的功能是根據(jù)播放每一個(gè)音符的數(shù)組畫出每一個(gè)音符的波形,使我們對(duì)播放的音型可以一目了然,便于觀察與分析。2功能實(shí)現(xiàn)程序由兩個(gè)部分組成:MATLAB代碼〔.m文件和GUI圖形〔.fig。備注:軟件版本:MATLABR2011b2.1單音鍵盤發(fā)音模塊根據(jù)要求,首先利用pushbutton鍵作為單音鍵盤的發(fā)音鍵。1~7七個(gè)音階對(duì)應(yīng)高中低三種不同的音調(diào)共21個(gè)鍵,還有15個(gè)輔音,共36個(gè)按鍵。如圖2所示,白色的按鍵代表音調(diào)鍵,前7個(gè)是低音的七個(gè)音階,中間7個(gè)是中音的七個(gè)音階,后面7個(gè)是高音的七個(gè)音階,黑色的代表輔音。查閱相關(guān)資料可知,發(fā)音頻率對(duì)應(yīng)的表達(dá)式為f=440*2^<<s-49>/12>,當(dāng)所發(fā)音為低音時(shí)s的取值為31~37,發(fā)中音時(shí)s的取值為40~46,發(fā)高音時(shí)s的取值為49~55。為了程序設(shè)計(jì)簡(jiǎn)化目的,設(shè)計(jì)一個(gè)名為gangqin<s>的子函數(shù)。有以上帶參的子函數(shù)后則每個(gè)鍵盤下面的程序非常簡(jiǎn)單,然后在每個(gè)pushbutton鍵的callback函數(shù)中調(diào)用該子函數(shù)即可,如gangqin〔45;圖2單音鍵盤發(fā)音模塊具體代碼參見(jiàn):functiongangqin<s>音效長(zhǎng)短的選擇模塊制作一個(gè)buttongroup的組控件分別選擇不同的控件實(shí)現(xiàn)不同的音效長(zhǎng)短,該組控件包括三個(gè)radiobutton分別對(duì)應(yīng)不同的音效長(zhǎng)短〔長(zhǎng),中,短。音效長(zhǎng)短的改變實(shí)質(zhì)上是改變其音階播放時(shí)間的長(zhǎng)短,定義一個(gè)全局變量T通過(guò)改變T的值來(lái)改變音效的長(zhǎng)度,gangqin的子函數(shù)如上面所示。界面如圖3所示:圖3音效長(zhǎng)短的選擇模塊具體代碼參見(jiàn):Functionyinxiao_Callback<hObject,eventdata,handles>2.2包絡(luò)的選擇模塊制作一個(gè)buttongroup的組控件分別選擇不同的控件實(shí)現(xiàn)不同的包絡(luò),該組控件包括三個(gè)radiobutton分別對(duì)應(yīng)不同的包絡(luò)。如圖4所示,定義了方波、三角波和正弦波三種不同形式的包絡(luò)可供選擇。圖4包絡(luò)的選擇模塊將組合鍵中的buttongroup鍵的Tag的值設(shè)置為"baol",三個(gè)radiobutton鍵分別對(duì)應(yīng)指數(shù)波、三角波、正弦波,相應(yīng)的Tag設(shè)"zhishu"、"sanjiao"、"zhengxian",def=get<de,'tag'>獲取三個(gè)RadioButton鍵中Tag的值,設(shè)置一個(gè)全局變量p,用switch函數(shù)實(shí)現(xiàn),當(dāng)case為'zhishu'時(shí),p的值1;case為'sanjiao'時(shí),p的值2;case為'zhengxian'時(shí)p的值為3。把p的值反應(yīng)到gangqin〔s的子函數(shù)中,在子函數(shù)中根據(jù)不同的p的值選用不同的包絡(luò),即可實(shí)現(xiàn)不同的包絡(luò),所發(fā)出的音型便不一樣。由于電子琴的實(shí)驗(yàn)結(jié)果是聲音,難以用文字表達(dá),在下面僅用幾張圖片展示一下結(jié)果。圖5正弦波包絡(luò)圖6方波包絡(luò)圖7三角波具體代碼參見(jiàn):Functionbaoluo_Callback<hObject,eventdata,handles>2.3實(shí)現(xiàn)鍵盤代替鼠標(biāo)輸入模塊用一個(gè)radiobutton鍵便可實(shí)現(xiàn)該功能,可以根據(jù)不同的鍵盤按鍵發(fā)出不同的音樂(lè)。同時(shí)將該鍵的string改為"鍵盤",表示這個(gè)鍵是實(shí)現(xiàn)鍵盤的功能。如圖8所示:圖8鍵盤代替鼠標(biāo)輸入根據(jù)計(jì)算機(jī)鍵盤上不同鍵對(duì)應(yīng)的ASCII碼的值不同,利用函數(shù)get<>獲取當(dāng)前所按下的鍵對(duì)應(yīng)的ASCII碼的值,并執(zhí)行相應(yīng)播放音階。具體代碼參見(jiàn):functionjianpan_KeyPressFcn<hObject,eventdata,handles>2.4雙音多頻模塊通過(guò)設(shè)置一個(gè)radiobutton來(lái)實(shí)現(xiàn)雙音多頻的功能,當(dāng)選中該按鈕時(shí),則增加它的頻率分量。使其含有豐富頻率分量。如圖9所示:圖9雙音多頻模塊具體代碼參見(jiàn):functionduopin_Callback<hObject,eventdata,handles>2.5演奏音樂(lè)模塊通過(guò)設(shè)置一個(gè)pushbutton鍵來(lái)實(shí)現(xiàn),如圖10所示:圖10播放譜曲按下該鍵時(shí),界面會(huì)要求你選擇文檔,可以選擇事先自己編好的txt的文檔,選中該文檔,并按打開(kāi)鍵就可以播放音樂(lè)。txt文件的內(nèi)容如圖11所示:圖11樂(lè)譜內(nèi)容Txt文件代表的意思是如‘441’,是表示頻率為44,延長(zhǎng)的長(zhǎng)度為1播放音樂(lè)不僅需要確定每個(gè)音符,還要確定每個(gè)音符延長(zhǎng)的時(shí)間,音符延長(zhǎng)的時(shí)間是有n的取值大小所確定的。因此這里就可以調(diào)用子函數(shù)的形式方便的實(shí)現(xiàn)。具體代碼參見(jiàn):functionqinpu<a,b>functiondakai_Callback<hObject,eventdata,handles>2.6播放歌曲,視頻模塊本功能的實(shí)現(xiàn)是通過(guò)pushbutton鍵來(lái)實(shí)現(xiàn)的。界面如圖12所示:圖12播放歌曲視頻模塊通過(guò)按下播放歌曲鍵或者播放視頻鍵就可以選擇播放的文件,界面如圖13所示:按打開(kāi)按鈕就可以播放音樂(lè)或視頻。圖13播放視頻視頻時(shí)首先對(duì)文件的名字和路徑進(jìn)行提起,直接對(duì)文件的播放,用的是matlab自帶的函數(shù)implay〔。音樂(lè)的則是首先對(duì)文件的名字和路徑進(jìn)行提起,得到名字和路徑后就對(duì)該文件進(jìn)行采樣,使其離散化。最后實(shí)現(xiàn)對(duì)文件的播放。這里不僅可以對(duì)音樂(lè)的播放,還可以對(duì)音樂(lè)的暫停,復(fù)位和停止。分別用到matlab自帶的函數(shù):播放play〔,暫停pause〔,復(fù)位resume〔和停止stop〔。具體代碼參見(jiàn):functionshipin_Callback<hObject,eventdata,handles>functionchangge_Callback<hObject,eventdata,handles>2.7多鍵盤輸入后統(tǒng)一播放模塊本功能通過(guò)radiobutton鍵實(shí)現(xiàn)的鍵盤輸入的存儲(chǔ),當(dāng)該建被選中時(shí),則會(huì)不斷的掃描鍵盤是否有鍵盤按下,并對(duì)按下鍵進(jìn)行存儲(chǔ),直到該鍵沒(méi)有被選中為止,同時(shí)設(shè)置一個(gè)pushbutton鍵對(duì)存儲(chǔ)的信息進(jìn)行播放,播放完成后自動(dòng)清除存儲(chǔ)的內(nèi)容,以便下一次存儲(chǔ)。界面如圖14所示:圖14多鍵盤輸入后播放該功能實(shí)現(xiàn)先對(duì)鍵盤輸入內(nèi)容進(jìn)行存儲(chǔ),當(dāng)輸入完成后就可以按播放鍵對(duì)剛才的存儲(chǔ)內(nèi)容進(jìn)行播放,播放完成后對(duì)存儲(chǔ)的內(nèi)容進(jìn)行清空。實(shí)現(xiàn)對(duì)鍵盤的輸入內(nèi)容進(jìn)行存儲(chǔ),并把存儲(chǔ)的值整合到數(shù)組y內(nèi),pushbutton鍵是對(duì)上述存儲(chǔ)的信息進(jìn)行讀取,識(shí)別并播放。具體代碼參見(jiàn):functionjianc_KeyPressFcn<hObject,eventdata,handles>functionbf_Callback<hObject,eventdata,handles>2.8畫圖模塊通過(guò)axse控件實(shí)現(xiàn)繪圖,繪出播放每個(gè)音階的波形,并把畫出的波形顯示到axse上,界面如圖15所示:圖15音階的波形該模塊的功能是根據(jù)播放每一個(gè)音符的數(shù)組畫出每一個(gè)音符的波形,并把其顯示在界面上。具體代碼參見(jiàn):functionaxes1_CreateFcn<hObject,eventdata,handles>3程序總結(jié)本程序?qū)崿F(xiàn)簡(jiǎn)單的音頻處理功能及便捷的圖形化交互界面。具有以下特點(diǎn)與缺陷:1、圖形化用戶交互界面簡(jiǎn)潔明了。右側(cè)放置音頻視頻播放的各選項(xiàng)控件,且從上到下的排布體現(xiàn)操作步驟;上側(cè)顯示音頻文件的數(shù)據(jù)波形。提示信息豐富,方便操作。2、程序可擴(kuò)展性好,方便功能擴(kuò)展。未盡功能:〔1沒(méi)有調(diào)節(jié)音量大小的按鈕,可以優(yōu)化。〔2聲音播放時(shí),實(shí)時(shí)的顯示播放進(jìn)度?!?更為實(shí)際的音頻處理功能待加強(qiáng)。4課程總結(jié)整個(gè)制作和調(diào)試過(guò)程都是按模塊進(jìn)行的,對(duì)每一個(gè)模塊功能的實(shí)現(xiàn)的情況下才對(duì)下一個(gè)功能進(jìn)行制作。剛開(kāi)始做模塊一時(shí),由于沒(méi)有想到后面的一些功能所以就沒(méi)有寫子函數(shù),是在每一個(gè)按鍵下都寫了一個(gè)聲音播放的程序,這樣做不僅量大也很不方便。因此后面改成了子函數(shù)的形式,這樣的話程序不僅簡(jiǎn)練也很好調(diào)用,非常方便。在調(diào)試過(guò)程中先將函數(shù)gangqin<s>中的全局變量p的不同數(shù)字代表不同的波形表達(dá)式,鼠標(biāo)點(diǎn)擊包絡(luò)組控件的不同按鈕,選擇不同的包絡(luò),聽(tīng)起來(lái)的效果也相差較大,當(dāng)包絡(luò)為指數(shù)形式時(shí)較符合平時(shí)聽(tīng)音樂(lè)的習(xí)慣。還有一個(gè)是gangqin〔s中的全局變量T,不同的值表示不同的音效長(zhǎng)短。播放的時(shí)間是不一樣的,因此聽(tīng)起來(lái)會(huì)有不同的感覺(jué)。調(diào)試過(guò)程中應(yīng)根據(jù)相關(guān)資料和自己的感覺(jué)不斷改變這兩個(gè)值的數(shù)字,最終選擇一個(gè)聽(tīng)起來(lái)較為合適的取值。上述完成后就需要做鍵盤代替鼠標(biāo)按鍵的功能,首先需要了解按下鍵盤電腦獲得的是按鍵的ASCII值。所以我們必須把按鍵的ASCII的值對(duì)應(yīng)到播放不同音符的頻率上去,這樣才能靈活的控制每一個(gè)音符,每個(gè)音符要與鍵盤的按鍵形成一一對(duì)應(yīng)關(guān)系,不然的話程序很容易出錯(cuò)。程序完成后,需要對(duì)程序進(jìn)行調(diào)試,使得每一個(gè)鍵盤的按鈕按下對(duì)應(yīng)的音符會(huì)播放出來(lái)。接下來(lái)制作的是鍵盤的存儲(chǔ)功能,即實(shí)現(xiàn)對(duì)鍵盤的多輸入,輸入過(guò)程中音符是不會(huì)響的,當(dāng)輸入結(jié)束后可以控制對(duì)剛才輸入的按鍵對(duì)應(yīng)的音符進(jìn)行播放聲音。剛開(kāi)始是一直對(duì)數(shù)字的存儲(chǔ)個(gè)數(shù)會(huì)多很多,后面才知道但你按下鍵時(shí)程序已經(jīng)運(yùn)行了好多遍了,每次按鍵是當(dāng)然就會(huì)存儲(chǔ)多個(gè)相同的值。改進(jìn)后就一直只能對(duì)最后一次按鍵進(jìn)行存儲(chǔ),前面的被當(dāng)前的值覆蓋,后面設(shè)置了一個(gè)存儲(chǔ)數(shù)據(jù)的數(shù)組進(jìn)行存儲(chǔ),使得功能才能實(shí)現(xiàn)。本次課程設(shè)計(jì),我花了大量的時(shí)間來(lái)做這些功能,但是做完后感覺(jué)功能又特別簡(jiǎn)單,而且做的大部分時(shí)間都是做一些無(wú)用的工作,程序一直不夠簡(jiǎn)單,經(jīng)常用一條很長(zhǎng)的程序來(lái)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的功能,做完過(guò)后發(fā)現(xiàn)可以用簡(jiǎn)單的程序就可以實(shí)現(xiàn),整個(gè)制作過(guò)程中大部分的時(shí)間都花在這樣的工作上,工作效率很低。同時(shí)感覺(jué)到自己對(duì)matlab的編程了解太少,很多基本功能多不了解。完成實(shí)踐后我深深的體會(huì)到了MATLAB功能的強(qiáng)大,它不但可以實(shí)現(xiàn)對(duì)聲音信號(hào)的處理,對(duì)圖像的處理,同時(shí)還可以對(duì)視頻,wav格式歌曲的播放以及還有很多我現(xiàn)在還不知道的很多強(qiáng)大的功能。在實(shí)驗(yàn)過(guò)程中,遇到了很多問(wèn)題。首先是資料的缺乏,沒(méi)能找到老師推薦的《信號(hào)與系統(tǒng)—MATLAB綜合實(shí)驗(yàn)》,所以大部分的參考資料只能上網(wǎng)查找沒(méi)有什么權(quán)威性。還有自己對(duì)matlab的了解本來(lái)就很淺,很多知識(shí)都不懂,經(jīng)常需要問(wèn)老師,同學(xué)或者上網(wǎng)查資料。在設(shè)計(jì)剛開(kāi)始沒(méi)有什么明確的思路導(dǎo)致經(jīng)常改GUI界面,最后實(shí)在無(wú)法改了就重新設(shè)計(jì),思路很不明確,希望在以后的學(xué)習(xí)和工作中能好好利用這次實(shí)踐的經(jīng)驗(yàn),要先想好總體思路,不能到臨時(shí)才改,這樣的話,不僅工作量大,還耗時(shí)多。本次實(shí)踐使我受益匪淺。附錄〔部分程序functiongangqin<s>%演奏音符globalr;globaln;globalff;globalT;globalp;f=440*2^<<s-49>/12>;%各音階的頻率n=0:1/8000:T;%各音階的長(zhǎng)短ifp==1%選用包絡(luò)x=exp<-3*n>;elseifp==2x=exp<-3*n>.*sawtooth<2*pi*50*n>;elseifp==3x=exp<-3*n>.*sin<2*pi*n>;endifr==1%選用單頻還是多頻ff=x.*sin<f*2*pi*n>+0.2*x.*sin<f*4*pi*n>+0.05*x.*sin<f*8*pi*n>;elseff=x.*sin<f*2*pi*n>;endaxes1_CreateFcn<>;%畫圖soundsc<ff>;%播放音符Functionyinxiao_Callback<hObject,eventdata,handles>globalT;g=get<handles.yinxiao,'selectedobject'>;%獲得音效的選中對(duì)象gt=get<g,'tag'>;%把對(duì)象賦給gtswitchgt%確認(rèn)選中的對(duì)象case'duanyin'T=0.3;case'zhongyin'T=1;case'changyin'T=2;EndFunctionbaoluo_Callback<hObject,eventdata,handles>globalT;globaln;globalp;de=get<handles.baol,'selectedobject'>;%獲得包絡(luò)選中的對(duì)象def=get<de,'tag'>;%把選中對(duì)象的tag賦給defswitchdefcase'正弦波'x=0:0.001:1;y1=A*sin<2*f*pi*x+c>;plot<x,y1>;case'三角波’x=0:0.001:1;y2=A*sawtooth<2*pi*f*x+c>;plot<x,y2>;case'方波'x=0:0.001:1;y3=A*square<2*f*pi*x+c>;plot<x,y3>;endfunctionjianpan_KeyPressFcn<hObject,eventdata,handles>s=get<handles.jianpan,'value'>;%獲得按下鍵的值ifs==0%看radiobutton是否按下elseifget<gcf,'CurrentCharacter'>==48gangqin<28>;elseifget<gcf,'CurrentCharacter'>==49gangqin<29>;elseifget<gcf,'CurrentCharacter'>==50gangqin<30>;elseifget<gcf,'CurrentCharacter'>==51gangqin<31>;elseifget<gcf,'CurrentCharacter'>==52gangqin<32>;elseifget<gcf,'CurrentCharacter'>==53gangqin<33>;elseifget<gcf,'CurrentCharacter'>==54gangqin<34>;elseifget<gcf,'CurrentCharacter'>==55gangqin<35>;elseifget<gcf,'CurrentCharacter'>==56gangqin<36>;elseifget<gcf,'CurrentCharacter'>==57gangqin<37>;elseifget<gcf,'CurrentCharacter'>==65gangqin<38>;elseifget<gcf,'CurrentCharacter'>==66gangqin<39>;elseifget<gcf,'CurrentCharacter'>==67gangqin<40>;elseifget<gcf,'CurrentCharacter'>==68gangqin<41>;elseifget<gcf,'CurrentCharacter'>==69gangqin<42>;elseifget<gcf,'CurrentCharacter'>==70gangqin<43>;elseifget<gcf,'CurrentCharacter'>==71gangqin<44>;elseifget<gcf,'CurrentCharacter'>==72gangqin<45>;elseifget<gcf,'CurrentCharacter'>==73gangqin<46>;elseifget<gcf,'CurrentCharacter'>==74gangqin<47>;elseifget<gcf,'CurrentCharacter'>==75gangqin<48>;elseifget<gcf,'CurrentCharacter'>==76gangqin<49>;elseifget<gcf,'CurrentCharacter'>==77gangqin<50>;elseifget<gcf,'CurrentCharacter'>==78gangqin<51>;elseifget<gcf,'CurrentCharacter'>==79gangqin<52>;elseifget<gcf,'CurrentCharacter'>==80gangqin<53>;elseifget<gcf,'CurrentCharacter'>==81gangqin<54>;elseifget<gcf,'CurrentCharacter'>==82gangqin<55>;elseifget<gcf,'CurrentCharacter'>==83gangqin<56>;elseifget<gcf,'CurrentCharacter'>==84gangqin<57>;elseifget<gcf,'CurrentCharacter'>==85gangqin<58>;elseifget<gcf,'CurrentCharacter'>==86gangqin<59>;elseifget<gcf,'CurrentCharacter'>==87gangqin<60>;elseifget<gcf,'CurrentCharacter'>==88gangqin<61>;elseifget<gcf,'CurrentCharacter'>==89gangqin<62>;elseifget<gcf,'CurrentCharacter'>==90gangqin<63>;endfunctionduopin_Callback<hObject,eventdata,handles>globalr;r=get<handles.duopin,'value'>;%多頻的按鈕是否選中ifr==1%選單頻還是多頻ff=x.*sin<f*2*pi*n>+0.2*x.*sin<f*4*pi*n>+0.05*x.*sin<f*8*pi*n>;elseff=x.*sin<f*2*pi*n>;Endfunctionqinpu<a,b>%播放不同延長(zhǎng)音的音符a表示音階的頻率b表示延長(zhǎng)音的長(zhǎng)度globalr;globaln;globalff;f=440*2^<<a-49>/12>;n=0:1/8000:b*0.5;%延長(zhǎng)不同的長(zhǎng)度x=exp<-2*n>;ifr==1%選用單頻還是多頻播放ff=x.*sin<f*2*pi*n>+0.2*x.*sin<f*4*pi*n>+0.05*x.*sin<f*8*pi*n>;elseff=x.*sin<f*2*pi*n>;endaxes1_CreateFcn<>;%畫圖soundsc<ff>;%播放音符functiondakai_Callback<hObject,eventdata,handles>[name,path]=uigetfile<'*.*',''>;%讀取文件file=sprintf<'%s%s',path,name>;de=importdata<file>;%讀取文件的數(shù)據(jù)fork=1:length<de>qinpu<de<k>,de<k+length<de>>>;%按文件數(shù)據(jù)播放音符endfunctionshipin_Callback<hObject,eventdata,handles>%播放視頻程序[name,path]=uigetfile<'*.*',''>;file=[path,name];implay<file>;functionchangge_Callback<hObject,eventdata,handles>globalyinl;[name,path]=uigetfile<'*.*',''>;%打開(kāi)文件file=[path,name];[y,fs,bits]=wavread<file>;%對(duì)打開(kāi)的wav文件進(jìn)行采樣yinl=audiopl

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論