




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、河北經(jīng)貿(mào)大學畢業(yè)論文河北經(jīng)貿(mào)大學畢業(yè)論文基于MATLAB軟件的音樂合成專業(yè)名稱: 電子信息工程 班 級: 201102 學生姓名: 王 雪 指導老師: 章瑞平 完成時間: 2015年5月 摘 要 本設計利用MATLAB軟件,通過MATLAB GUI構建一個具有圖形用戶界面的音樂合成系統(tǒng)。該系統(tǒng)能實現(xiàn)音樂的簡單合成、音樂的降噪處理、音樂的加諧波處理、音樂的升降度處理、音樂的時域和頻域波形圖顯示及利用傅里葉級數(shù)原理合成音樂的操作。本系統(tǒng)應用模塊化的思路進行設計,將系統(tǒng)分為四個模塊,分別為簡單合成及處理音樂的模塊、利用傅里葉變換分析音樂頻譜的模塊、基于傅里葉級數(shù)合成音樂的模塊和音樂字幕動態(tài)顯示的模塊
2、。本論文闡述了整個系統(tǒng)詳細的設計過程,而針對每個模塊的設計都有詳細的理論基礎為依托,包括原理及設計程序,并且有仿真效果的演示。該軟件系統(tǒng)作為教學輔助軟件可以為語音信號處理課程的教學提供一定的幫助,可以讓學生們更好地深入理解信號與系統(tǒng)等主干課程的內(nèi)容,充分發(fā)揮自身的創(chuàng)新能力與實踐能力。該系統(tǒng)可以通過選取不同的算法,對音樂分別進行處理,基本做到抑制噪聲,提高音樂質(zhì)量,有利于更高層次的處理與應用。此外,從整體效果上看,該系統(tǒng)的用戶應用界面友好、便于操作,通過菜單、控件的使用可以方便的選取不同的方法,設置不同的參數(shù)以便于用戶操作使用。系統(tǒng)通過對各種處理效果的演示,也可以讓用戶更直觀地了解簡單音樂處理的
3、幾種方法,并在各種相應處理前后的對比中讓用戶更容易接受與其對應的方法及特點。關鍵詞 音樂合成;MTALAB;GUI;傅里葉變換Abstract The design in this paper uses the MATLAB software to construct a music synthesis system with a graphical user interface by MATLAB GUI.The system can achieve simple music synthesis,the processing of reducing music noise,the treat
4、ment of music with harmonic,the processing of raising and lower octave,displaying waveform in time domain and frequency domain and synthesis of music based on Fourier series.This system takes the idea of modular design,divided into four modules, respectively including the module of music of simple s
5、ynthesis and processing,the module of music spectrum analysis through using the Fourier transform,the module of music synthesis based on Fourier series,the module of displaying music subtitle dynamically.This paper,including the principle and program design and simulation results demonstrate, descri
6、bes the design process of the system in detail.Each module has a detailed theoretical basis for support.As a teaching aid software can provide some help for the speech signal processing course in teaching,which can help students understand the signal and system course and give full play to students
7、innovation ability and practice ability.Through selecting different algorithms,the system can dispose music respectively, suppress noise basically,improve the quality of music and avail to deal with the higher level.In addition,the graphic user interface of the system is friendly and easy to operate
8、. Select different methods and set different parameters for users by using the menu,controls.Through a variety of demonstrations of effects,the system also makes users understand several ways of dealing with music more intuitively and in compare with before and after the all treatments,we can accept
9、 the corresponding methods and characteristics more easily.Keywords Music synthesis; MTALAB;GUI;Fourier transformII目 錄1 緒論11.1 研究背景及意義11.2 研究的主要內(nèi)容12 MATLAB軟件的簡介32.1 MATLAB的發(fā)展史32.2 MATLAB的系統(tǒng)構成43 MATLAB音樂合成的原理53.1 所涉及的樂理知識簡述53.1.1 音調(diào)與唱名53.1.2 音色與諧波53.1.3 十二平均律53.2 傅里葉變換與頻譜分析64 MATLAB音樂合成系統(tǒng)的總體設計74.1 系統(tǒng)
10、的總體設計74.2 GUI界面的設計74.2.1 啟動GUIDE84.2.2 GUIDE設計環(huán)境84.2.3 GUI界面的功能設計95 MATLAB音樂合成系統(tǒng)的設計與實現(xiàn)115.1 簡單合成及處理音樂模塊的設計與實現(xiàn)115.1.1 合成社會主義好115.1.2 加包絡,除噪音125.1.3 音樂升降度處理135.1.4 音樂加諧波處理155.2 用傅里葉變換分析音樂頻譜模塊的設計與實現(xiàn)165.3 基于傅里葉級數(shù)合成的音樂模塊的設計與實現(xiàn)205.4 音樂小星星字幕動態(tài)顯示模塊的設計與實現(xiàn)216 系統(tǒng)的調(diào)試與運行246.1 音樂的播放、暫停的調(diào)試與運行246.2 傅里葉變換分析音樂的調(diào)試與運行2
11、5總 結26參考文獻27 I29基于MATLAB軟件的音樂合成1 緒論1.1 研究背景及意義 如今,信息化、數(shù)字化程度越來越高,語音信號的處理技術作為基于數(shù)字信號處理技術與語音學知識對語音信號進行處理的新興技術被越來越多的高科技產(chǎn)業(yè)廣泛應用,這項技術成為信息科學工程與研究領域的核心技術之一。MATLAB在信號處理與通信領域應用廣泛,是一款數(shù)值計算和編程語言結合的優(yōu)秀計算機軟件。音樂信號合成作為語音信號處理的一部分,屬于MATLAB軟件重要應用領域之一。MATLAB音樂合成系統(tǒng)的設計針對于許多其他的音樂合成處理軟件不易學習、操作不便等問題,利用MATLAB語言編程以及GUI界面設計來實現(xiàn)音樂信號
12、的簡單合成以及各種加工處理,程序更加易懂,操作更加簡便,在各類教學工作中具有很大的實際應用意義。由于音樂信號可以看成是一系列頻率與振幅不同的正弦波疊加并加以不同包絡形成的,所以,可以基于這個特點利用MATLAB軟件分析處理不同音頻信號來進行簡單的音樂合成。該軟件系統(tǒng)作為教學輔助軟件可以為語音信號處理課程的教學提供一定的幫助,可以讓學生們更好地深入理解信號與系統(tǒng)等主干課程的內(nèi)容,充分發(fā)揮自身的創(chuàng)新能力與實踐能力。如今在各高校,MATLAB作為語音信號處理的學習工具已經(jīng)成為學生們必須學習與掌握的軟件。1.2 研究的主要內(nèi)容 本設計運用MATLAB軟件要實現(xiàn)的功能:第一是要利用相關的語音處理函數(shù)進行
13、簡單的音樂合成,對音樂進行降噪、加諧波以及升降度處理;第二是用傅里葉變換分析經(jīng)相應處理后的各音樂頻譜;第三是運用傅里葉級數(shù)的原理來再次合成音樂;第四是實現(xiàn)音樂字幕的動態(tài)顯示。整個過程利用MATLAB GUI圖形應用界面進行顯示,完成基本操作,界面友好,能實現(xiàn)良好的人機交互。 在設計中解決的主要問題: 簡單音樂的合成由于相位不連續(xù)產(chǎn)生高頻分量而使其質(zhì)量不佳的問題可通過包絡修正,消除噪音。 音樂的基波所對應頻率的計算。必須充分了解音樂的節(jié)拍,即每個音調(diào)的持續(xù)時間,減少失真。 在設計GUI界面時的布局、各種參數(shù)設置以及各個模塊演示編程的問題。 本設計使用的是MATLAB2013a軟件,設計所實現(xiàn)的功
14、能都在GUI圖形應用界面體現(xiàn)出來,便于研究與操作。通過本設計讓用戶更直觀地了解簡單音樂處理的幾種方法,并在各種相應處理前后的對比中更容易接受與其對應的方法及特點,學會并掌握 MATLAB信號處理的編程以及MATLAB下GUI的設計。2 MATLAB軟件的簡介 MATLAB(matrix&laboratory)矩陣實驗室,作為一款擁有算法開發(fā)、數(shù)據(jù)分析及數(shù)值計算、創(chuàng)建用戶界面等強大功能的仿真軟件,被美國Math Works公司發(fā)行,將眾多功能合成在一個便于操作的視窗交互化環(huán)境中。在科學研究、工程計算、信號處理、圖像處理等方面得到廣泛應用。而在本設計中用到的是MATLAB2013a時頻域分析、音樂
15、合成及GUI圖形應用界面等信號處理方面的功能。2.1 MATLAB的發(fā)展史 1980年,身為美國New Mexico大學計算機系系主任的Cleve Moler為了讓學生方便地調(diào)用EISPACK和LINPACK,編寫了它們的接口程序,命名為MATLAB。在此之后,國內(nèi)外許多大學將MATLAB作為教學輔助軟件廣泛使用。Cleve Moler和John Little在1984年創(chuàng)建了Math Works并推出了MATLAB DOS版,即第一版,其核心是用C語言編寫。自此之后,MATLAB不斷發(fā)展,功能愈加強大。MATLAB5.x版本于20世紀90年代末期推出,可以處理更多的數(shù)據(jù)結構。2000年,MA
16、TLAB6.0被發(fā)行,其操作界面擁有了程序、歷史信息及變量管理三個窗口。并且替換為FFTW系統(tǒng),使得計算速度更佳。2001年,MATLAB6.1及Simulink4.0問世和2002年,公司推出MATLAB6.5,其功能更加強大。2004年發(fā)行了MATLAB7.0版本,在編程環(huán)境、數(shù)據(jù)可視化、計算和文件I/O等方面的功能進行了改善。隨后幾年,公司陸續(xù)推出了MATLAB7.17.14版本,不斷優(yōu)化性能。近幾年公司推出了MATLAB2012b(8.0版)及MATLAB2013a版本,有了很大改變,最明顯的是其桌面,在主窗口中,工具條取代了菜單和工具欄。重新設計了幫助文檔,在搜索、瀏覽及篩選功能上有
17、進一步的提高。到目前為止,還有MATLAB2014a和MATLAB2014b版本。在本設計中用到的是MATLAB2013a版本,此版本較之前版本添加了許多新函數(shù),功能也更加強大,使用更加方便快捷。2.2 MATLAB的系統(tǒng)構成 MATLAB軟件可以說是由以下五大部分組成,分別是:軟件的開發(fā)環(huán)境、數(shù)學函數(shù)庫、軟件的編程語言、圖形處理系統(tǒng)以及該軟件的應用接口(API)。MATLAB開發(fā)環(huán)境是一個方便用戶使用的集成工作空間,擁有M文件的編程與調(diào)試環(huán)境,許可用戶進行數(shù)據(jù)的輸入與輸出。MATLAB軟件的數(shù)學函數(shù)庫擁有全面的計算算法,可以說從加減法最基本的算法到傅里葉變換等復雜算法都涵括在內(nèi)。所以說,MA
18、TLAB能夠解決很多復雜的數(shù)據(jù)計算與工程設計仿真運算。MATLAB語言的語法特征與C+語言非常相似,是在矩陣與數(shù)組的基礎上進行設計的語言。操作者能夠在命令窗口輸入命令語句后就可執(zhí)行該命令,也能夠先編寫好程序,保存為.M文件后再執(zhí)行程序。MATLAB的圖形處理系統(tǒng)的功能應用主要體現(xiàn)在GUI圖形用戶應用界面,能夠使向量與矩陣完成圖形化顯示,滿足用戶的特殊要求。MATLAB軟件應用程序接口主要完成的功能是能讓MATLAB語言與其他編程語言進行交互,例如在MATLAB中調(diào)用C語言程序等。3 MATLAB音樂合成的原理 在本設計中,通過MATLAB軟件對音樂信號頻率與時長的分析與組合來完成音樂的簡單合成
19、。所以在設計過程中,根據(jù)音調(diào)用頻率來體現(xiàn),節(jié)拍用時長來體現(xiàn)的原理,用MATLAB軟件進行編程來存儲音樂的頻率與時長,通過將正弦波形的不同疊加與包絡設置來仿真實現(xiàn)音樂的音調(diào)與節(jié)奏的變化。3.1 所涉及的樂理知識簡述 要想實現(xiàn)音樂的合成,就要了解合成音樂所需要的相關數(shù)據(jù),也就是音樂的三個特性:音調(diào)、響度、音色。音樂的音調(diào)就是音的高低,需要考慮影響音調(diào)的主要因素即聲波的頻率。音樂的響度是音的強弱,需要考慮影響響度的主要因素即聲波的振動幅度。而音樂音色的變化是由音樂波形中諧波的作用產(chǎn)生的。3.1.1 音調(diào)與唱名在日常生活中,讀音樂曲譜時發(fā)出的1( do)、2( re)、3(mi)、4(fa).這些就稱
20、作為唱名。這些唱名分別代表著相應的基波頻率。但是只有當確定了音樂的音調(diào)之后才能確切的知道各個唱名所真正代表的基波頻率值。例如樂譜為1=C,代表著音調(diào)為C調(diào)則“1( do)”的基波頻率是261.6Hz,若樂譜為1=E則“1( do)”頻率是239.6Hz,樂譜為1=G則“1( do)”的頻率是392.1Hz,“3(mi)”的頻率是493.9Hz。3.1.2 音色與諧波 音色的變化是由音樂波形中諧波的作用產(chǎn)生的。在音樂的專業(yè)中所指的“泛音”指的就是諧波,在得知音調(diào)之后,只能確定音樂信號的基波頻率值,但是諧波頻率無法確定。不同的樂器會發(fā)出不同的音色,這是由于不同的諧波成分和頻譜結構導致的。并且不同的
21、樂器所發(fā)出的的音樂包絡波形是不同的,為了便于用程序來表示波形包絡,通常把音樂的復雜包絡函數(shù)近似直線化,所以音樂波形的包絡通常都是折線型。3.1.3 十二平均律 十二平均律,在音樂領域中作為一種音樂定律的方法,指將音樂的八度按照頻率等比例地分成十二份。由于“五度相生律”和“十二平均律”發(fā)音非常相似而且十二平均律能夠解決轉(zhuǎn)調(diào)問題,所以,它被廣泛應用在鍵盤樂器與交響樂隊中。根據(jù)國際標準音的規(guī)定,相鄰的半音之間的頻率之比定為2(1/12)1.059,作為最常見的應用十二平均律而制成的樂器就是鋼琴,鋼琴的琴鍵a1的頻率規(guī)定為440Hz,那么就可以根據(jù)比值得出鋼琴其他的琴鍵音對應的頻率。例如與a1左邊相鄰
22、#g1頻率是440/1.059=415.03Hz,同理,與a1右邊相鄰的半音#a1的頻率是466.16Hz,也可以算出不同音調(diào)下“1(do)”的對應的基波頻率,即C:261.63Hz ,F(xiàn):349.23Hz和G:392Hz 等 。3.2 傅里葉變換與頻譜分析合成一段簡單的音樂,需要綜合考慮音樂的三要素,也就是必須知道該段音樂的基波與諧波頻率成分以及包絡的形狀特征。為了便于分析上述特征,就要進行信號的頻譜分析,也就是利用傅里葉變化,得出該音樂信號的頻譜結構,來進行其頻譜特征的提取。有限長序列的離散傅氏變換(DFT),在信號處理的理論上有重要意義,它將頻域也離散化,是現(xiàn)代信號頻譜分析主要方法。N點
23、DFT實質(zhì)上是其頻譜的離散頻域采樣,對頻率具有選擇性(k=2k/N),在這些點上反映了信號的頻譜。 但DFT計算量大,處理復雜,所以引用了快速傅里葉變化(FFT)算法最簡單、編程最容易的是基2FFT,還有基4FFT、基8FFT等快速算法。根據(jù)采樣定律,F(xiàn)FT變換相當于對有限長序列進行頻域采樣,而不丟失任何信息。所以只要時域序列的長度足夠長,采樣的點數(shù)足夠多,頻域采樣也可以很好地反映信號的頻譜趨勢,所以在設計中可以用FFT進行語音信號的頻譜分析。 4 MATLAB音樂合成系統(tǒng)的總體設計4.1 系統(tǒng)的總體設計 MATLAB音樂合成系統(tǒng),能實現(xiàn)音樂的簡單合成、音樂的降噪處理、音樂的加諧波處理、音樂的
24、升八度處理、音樂的降八度處理、音樂時域與頻域波形顯示、利用傅里葉級數(shù)合成音樂以及音樂字幕的動態(tài)顯示的操作。該系統(tǒng)的全部功能都通過GUI圖形用戶界面顯示出來,并且使用模塊化的設計方法,將系統(tǒng)分為四個模塊,如圖4-1所示?;贛ATLAB 軟件的音樂合成系統(tǒng)簡單合成及處理音樂的模塊音樂的傅里葉頻域分析模塊傅里葉級數(shù)合成音樂模塊音樂的字幕動態(tài)顯示模塊圖4-1 系統(tǒng)總體設計結構圖4.2 GUI界面的設計GUIDE(Graphic User Interface Design Environment)是專門設計圖形用戶界面GUI的集成開發(fā)環(huán)境。GUI界面一般包括窗口、菜單、按鈕和文本框等各種圖形對象。在設
25、計GUI時,可以通過鼠標操作就能產(chǎn)生各種GUI控件,這樣讓用戶對圖形界面的生成與管理變得直接、方便,能讓用戶定制用戶與MATLAB2013a的交互方式??梢孕纬梢环N除命令窗口之外的與MATLAB2013a的交互方式。4.2.1 啟動GUIDE在MATLAB2013a中Command窗口里面輸入guide 按回車鍵,或者從菜單里面均可進入GUIDE。MATLAB2013a為GUI圖形應用界面的設計準備了以下四種模板,如圖4-2所示。圖4-2 GUI設計模板選擇對話框在GUI設計模板中選中第一個模板,新建并且保存為yinyuehecheng后,MATLAB2013a會自動產(chǎn)生相應的.fig文件和.
26、m文件。4.2.2 GUIDE設計環(huán)境 在進入GUI界面之后,下一步就是進行界面設計編輯。在GUIDE設計環(huán)境中用到的事Layout編輯器,操作者可以通過鼠標移動模板左邊的控件到中間布局區(qū)域,如按鈕、坐標軸、文本框等。接下來,通過屬性編輯器和對齊編輯器對各控件設置相關屬性和進行界面布置,以完善界面功能。本設計總體布局如下圖4-3所示。圖4-3 GUI設計面板布局4.2.3 GUI界面的功能設計 設計好GUI界面的整體布局之后,接下來就該利用程序代碼的編寫進行各個按鈕功能的設置。找到上述的GUI 的M文件yinyuehecheng.m,打開之后,會看到里面已經(jīng)存在許多自動生成的程序代碼,只需要找
27、到各個按鈕及文本編輯框?qū)暮瘮?shù)。在對應的函數(shù)名下輸入要實現(xiàn)相應功能所需要的程序。例如在yinyuehecheng.m文件中找到函數(shù):function button1_Callback在這個函數(shù)名稱下面寫入具有簡單音樂合成功能的程序。 global flag global west fs f time f_flag; flag = 1; f_flag=0; fs=8000;%該段音樂抽樣頻率 F=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.88; %各個唱名對應的頻率 time=fs*1/4,1/4,1/4,1/4
28、,3/4,1/4,1/4,1/4,1/4,1/4,1;%各個唱名的持續(xù)時間值 N=length(time); %這段音樂的總抽樣點數(shù) west=zeros(1,N); %用west向量來儲存抽樣點 n=1; for a=1:N %利用循環(huán)產(chǎn)生抽樣數(shù)據(jù),a表示樂音編號 t=1/fs:1/fs:time(a)/fs; %產(chǎn)生第a個樂音的抽樣點 west(n:n+time(a)-1)=sin(2*pi*f(a)*t); %抽樣點對應的幅值 n=n+time(a); End然后定位相應的簡單音樂合成按鈕的坐標程序。 t1=linspace(0,length(west)/fs,length(west);
29、 set(handles.axes1,HandleVisibility,ON);%開始使用坐標,便于操作 axes(handles.axes1);%使用圖像,操作在坐標1 plot(t1,west);axis(-0.2 4.2 -1.2 1.2); xlabel(t/s);ylabel(幅度); 這樣相應設置好各個功能按鈕所對應的程序,就算基本完成了GUI界面的設置。5 MATLAB音樂合成系統(tǒng)的設計與實現(xiàn)5.1 簡單合成及處理音樂模塊的設計與實現(xiàn)通過給定的音樂簡譜和掌握的樂理知識與頻譜分析來進行簡單音樂的合成。并且在此基礎上對音樂進行相應的處理,來比較經(jīng)不同處理后的音樂播放效果。5.1.1
30、合成社會主義好 依據(jù)音樂社會主義好一小段的音樂簡譜和國際規(guī)定的十二平均律的計算方法對應地得到此小段音樂中各個唱名的頻率,利用MATLAB軟件來編程仿真實現(xiàn)音樂的簡單合成。音樂簡譜如圖5-1所示。圖5-1 音樂簡譜由圖5-1可知社會主義好的曲調(diào)定為G,也就是說1=G,那么可以知道其對應的頻率為329.1Hz,其中 6是低音的意思,即對應G調(diào)“6”的頻率659.26Hz,取其頻率的一半,即659.26/2=329.63Hz。根據(jù)“十二平均律”計算得到各個唱名對應的頻率如下表5-1。表5-1 唱名對應的頻率表唱名3335321 6123頻率493.88493.88493.88587.33493.88
31、440392329.63392440493.88得到該小段音樂各個唱名對應的頻率之后,還有很重要的一個數(shù)據(jù)需要得到,那就是根據(jù)樂理知識推算出各個唱名對應的持續(xù)時間。由圖5-1中1=G2/4可以知道各唱名的持續(xù)時間如下表5-2所示。表5-2 唱名持續(xù)時間表唱名33353216123時間0.250.250.250.250.750.250.250.250.250.251 依據(jù)上述得到的數(shù)據(jù)可以編寫如下程序。 function button1_Callback(hObject, eventdata, handles)%簡單音樂的合成 global flag global west fs f time
32、f_flag; f lag = 1; f_flag=0; fs=8000; %該段音樂抽樣的頻率 f=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.88; %各個唱名所對應的頻率值 time=fs*1/4,1/4,1/4,1/4,3/4,1/4,1/4,1/4,1/4,1/4,1; %各個唱名的持續(xù)時間 N=length(time); %這段音樂的總抽樣點數(shù) west=zeros(1,N); %用west向量來儲存抽樣點 n=1; for a=1:N %利用循環(huán)產(chǎn)生抽樣數(shù)據(jù),a表示樂音編號 t=1/fs:1/fs:t
33、ime(a)/fs; %產(chǎn)生第a個樂音的抽樣點 west(n:n+time(a)-1)=sin(2*pi*f(a)*t); %抽樣點對應的幅值 n=n+time(a); end5.1.2 加包絡,除噪音 在MATLAB中,播放出了社會主義好的第一小節(jié),但可聽出聲音不是很好,只能聽出具有社會主義好的調(diào)子而已。會聽到有“啪”的雜聲,聲音比較刺耳,下面通過加上外形相似的包絡來消噪音,使不同音的連接處的響度為零即可。編寫如下程序。 function button4_Callback(hObject, eventdata, handles)%音樂的降噪global flag global west fs
34、 f time f_flag; if flag =1 f_flag=0; N=length(time); %這段音樂的總抽樣點數(shù) west=zeros(1,N); %用west向量來儲存抽樣點 n=1; for a=1:N %利用循環(huán)產(chǎn)生抽樣數(shù)據(jù),a表示樂音編號 t=1/fs:1/fs:time(a)/fs; %產(chǎn)生第a個樂音的抽樣點 G=zeros(1,time(a); %G為存儲包絡數(shù)據(jù)的向量 G(1:time(a)=exp(1:(-1/time(a):1/8000);%產(chǎn)生包絡點 west(n:n+time(a)-1)=sin(2*pi*f(a)*t).*G(1:time(a);n=n+
35、time(a); end 加包絡后的仿真時域波形如圖5-2所示。 圖5-2 音樂降噪時域圖形 由圖可見,通過加包絡,使每個音的連接處的幅度有所減小,使音樂聽起來更加連續(xù),悅耳。5.1.3 音樂升降度處理升高一個八度即每個唱名的頻率都提高一倍,變?yōu)樵瓉淼?倍;降低一個八度即每個唱名的頻率都減小一倍,變?yōu)樵瓉淼?/2。因此最簡單的辦法是將存儲該段音樂的各個樂音頻率的向量中每個元素改變?yōu)樵瓉淼?或1/2倍即可。編寫程序如下。function button6_Callback(hObject, eventdata, handles)%音樂升八度global flag %定義全局變量global wes
36、t fs time f_flag;if flag =1 f_flag=1;f=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.88*2; %頻率升高N=length(time); %這段音樂的總抽樣點數(shù)west=zeros(1,N); %用west向量來儲存抽樣點n=1;for a=1:N %利用循環(huán)產(chǎn)生抽樣數(shù)據(jù),a表示樂音編號t=1/fs:1/fs:(time(a)/fs; %產(chǎn)生第a個樂音的抽樣點P=zeros(1,time(a); %P為存儲包絡數(shù)據(jù)的向量L=(time(a)*0 1/5 333/1000 333
37、/500 1;%包絡線端點對應的橫坐標T=0.2 1.5 1 1 0.2; %包絡線端點對應的縱坐標s=1;b=1:1:time(a); %產(chǎn)生包絡線抽樣點for k=1:4 P(s:L(k+1)-1)=(T(k+1)-T(k)/(L(k+1)-L(k)*(b(s:L(k+1)-1)-L(k+1)*ones(1,L(k+1) -s)+T(k+1)*ones(1,L(k+1)-s);%包絡線直線方程通式s=L(k+1); endwest(n:n+time(a)-1)=sin(2*pi*f(a)*t).*P(1:time(a);n=n+time(a);end將音樂升八度之后的仿真時域波形如下圖5-
38、3所示。圖5-3 音樂升八度時域圖同樣地,將音樂進行降八度處理只需改變上述程序中的一條語句即可。即將f=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.88*2改為:f=493.88 493.88 493.88 587.33 493.88 440 392 329.63 392 440 493.88/2。 5.1.4 音樂加諧波處理 在5.1.1的音樂中加上二、三、四次諧波,基波幅度為1,高次諧波幅度分別為0.2、0.3、0.1。主要的功能程序如下。 function button5_Callback(hObject,
39、eventdata, handles)%音樂加諧波 m=1 0.3 0.2; %波形幅值矩陣 ss=zeros(1,length(t); for i=1:length(m) ss=ss+m(i)*sin(2*i*pi*f(a)*t); %加諧波 end west(n:n+time(a)-1)=ss.*P(1:time(a); n=n+time(a); end 加入諧波之后的仿真時域波形如圖5-5。圖5-5 音樂加諧波的時域圖形 由圖可見,每個音的連接處同樣是衰減到一較小值而不是0,同時音樂聽起來更加真是實,效果更好。5.2 用傅里葉變換分析音樂頻譜模塊的設計與實現(xiàn)為了更加清晰地了解經(jīng)過不同處理
40、的音樂所發(fā)生的變化,就要研究音樂的基波與諧波,即每種音樂的頻譜圖,可以對音樂時域波形進行傅里葉變換,得到的幅值譜,在頻譜圖上的第一個突出的波峰對應的頻率即為基頻。編寫了如下程序。function button10_Callback(hObject, eventdata, handles)%傅里葉分析global flag global west fs f f_flag; %定義全局變量if flag=1if f_flag=1 f1=f*2;else if f_flag=2 f1=f/2;else if f_flag=0 f1=f;end %所用到的抽樣頻率為8000.NFFT = 2nextp
41、ow2(length(west); Y = fft(west,NFFT)*2/length(west);g = fs/2*linspace(0,1,NFFT/2+1);set(handles.axes2,HandleVisibility,ON);%開始使用坐標,更便于操作 axes(handles.axes2);%開始用圖像,在坐標2處進行操作plot(g,2*abs(Y(1:NFFT/2+1);axis(-0.1 max(f1)+50 -0.1 max(2*abs(Y(1:NFFT/2+1)+0.2);xlabel(f/Hz);ylabel(幅度);else errordlg(請您先點擊簡單
42、音樂合成按鈕!,溫馨提示);end經(jīng)過分別處理的音樂通過調(diào)用該段程序就會分別顯示出相對應的頻譜圖,以便從視覺上更加直觀地了解各個音樂的不同之處,在各種相應處理前后的對比中更容易讓用戶接受與其對應的方法及特點。音樂社會主義好簡單合成后的仿真頻譜圖形如下圖5-6所示。圖5-6 簡單音樂合成頻譜圖由圖5-6可知,該段音樂的基波頻率為329.1Hz,它的幅度值是0.125,以此類推,它對應的各個高次諧波幅度值如下表5-3所示。表5-3 高次諧波幅值表諧波234567幅度0.250.2560.7550.0250.1250.01 圖5-7為音樂加諧波之后的仿真頻譜圖。圖5-7 音樂加諧波頻譜圖 該圖與圖5
43、-6所示的簡單音樂合成有明顯的區(qū)別,波形邊緣更加平緩,音樂聽起來更加清晰,效果更好。圖5-8與圖5-9分別為音樂升八度和降八度處理的仿真頻譜圖。圖5-8 音樂升八度頻譜圖 圖5-9 音樂降八度處理頻譜圖由上述圖5-8與圖5-9所示頻譜圖可以清楚地看到,升八度處理是在簡單音樂合成圖5-6的基礎上頻率增加了一倍,并且各個幅值有所升高,降八度處理是在圖5-6的基礎上頻率降低了一倍,并且幅值有輕微的下降。利用傅里葉級數(shù)的原理合成的音樂的仿真頻譜圖形,如圖5-10所示。 圖5-10 基于傅里葉級數(shù)合成的音樂頻譜 由上圖5-10與5-6頻譜圖的比較,可以直觀的看出,利用傅里葉級數(shù)分析原理合成的音樂頻譜曲線
44、愈加光滑,噪聲干擾少,只是幅值很小,質(zhì)量較簡單音樂合成的高。5.3 基于傅里葉級數(shù)合成的音樂模塊的設計與實現(xiàn)運用傅里葉級數(shù)變換的原理來再次合成音樂社會主義好的第一小節(jié),只需將5.1.4中音樂加諧波的程序幅度修改一下。將 m=1 0.3 0.2; %波形幅值矩陣改為:m=0.125 0.25 0.256 0.755 0.025 0.125 0.01; %波形幅值矩陣運行后可以聽出聲音更加真實了。仿真時域波形如圖5-11。圖5-11 基于傅里葉級數(shù)合成音樂的時域波形利用傅里葉級數(shù)合成音樂的部分程序。function button11_Callback(hObject, eventdata, han
45、dles)%傅里葉級數(shù)合成的音樂 % m=1 0.3 0.2; %波形幅值矩陣m=0.125 0.25 0.256 0.755 0.025 0.125 0.01*1;ss=zeros(1,length(t);for i=1:length(m)ss=ss+m(i)*sin(2*i*pi*f(a)*t); %加諧波endwest(n:n+time(a)-1)=ss.*P(1:time(a); %給第a個樂音加上包絡n=n+time(a);endt1=linspace(0,length(west)/fs,length(west);set(handles.axes1,HandleVisibility,
46、ON);%開始使用坐標,便于操作 axes(handles.axes1);%操作在坐標1 plot(t1,west);axis(-0.2 4.2 -1.7 1.7);xlabel(t/s);ylabel(幅度);5.4 音樂小星星字幕動態(tài)顯示模塊的設計與實現(xiàn) 運用前面的簡單音樂合成的相關原理及方法來合成音樂小星星并且實現(xiàn)小星星歌詞字幕的動態(tài)顯示。小星星的音樂簡譜如圖5-12所示。圖5-12 小星星音樂簡譜用鋼琴的標準音A4=440Hz,根據(jù)國際上規(guī)定的十二平均律,相鄰的半音之間頻率之比是1.059463,而且由圖可知樂譜的基調(diào)是1=C,即該段音樂的基準頻率設置為Pt=44100Hz。在編寫程序
47、的過程中運用十二平均律的計算方法即:scale12=A4/2(9/12)*2.(0:11)/12)。由上圖5-12的音樂簡譜可知,此音樂為七音符,程序中設置為map=1 3 5 6 8 10 12。 其中的樂譜寫為:score=1 1 5 5 6 6 5,4 4 3 3 2 2 1,5 5 4 4 3 3 2,5 5 4 4 3 3 2,1 1 5 5 6 6 5,4 4 3 3 2 2 1。音樂的每個唱名持續(xù)的時間設置為rhythm=repmat(1 1 1 1 1 1 2,1,6)。 針對于音樂小星星的歌詞在GUI界面實現(xiàn)邊播放邊顯示,用到的是GUI中的edit1文本框,應用語句set(h
48、andles.edit1,string,變量名)來達到顯示的目的,其中歌詞的文字用矩陣lyric=一閃一閃亮晶晶滿天都是小星星掛在天上放光明它是我們的小眼睛一閃一閃亮晶晶滿天都是小星星來完成編輯。 其中該段音樂合成及頻譜顯示的程序如下。y = ;for i=1:length(score) %length(score) 為score的長度為7*6=42y =y sin(1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i);%音樂合成endt = linspace(0,length(y)/pt,length(y);%時域波形在界面坐標顯示set(handles.
49、axes1,HandleVisibility,ON);%開始啟動坐標,便于操作 axes(handles.axes1);%開始圖像的使用,基本操作在坐標1 plot(t(1:pt/10),y(1:pt/10);axis(-0.01 0.11 -1.2 1.2);xlabel(t/s);ylabel(幅度); NFFT = 2nextpow2(length(y);%傅里葉頻譜分析 Y = fft(y,NFFT)*2/length(y);g = pt/2*linspace(0,1,NFFT/2+1);set(handles.axes2,HandleVisibility,ON);%開始啟動坐標,便于
50、操作 axes(handles.axes2);%開始使用圖像,操作在坐標2plot(g,2*abs(Y(1:NFFT/2+1);axis(-0.1 550 -0.1 max(2*abs(Y(1:NFFT/2+1)+0.2);xlabel(f/Hz);ylabel(幅度);str = ; for i=1:length(score) if mod(i,7)=0 s=sprintf(%1c,lyric(i); str=strcat(str,s); str=str,10;set(handles.edit1,String,str); pause(0); wavplay(sin(1:rhythm(i)*p
51、0)/pt*2*pi*scale12(map(score(i),pt); else wavplay(sin(1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i),pt); s = sprintf(%1c,lyric(i); str=strcat(str,s); set(handles.edit1,String,str) pause(0);End圖5-13為音樂小星星在GUI界面的字幕顯示。圖5-13 小星星的字幕顯示圖5-13中的字幕顯示在GUI界面中實現(xiàn)的是邊播放邊顯示。圖5-14是音樂小星星的時域與頻域仿真實現(xiàn)圖。圖5-14 小星星時域與頻域圖形6 系統(tǒng)
52、的調(diào)試與運行 本設計利用MATLAB軟件,通過MATLAB GUI構建一個具有圖形用戶界面的音樂合成系統(tǒng),界面友好、操作方便。該系統(tǒng)成功地實現(xiàn)了音樂的簡單合成、音樂的降噪處理、音樂的加諧波處理、音樂的升降度處理、音樂的時域和頻域波形顯示分析及基于傅里葉級數(shù)分析合成的音樂的操作。但這些操作并不是輕松實現(xiàn)的,在編程與設計過程中,各個模塊也是經(jīng)過驗證與調(diào)試才達到如今的效果。6.1 音樂的播放、暫停的調(diào)試與運行 在設計音樂的播放與暫停這個功能時,一開始是用MATLAB中的sound函數(shù),將向量轉(zhuǎn)換成聲音,進行音樂的播放,但是它的不足之處是在播放的過程中不能中途暫停,也就是暫停的功能不能體現(xiàn)出來,因此,
53、將sound函數(shù)的語句sound(west,8000)替換,分別有播放、暫停、繼續(xù)播放,實現(xiàn)了音樂的暫停與播放功能。編寫程序如下。function button8_Callback(hObject, eventdata, handles)%音樂的播放global flag global west fs p;if flag=1p=audio player(west,fs); %將向量轉(zhuǎn)換成聲音play(p); %播放音樂endfunction button9_Callback(hObject, eventdata, handles)%音樂的暫停global p flag;if flag=1pause(p);%音樂的暫停endfunction button12_Callback(hObject, eventdata, handles)%音樂的繼續(xù)播放global p;if flag =
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年熱塑性聚氨酯彈性體合作協(xié)議書
- 酒店服務質(zhì)量提升培訓方案
- 網(wǎng)絡安全技術及數(shù)據(jù)安全協(xié)議書
- 海外電商運營合作協(xié)議
- 農(nóng)民家庭農(nóng)場物資采購合同
- 男女離婚合同書男方承擔撫養(yǎng)費
- 特別聲明出生日期及工作證明書(5篇)
- 農(nóng)業(yè)小區(qū)農(nóng)業(yè)生產(chǎn)經(jīng)營協(xié)議
- 畜牧業(yè)生物技術引進合同
- 醫(yī)療健康行業(yè)工作履歷證明書(6篇)
- 公路路基施工規(guī)范
- 物質(zhì)安全數(shù)據(jù)表(MSDS)(車用尿素溶液)
- 華北電力大學ppt模板
- 清朝治理新疆地區(qū)系統(tǒng)性治理課件(16ppt+視頻)2022年新疆地方史讀本(中學版)
- 旅游資源分類調(diào)查評價表 2017版
- 《我的夢-中國夢》主題班會課件
- 超聲波加工以及機床設計機械設計論文
- 綜合教學樓建筑結構設計
- 員工分紅合作協(xié)議書54559
- 國家自然科學基金項目評審打分表.xls
- 公開課評分表
評論
0/150
提交評論