基于MATLAB軟件的音樂合成畢業(yè)論文_第1頁
基于MATLAB軟件的音樂合成畢業(yè)論文_第2頁
基于MATLAB軟件的音樂合成畢業(yè)論文_第3頁
基于MATLAB軟件的音樂合成畢業(yè)論文_第4頁
基于MATLAB軟件的音樂合成畢業(yè)論文_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、河北經(jīng)貿(mào)大學畢業(yè)論文河北經(jīng)貿(mào)大學畢業(yè)論文基于MATLAB軟件的音樂合成摘 要 本設(shè)計利用MATLAB軟件,通過MATLAB GUI構(gòu)建一個具有圖形用戶界面的音樂合成系統(tǒng)。該系統(tǒng)能實現(xiàn)音樂的簡單合成、音樂的降噪處理、音樂的加諧波處理、音樂的升降度處理、音樂的時域和頻域波形圖顯示及利用傅里葉級數(shù)原理合成音樂的操作。本系統(tǒng)應(yīng)用模塊化的思路進行設(shè)計,將系統(tǒng)分為四個模塊,分別為簡單合成及處理音樂的模塊、利用傅里葉變換分析音樂頻譜的模塊、基于傅里葉級數(shù)合成音樂的模塊和音樂字幕動態(tài)顯示的模塊。本論文闡述了整個系統(tǒng)詳細的設(shè)計過程,而針對每個模塊的設(shè)計都有詳細的理論基礎(chǔ)為依托,包括原理及設(shè)計程序,并且有仿真效果

2、的演示。該軟件系統(tǒng)作為教學輔助軟件可以為語音信號處理課程的教學提供一定的幫助,可以讓學生們更好地深入理解信號與系統(tǒng)等主干課程的內(nèi)容,充分發(fā)揮自身的創(chuàng)新能力與實踐能力。該系統(tǒng)可以通過選取不同的算法,對音樂分別進行處理,基本做到抑制噪聲,提高音樂質(zhì)量,有利于更高層次的處理與應(yīng)用。此外,從整體效果上看,該系統(tǒng)的用戶應(yīng)用界面友好、便于操作,通過菜單、控件的使用可以方便的選取不同的方法,設(shè)置不同的參數(shù)以便于用戶操作使用。系統(tǒng)通過對各種處理效果的演示,也可以讓用戶更直觀地了解簡單音樂處理的幾種方法,并在各種相應(yīng)處理前后的對比中讓用戶更容易接受與其對應(yīng)的方法及特點。關(guān)鍵詞 音樂合成;MTALAB;GUI;傅

3、里葉變換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 treatment of music with harmonic,the processing of raising and l

4、ower 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 synthesis and processing,the module of music spectrum analys

5、is 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, describes the design process of the system in detail.Each module

6、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 innovation ability and practice ability.Through selecting d

7、ifferent 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. Select different methods and set different parameters for

8、 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 the corresponding methods and characteristics more easily.

9、Keywords Music synthesis; MTALAB;GUI;Fourier transformIII目 錄1 緒論11.1 研究背景及意義11.2 研究的主要內(nèi)容12 MATLAB軟件的簡介32.1 MATLAB的發(fā)展史32.2 MATLAB的系統(tǒng)構(gòu)成43 MATLAB音樂合成的原理53.1 所涉及的樂理知識簡述53.1.1 音調(diào)與唱名53.1.2 音色與諧波53.1.3 十二平均律53.2 傅里葉變換與頻譜分析64 MATLAB音樂合成系統(tǒng)的總體設(shè)計74.1 系統(tǒng)的總體設(shè)計74.2 GUI界面的設(shè)計74.2.1 啟動GUIDE84.2.2 GUIDE設(shè)計環(huán)境84.2.3 GUI

10、界面的功能設(shè)計95 MATLAB音樂合成系統(tǒng)的設(shè)計與實現(xiàn)115.1 簡單合成及處理音樂模塊的設(shè)計與實現(xiàn)115.1.1 合成社會主義好115.1.2 加包絡(luò),除噪音125.1.3 音樂升降度處理135.1.4 音樂加諧波處理155.2 用傅里葉變換分析音樂頻譜模塊的設(shè)計與實現(xiàn)165.3 基于傅里葉級數(shù)合成的音樂模塊的設(shè)計與實現(xiàn)205.4 音樂小星星字幕動態(tài)顯示模塊的設(shè)計與實現(xiàn)216 系統(tǒng)的調(diào)試與運行246.1 音樂的播放、暫停的調(diào)試與運行246.2 傅里葉變換分析音樂的調(diào)試與運行25總 結(jié)26參考文獻27 II30基于MATLAB軟件的音樂合成1 緒論1.1 研究背景及意義 如今,信息化、數(shù)字化

11、程度越來越高,語音信號的處理技術(shù)作為基于數(shù)字信號處理技術(shù)與語音學知識對語音信號進行處理的新興技術(shù)被越來越多的高科技產(chǎn)業(yè)廣泛應(yīng)用,這項技術(shù)成為信息科學工程與研究領(lǐng)域的核心技術(shù)之一。MATLAB在信號處理與通信領(lǐng)域應(yīng)用廣泛,是一款數(shù)值計算和編程語言結(jié)合的優(yōu)秀計算機軟件。音樂信號合成作為語音信號處理的一部分,屬于MATLAB軟件重要應(yīng)用領(lǐng)域之一。MATLAB音樂合成系統(tǒng)的設(shè)計針對于許多其他的音樂合成處理軟件不易學習、操作不便等問題,利用MATLAB語言編程以及GUI界面設(shè)計來實現(xiàn)音樂信號的簡單合成以及各種加工處理,程序更加易懂,操作更加簡便,在各類教學工作中具有很大的實際應(yīng)用意義。由于音樂信號可以看

12、成是一系列頻率與振幅不同的正弦波疊加并加以不同包絡(luò)形成的,所以,可以基于這個特點利用MATLAB軟件分析處理不同音頻信號來進行簡單的音樂合成。該軟件系統(tǒng)作為教學輔助軟件可以為語音信號處理課程的教學提供一定的幫助,可以讓學生們更好地深入理解信號與系統(tǒng)等主干課程的內(nèi)容,充分發(fā)揮自身的創(chuàng)新能力與實踐能力。如今在各高校,MATLAB作為語音信號處理的學習工具已經(jīng)成為學生們必須學習與掌握的軟件。1.2 研究的主要內(nèi)容 本設(shè)計運用MATLAB軟件要實現(xiàn)的功能:第一是要利用相關(guān)的語音處理函數(shù)進行簡單的音樂合成,對音樂進行降噪、加諧波以及升降度處理;第二是用傅里葉變換分析經(jīng)相應(yīng)處理后的各音樂頻譜;第三是運用傅

13、里葉級數(shù)的原理來再次合成音樂;第四是實現(xiàn)音樂字幕的動態(tài)顯示。整個過程利用MATLAB GUI圖形應(yīng)用界面進行顯示,完成基本操作,界面友好,能實現(xiàn)良好的人機交互。 在設(shè)計中解決的主要問題: 簡單音樂的合成由于相位不連續(xù)產(chǎn)生高頻分量而使其質(zhì)量不佳的問題可通過包絡(luò)修正,消除噪音。 音樂的基波所對應(yīng)頻率的計算。必須充分了解音樂的節(jié)拍,即每個音調(diào)的持續(xù)時間,減少失真。 在設(shè)計GUI界面時的布局、各種參數(shù)設(shè)置以及各個模塊演示編程的問題。 本設(shè)計使用的是MATLAB2013a軟件,設(shè)計所實現(xiàn)的功能都在GUI圖形應(yīng)用界面體現(xiàn)出來,便于研究與操作。通過本設(shè)計讓用戶更直觀地了解簡單音樂處理的幾種方法,并在各種相應(yīng)

14、處理前后的對比中更容易接受與其對應(yīng)的方法及特點,學會并掌握 MATLAB信號處理的編程以及MATLAB下GUI的設(shè)計。2 MATLAB軟件的簡介 MATLAB(matrix&laboratory)矩陣實驗室,作為一款擁有算法開發(fā)、數(shù)據(jù)分析及數(shù)值計算、創(chuàng)建用戶界面等強大功能的仿真軟件,被美國Math Works公司發(fā)行,將眾多功能合成在一個便于操作的視窗交互化環(huán)境中。在科學研究、工程計算、信號處理、圖像處理等方面得到廣泛應(yīng)用。而在本設(shè)計中用到的是MATLAB2013a時頻域分析、音樂合成及GUI圖形應(yīng)用界面等信號處理方面的功能。2.1 MATLAB的發(fā)展史 1980年,身為美國New M

15、exico大學計算機系系主任的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ù)結(jié)構(gòu)。2000年,MATLAB6.0被發(fā)行,其操作界面擁有了程序、歷史信息及變量管理三個窗口。并且替換為FFTW系統(tǒng),使得計算速

16、度更佳。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版本,有了很大改變,最明顯的是其桌面,在主窗口中,工具條取代了菜單和工具欄。重新設(shè)計了幫助文檔,在搜索、瀏覽及篩選功能上有進一步的提高。到目前為止,還有MATLAB2014a和MATLAB2014b版本。在本設(shè)計中用到的是MAT

17、LAB2013a版本,此版本較之前版本添加了許多新函數(shù),功能也更加強大,使用更加方便快捷。2.2 MATLAB的系統(tǒng)構(gòu)成 MATLAB軟件可以說是由以下五大部分組成,分別是:軟件的開發(fā)環(huán)境、數(shù)學函數(shù)庫、軟件的編程語言、圖形處理系統(tǒng)以及該軟件的應(yīng)用接口(API)。MATLAB開發(fā)環(huán)境是一個方便用戶使用的集成工作空間,擁有M文件的編程與調(diào)試環(huán)境,許可用戶進行數(shù)據(jù)的輸入與輸出。MATLAB軟件的數(shù)學函數(shù)庫擁有全面的計算算法,可以說從加減法最基本的算法到傅里葉變換等復(fù)雜算法都涵括在內(nèi)。所以說,MATLAB能夠解決很多復(fù)雜的數(shù)據(jù)計算與工程設(shè)計仿真運算。MATLAB語言的語法特征與C+語言非常相似,是在矩

18、陣與數(shù)組的基礎(chǔ)上進行設(shè)計的語言。操作者能夠在命令窗口輸入命令語句后就可執(zhí)行該命令,也能夠先編寫好程序,保存為.M文件后再執(zhí)行程序。MATLAB的圖形處理系統(tǒng)的功能應(yīng)用主要體現(xiàn)在GUI圖形用戶應(yīng)用界面,能夠使向量與矩陣完成圖形化顯示,滿足用戶的特殊要求。MATLAB軟件應(yīng)用程序接口主要完成的功能是能讓MATLAB語言與其他編程語言進行交互,例如在MATLAB中調(diào)用C語言程序等。3 MATLAB音樂合成的原理 在本設(shè)計中,通過MATLAB軟件對音樂信號頻率與時長的分析與組合來完成音樂的簡單合成。所以在設(shè)計過程中,根據(jù)音調(diào)用頻率來體現(xiàn),節(jié)拍用時長來體現(xiàn)的原理,用MATLAB軟件進行編程來存儲音樂的頻

19、率與時長,通過將正弦波形的不同疊加與包絡(luò)設(shè)置來仿真實現(xiàn)音樂的音調(diào)與節(jié)奏的變化。3.1 所涉及的樂理知識簡述 要想實現(xiàn)音樂的合成,就要了解合成音樂所需要的相關(guā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).這些就稱作為唱名。這些唱名分別代表著相應(yīng)的基波頻率。但是只有當確定了音樂的音調(diào)之后才能確切的知道各個唱名所真正代表

20、的基波頻率值。例如樂譜為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ā)出不同的音色,這是由于不同的諧波成分和頻譜結(jié)構(gòu)導(dǎo)致的。并且不同的樂器所發(fā)出的的音樂包絡(luò)波形是不同的,為了便于用程序來表示波形包絡(luò),通常把音樂的復(fù)雜包絡(luò)函數(shù)近似直線化,所以

21、音樂波形的包絡(luò)通常都是折線型。3.1.3 十二平均律 十二平均律,在音樂領(lǐng)域中作為一種音樂定律的方法,指將音樂的八度按照頻率等比例地分成十二份。由于“五度相生律”和“十二平均律”發(fā)音非常相似而且十二平均律能夠解決轉(zhuǎn)調(diào)問題,所以,它被廣泛應(yīng)用在鍵盤樂器與交響樂隊中。根據(jù)國際標準音的規(guī)定,相鄰的半音之間的頻率之比定為2(1/12)1.059,作為最常見的應(yīng)用十二平均律而制成的樂器就是鋼琴,鋼琴的琴鍵a1的頻率規(guī)定為440Hz,那么就可以根據(jù)比值得出鋼琴其他的琴鍵音對應(yīng)的頻率。例如與a1左邊相鄰#g1頻率是440/1.059=415.03Hz,同理,與a1右邊相鄰的半音#a1的頻率是466.16Hz

22、,也可以算出不同音調(diào)下“1(do)”的對應(yīng)的基波頻率,即C:261.63Hz ,F(xiàn):349.23Hz和G:392Hz 等 。3.2 傅里葉變換與頻譜分析合成一段簡單的音樂,需要綜合考慮音樂的三要素,也就是必須知道該段音樂的基波與諧波頻率成分以及包絡(luò)的形狀特征。為了便于分析上述特征,就要進行信號的頻譜分析,也就是利用傅里葉變化,得出該音樂信號的頻譜結(jié)構(gòu),來進行其頻譜特征的提取。有限長序列的離散傅氏變換(DFT),在信號處理的理論上有重要意義,它將頻域也離散化,是現(xiàn)代信號頻譜分析主要方法。N點DFT實質(zhì)上是其頻譜的離散頻域采樣,對頻率具有選擇性(k=2k/N),在這些點上反映了信號的頻譜。 但DF

23、T計算量大,處理復(fù)雜,所以引用了快速傅里葉變化(FFT)算法最簡單、編程最容易的是基2FFT,還有基4FFT、基8FFT等快速算法。根據(jù)采樣定律,F(xiàn)FT變換相當于對有限長序列進行頻域采樣,而不丟失任何信息。所以只要時域序列的長度足夠長,采樣的點數(shù)足夠多,頻域采樣也可以很好地反映信號的頻譜趨勢,所以在設(shè)計中可以用FFT進行語音信號的頻譜分析。 4 MATLAB音樂合成系統(tǒng)的總體設(shè)計4.1 系統(tǒng)的總體設(shè)計 MATLAB音樂合成系統(tǒng),能實現(xiàn)音樂的簡單合成、音樂的降噪處理、音樂的加諧波處理、音樂的升八度處理、音樂的降八度處理、音樂時域與頻域波形顯示、利用傅里葉級數(shù)合成音樂以及音樂字幕的動態(tài)顯示的操作。

24、該系統(tǒng)的全部功能都通過GUI圖形用戶界面顯示出來,并且使用模塊化的設(shè)計方法,將系統(tǒng)分為四個模塊,如圖4-1所示?;贛ATLAB 軟件的音樂合成系統(tǒng)簡單合成及處理音樂的模塊音樂的傅里葉頻域分析模塊傅里葉級數(shù)合成音樂模塊音樂的字幕動態(tài)顯示模塊圖4-1 系統(tǒng)總體設(shè)計結(jié)構(gòu)圖4.2 GUI界面的設(shè)計GUIDE(Graphic User Interface Design Environment)是專門設(shè)計圖形用戶界面GUI的集成開發(fā)環(huán)境。GUI界面一般包括窗口、菜單、按鈕和文本框等各種圖形對象。在設(shè)計GUI時,可以通過鼠標操作就能產(chǎn)生各種GUI控件,這樣讓用戶對圖形界面的生成與管理變得直接、方便,能讓用

25、戶定制用戶與MATLAB2013a的交互方式??梢孕纬梢环N除命令窗口之外的與MATLAB2013a的交互方式。4.2.1 啟動GUIDE在MATLAB2013a中Command窗口里面輸入guide 按回車鍵,或者從菜單里面均可進入GUIDE。MATLAB2013a為GUI圖形應(yīng)用界面的設(shè)計準備了以下四種模板,如圖4-2所示。圖4-2 GUI設(shè)計模板選擇對話框在GUI設(shè)計模板中選中第一個模板,新建并且保存為yinyuehecheng后,MATLAB2013a會自動產(chǎn)生相應(yīng)的.fig文件和.m文件。4.2.2 GUIDE設(shè)計環(huán)境 在進入GUI界面之后,下一步就是進行界面設(shè)計編輯。在GUIDE設(shè)計

26、環(huán)境中用到的事Layout編輯器,操作者可以通過鼠標移動模板左邊的控件到中間布局區(qū)域,如按鈕、坐標軸、文本框等。接下來,通過屬性編輯器和對齊編輯器對各控件設(shè)置相關(guān)屬性和進行界面布置,以完善界面功能。本設(shè)計總體布局如下圖4-3所示。圖4-3 GUI設(shè)計面板布局4.2.3 GUI界面的功能設(shè)計 設(shè)計好GUI界面的整體布局之后,接下來就該利用程序代碼的編寫進行各個按鈕功能的設(shè)置。找到上述的GUI 的M文件yinyuehecheng.m,打開之后,會看到里面已經(jīng)存在許多自動生成的程序代碼,只需要找到各個按鈕及文本編輯框?qū)?yīng)的函數(shù)。在對應(yīng)的函數(shù)名下輸入要實現(xiàn)相應(yīng)功能所需要的程序。例如在yinyuehec

27、heng.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; %各個唱名對應(yīng)的頻率 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)

28、; %這段音樂的總抽樣點數(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); %抽樣點對應(yīng)的幅值 n=n+time(a); End然后定位相應(yīng)的簡單音樂合成按鈕的坐標程序。 t1=linspace(0,length(west)/fs,length(west); set(handles.axes1,'HandleVisibility','ON

29、');%開始使用坐標,便于操作 axes(handles.axes1);%使用圖像,操作在坐標1 plot(t1,west');axis(-0.2 4.2 -1.2 1.2); xlabel('t/s');ylabel('幅度'); 這樣相應(yīng)設(shè)置好各個功能按鈕所對應(yīng)的程序,就算基本完成了GUI界面的設(shè)置。5 MATLAB音樂合成系統(tǒng)的設(shè)計與實現(xiàn)5.1 簡單合成及處理音樂模塊的設(shè)計與實現(xiàn)通過給定的音樂簡譜和掌握的樂理知識與頻譜分析來進行簡單音樂的合成。并且在此基礎(chǔ)上對音樂進行相應(yīng)的處理,來比較經(jīng)不同處理后的音樂播放效果。5.1.1 合成社會主義好

30、依據(jù)音樂社會主義好一小段的音樂簡譜和國際規(guī)定的十二平均律的計算方法對應(yīng)地得到此小段音樂中各個唱名的頻率,利用MATLAB軟件來編程仿真實現(xiàn)音樂的簡單合成。音樂簡譜如圖5-1所示。圖5-1 音樂簡譜由圖5-1可知社會主義好的曲調(diào)定為G,也就是說1=G,那么可以知道其對應(yīng)的頻率為329.1Hz,其中 6是低音的意思,即對應(yīng)G調(diào)“6”的頻率659.26Hz,取其頻率的一半,即659.26/2=329.63Hz。根據(jù)“十二平均律”計算得到各個唱名對應(yīng)的頻率如下表5-1。表5-1 唱名對應(yīng)的頻率表唱名3335321 6123頻率493.88493.88493.88587.33493.8844039232

31、9.63392440493.88得到該小段音樂各個唱名對應(yīng)的頻率之后,還有很重要的一個數(shù)據(jù)需要得到,那就是根據(jù)樂理知識推算出各個唱名對應(yīng)的持續(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 f_flag;

32、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; %各個唱名所對應(yīng)的頻率值 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:time(a)/f

33、s; %產(chǎn)生第a個樂音的抽樣點 west(n:n+time(a)-1)=sin(2*pi*f(a)*t); %抽樣點對應(yīng)的幅值 n=n+time(a); end5.1.2 加包絡(luò),除噪音 在MATLAB中,播放出了社會主義好的第一小節(jié),但可聽出聲音不是很好,只能聽出具有社會主義好的調(diào)子而已。會聽到有“啪”的雜聲,聲音比較刺耳,下面通過加上外形相似的包絡(luò)來消噪音,使不同音的連接處的響度為零即可。編寫如下程序。 function button4_Callback(hObject, eventdata, handles)%音樂的降噪global flag global west fs f time

34、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為存儲包絡(luò)數(shù)據(jù)的向量 G(1:time(a)=exp(1:(-1/time(a):1/8000);%產(chǎn)生包絡(luò)點 west(n:n+time(a)-1)=sin(2*pi*f(a)*t).*G(1:time(a);n=n+time(a);

35、 end 加包絡(luò)后的仿真時域波形如圖5-2所示。 圖5-2 音樂降噪時域圖形 由圖可見,通過加包絡(luò),使每個音的連接處的幅度有所減小,使音樂聽起來更加連續(xù),悅耳。5.1.3 音樂升降度處理升高一個八度即每個唱名的頻率都提高一倍,變?yōu)樵瓉淼?倍;降低一個八度即每個唱名的頻率都減小一倍,變?yōu)樵瓉淼?/2。因此最簡單的辦法是將存儲該段音樂的各個樂音頻率的向量中每個元素改變?yōu)樵瓉淼?或1/2倍即可。編寫程序如下。function button6_Callback(hObject, eventdata, handles)%音樂升八度global flag %定義全局變量global west fs tim

36、e 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為存儲包絡(luò)數(shù)據(jù)的向量L=(time(a)*0 1/5 333/1000 333/500 1;%

37、包絡(luò)線端點對應(yīng)的橫坐標T=0.2 1.5 1 1 0.2; %包絡(luò)線端點對應(yīng)的縱坐標s=1;b=1:1:time(a); %產(chǎn)生包絡(luò)線抽樣點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);%包絡(luò)線直線方程通式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-3所示。圖5-3

38、 音樂升八度時域圖同樣地,將音樂進行降八度處理只需改變上述程序中的一條語句即可。即將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, eventdat

39、a, 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 用傅里葉變換分析音樂頻譜模塊的設(shè)計與實現(xiàn)為了更加清晰地了解經(jīng)過不同處理的音樂所發(fā)生的變

40、化,就要研究音樂的基波與諧波,即每種音樂的頻譜圖,可以對音樂時域波形進行傅里葉變換,得到的幅值譜,在頻譜圖上的第一個突出的波峰對應(yīng)的頻率即為基頻。編寫了如下程序。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 = 2nextpow2(leng

41、th(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(

42、9;幅度');else errordlg('請您先點擊簡單音樂合成按鈕!','溫馨提示');end經(jīng)過分別處理的音樂通過調(diào)用該段程序就會分別顯示出相對應(yīng)的頻譜圖,以便從視覺上更加直觀地了解各個音樂的不同之處,在各種相應(yīng)處理前后的對比中更容易讓用戶接受與其對應(yīng)的方法及特點。音樂社會主義好簡單合成后的仿真頻譜圖形如下圖5-6所示。圖5-6 簡單音樂合成頻譜圖由圖5-6可知,該段音樂的基波頻率為329.1Hz,它的幅度值是0.125,以此類推,它對應(yīng)的各個高次諧波幅度值如下表5-3所示。表5-3 高次諧波幅值表諧波234567幅度0.250.2560.7550

43、.0250.1250.01 圖5-7為音樂加諧波之后的仿真頻譜圖。圖5-7 音樂加諧波頻譜圖 該圖與圖5-6所示的簡單音樂合成有明顯的區(qū)別,波形邊緣更加平緩,音樂聽起來更加清晰,效果更好。圖5-8與圖5-9分別為音樂升八度和降八度處理的仿真頻譜圖。圖5-8 音樂升八度頻譜圖 圖5-9 音樂降八度處理頻譜圖由上述圖5-8與圖5-9所示頻譜圖可以清楚地看到,升八度處理是在簡單音樂合成圖5-6的基礎(chǔ)上頻率增加了一倍,并且各個幅值有所升高,降八度處理是在圖5-6的基礎(chǔ)上頻率降低了一倍,并且幅值有輕微的下降。利用傅里葉級數(shù)的原理合成的音樂的仿真頻譜圖形,如圖5-10所示。 圖5-10 基于傅里葉級數(shù)合成

44、的音樂頻譜 由上圖5-10與5-6頻譜圖的比較,可以直觀的看出,利用傅里葉級數(shù)分析原理合成的音樂頻譜曲線愈加光滑,噪聲干擾少,只是幅值很小,質(zhì)量較簡單音樂合成的高。5.3 基于傅里葉級數(shù)合成的音樂模塊的設(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ù)合成音樂的部分程

45、序。function button11_Callback(hObject, eventdata, handles)%傅里葉級數(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個樂音加上包絡(luò)n=n+time(a);endt1=linspace(0,length(west)

46、/fs,length(west);set(handles.axes1,'HandleVisibility','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)顯示模塊的設(shè)計與實現(xiàn) 運用前面的簡單音樂合成的相關(guān)原理及方法來合成音樂小星星并且實現(xiàn)小星星歌詞字幕的動態(tài)顯示。小星星的音樂簡譜如圖5-12所示。圖5-12 小星星音樂簡

47、譜用鋼琴的標準音A4=440Hz,根據(jù)國際上規(guī)定的十二平均律,相鄰的半音之間頻率之比是1.059463,而且由圖可知樂譜的基調(diào)是1=C,即該段音樂的基準頻率設(shè)置為Pt=44100Hz。在編寫程序的過程中運用十二平均律的計算方法即:scale12=A4/2(9/12)*2.(0:11)/12)。由上圖5-12的音樂簡譜可知,此音樂為七音符,程序中設(shè)置為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。音樂的每個

48、唱名持續(xù)的時間設(shè)置為rhythm=repmat(1 1 1 1 1 1 2,1,6)。 針對于音樂小星星的歌詞在GUI界面實現(xiàn)邊播放邊顯示,用到的是GUI中的edit1文本框,應(yīng)用語句set(handles.edit1,string,變量名)來達到顯示的目的,其中歌詞的文字用矩陣lyric=一閃一閃亮晶晶滿天都是小星星掛在天上放光明它是我們的小眼睛一閃一閃亮晶晶滿天都是小星星來完成編輯。 其中該段音樂合成及頻譜顯示的程序如下。y = ;for i=1:length(score) %length(score) 為score的長度為7*6=42y =y sin(1:rhythm(i)*p0)/pt

49、*2*pi*scale12(map(score(i);%音樂合成endt = linspace(0,length(y)/pt,length(y);%時域波形在界面坐標顯示set(handles.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 = 2

50、nextpow2(length(y);%傅里葉頻譜分析 Y = fft(y,NFFT)*2/length(y);g = pt/2*linspace(0,1,NFFT/2+1);set(handles.axes2,'HandleVisibility','ON');%開始啟動坐標,便于操作 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(&

51、#39;幅度');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)*p0)/pt*2*pi*scale12(map(score(i),pt); else wavplay(sin(1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i),pt);

52、 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)的調(diào)試與運行 本設(shè)計利用MATLAB軟件,通過MATLAB GUI構(gòu)建一個具有圖形用戶界面的音樂合成系統(tǒng),界面友好、操作方便。該系統(tǒng)成功地實現(xiàn)了音樂的簡單合成、音樂的

53、降噪處理、音樂的加諧波處理、音樂的升降度處理、音樂的時域和頻域波形顯示分析及基于傅里葉級數(shù)分析合成的音樂的操作。但這些操作并不是輕松實現(xiàn)的,在編程與設(shè)計過程中,各個模塊也是經(jīng)過驗證與調(diào)試才達到如今的效果。6.1 音樂的播放、暫停的調(diào)試與運行 在設(shè)計音樂的播放與暫停這個功能時,一開始是用MATLAB中的sound函數(shù),將向量轉(zhuǎn)換成聲音,進行音樂的播放,但是它的不足之處是在播放的過程中不能中途暫停,也就是暫停的功能不能體現(xiàn)出來,因此,將sound函數(shù)的語句sound(west,8000)替換,分別有播放、暫停、繼續(xù)播放,實現(xiàn)了音樂的暫停與播放功能。編寫程序如下。function button8_C

54、allback(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 =1reae(p);%音樂的繼續(xù)播放end6.2 傅里葉變換分析音樂的調(diào)試與運行 在用傅里葉分析合成的音樂的模塊中,一開始計劃使用MATLAB中的wavread函數(shù)來讀取.wav文件,實現(xiàn)相應(yīng)功能,但是總不成功,后來通過查閱資料和MATLAB

溫馨提示

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

評論

0/150

提交評論