專利名稱:音樂合成的節(jié)奏控制及混音方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種音樂合成方法,特別涉及一種音樂合成的節(jié)奏控制及混音方法。
然而,這些手持式電子裝置均具有輕薄短小的特性,因此產(chǎn)品設(shè)計(jì)時(shí)便必須犧牲運(yùn)算速度及儲(chǔ)存容量,其擴(kuò)充性具有一定的難度。因此,在考量運(yùn)算速度及儲(chǔ)存容量的情況下,很多應(yīng)用程序的設(shè)計(jì)就不得不重新的修正,以便在這些手持式電子裝置上使用。
運(yùn)算速度以及儲(chǔ)存容量便限制的上述手持式電子裝置的音樂音質(zhì)。這是因?yàn)閹捉鼧菲髟舻囊羯憩F(xiàn),需要龐大的內(nèi)存來儲(chǔ)存,且在運(yùn)算上也需要加以提升,況且紀(jì)錄各種樂器音色所需要的內(nèi)存的確會(huì)相當(dāng)?shù)凝嫶螅@就是為什么這些手持式電子裝置一直無法出現(xiàn)動(dòng)聽的音樂的原因。
一種熟知的MIDI(musical instrument digital interface)音樂是音樂合成最典型的例子,一般Midi音樂合成,包括兩個(gè)時(shí)間參數(shù),一是每四分音符的拍子數(shù)(Ticks Per Quarter Note,以下簡稱Ticks PQN),另一是每四分音符的時(shí)間(Time PQN),可換算為每個(gè)拍子(Tick)的時(shí)間(Time Per Tick,以下簡稱TPT),它是Midi音樂合成的一個(gè)基本的時(shí)間長度單位TPT=Time PQN/Ticks PQN。每一個(gè)Midi音符前都有一個(gè)等待數(shù)字w,表示過了w個(gè)基本時(shí)間長度后開始播放該音符或停止播放該音符。它的時(shí)間控制方法,是用一個(gè)時(shí)間間隔為TPT的中斷(interrupt)來計(jì)算經(jīng)過了多少時(shí)間并讀取欲播放或停止播放的音符,等待w個(gè)基本時(shí)間長度,即是代表經(jīng)過w個(gè)中斷后,才開始播放或停止播放該音符。
綜上所述,繼公開音樂合成方法之后,本發(fā)明公開一種音樂合成的節(jié)奏控制及混音方法,以期在不用占用太多內(nèi)存空間的情況下,仿真更動(dòng)聽的音樂。
為達(dá)上述目的,本發(fā)明提供一種音樂合成的節(jié)奏控制及混音方法,包括下列步驟第一(步驟100),加載一樂譜于一個(gè)或多個(gè)合成頻道,包括提供一個(gè)或多個(gè)合成頻道(步驟200),輸入一樂譜(步驟210)及將樂譜中的各樂器音符序列對應(yīng)到各合成頻道的時(shí)間間隔參數(shù)w及命令序列(步驟220)。
第二(步驟110),讀入各頻道第一個(gè)樂器音符的時(shí)間間隔參數(shù)w。
第三(步驟120),設(shè)定各頻道的播放樂器音符,包括檢查各頻道的時(shí)間間隔參數(shù)w是否為零(步驟300),設(shè)定各頻道的合成音樂波形(步驟310)及讀入各頻道下一個(gè)樂器音符的時(shí)間間隔參數(shù)w(步驟320)。
第四(步驟130),合成各頻道長度為SPT的音樂波形,檢查合成頻道并依序于每個(gè)合成頻道分別讀取該音樂波形數(shù)據(jù)庫當(dāng)中對應(yīng)于樂器的起奏衰減波形數(shù)據(jù)及長度、遞歸波形數(shù)據(jù)及長度、延音階段的振幅調(diào)整模式參數(shù)及振幅調(diào)整參數(shù)、消逝階段的振幅調(diào)整模式參數(shù)及振幅調(diào)整參數(shù),以合成長度為SPT的數(shù)字信號(hào)波形樣本點(diǎn)數(shù)的音樂波形。
第五(步驟140),將各頻道所合成的波形相加輸出。
第六(步驟150),將每個(gè)頻道所讀入的下一個(gè)樂器音符的時(shí)間間隔參數(shù)減1。
第七(步驟160),檢查各頻道的播放音符是否合成完畢,若否,則回到該設(shè)定各頻道的播放樂器音符步驟120,以繼續(xù)合成下一個(gè)SPT的音樂波形,若是,則跳到下一步驟第八(步驟170),檢查每個(gè)頻道是否到了最后一個(gè)音符,若是,則結(jié)束,若否,則回到該設(shè)定各頻道的播放樂器音符步驟120。
其中,合成各頻道長度為SPT的音樂波形的方法,包括下列步驟一(步驟400)、輸出起奏衰減階段的波形并乘上一固定的振幅參數(shù)。
二(步驟410)、輸出遞歸波形并乘上延音階段的振幅參數(shù)及做振幅參數(shù)的調(diào)整。
三(步驟420)、輸出遞歸波形并乘上消逝階段的振幅參數(shù)及做振幅參數(shù)的調(diào)整。
因此,一段演奏的樂曲,可想成是一連串的樂器音符,以某個(gè)時(shí)間間隔,不斷的產(chǎn)生及消逝。這時(shí)間間隔可以是零(通常分散在不同頻道),表示有多種樂器音符同時(shí)播放,如此便可以將這一連串的樂器音符在某個(gè)時(shí)間點(diǎn),合成某個(gè)音樂波形。而其中每個(gè)樂器音符的合成是相互獨(dú)立的,它們分別在不同的頻道合成。然后,在每合成長度為SPT后,將所有頻道的合成音樂波形全部加在一起,儲(chǔ)存或輸出發(fā)音。如此,既可控制音樂輸出的節(jié)奏,也可完成混音的效果。
假設(shè)我們將一段樂曲,表示成一連串的樂器音符(Note)的開或關(guān)(cmd=Note_On,cmd=Note_Off)命令序列,每個(gè)樂器音符命令前帶有一個(gè)時(shí)間間隔參數(shù)w(Wait),記錄著要間隔多少個(gè)SPT的長度,才開始或停止合成。于是,可將整個(gè)合成過程以一個(gè)一個(gè)的SPT時(shí)間為單位,來合成音樂。其概念為將所有頻道所分配到的樂器音符,其時(shí)間間隔參數(shù)w,以SPT為時(shí)間單位的方式來計(jì)時(shí)。一旦排到某個(gè)樂器的音符命令時(shí),即開始或停止合成該樂器音符。若有多個(gè)樂器音符命令時(shí)間已經(jīng)排到,便一起開始或停止合成。每個(gè)樂器音符開始合成后,將持續(xù)合成,直到遇到該音符關(guān)(cmd=Note_Off)的命令,即進(jìn)入消逝階段,消逝階段的合成一直到合成的振幅參數(shù)小于某個(gè)默認(rèn)值時(shí)結(jié)束。
實(shí)際的樂器音符合成步驟流程如
圖1、圖2、圖3與圖4所示,包括了下面的步驟。首先,加載一樂譜于一個(gè)或多個(gè)合成頻道(步驟100),包括提供一個(gè)或多個(gè)合成頻道步驟(步驟200)、輸入一樂譜(步驟210),樂譜包括了數(shù)個(gè)樂器音符序列及依據(jù)樂譜的音符序列,將樂譜中各樂器音符對應(yīng)到合成頻道的時(shí)間間隔參數(shù)w及命令序列(步驟220),即,每個(gè)合成頻道包括一組包括時(shí)間間隔參數(shù)w的樂器音符命令序列。接著,讀入各頻道第一個(gè)樂器音符的時(shí)間間隔參數(shù)w步驟(步驟110);然后,設(shè)定各頻道的播放樂器音符(步驟120),若檢查各頻道的時(shí)間間隔參數(shù)w為零(步驟300),則設(shè)定各頻道的合成音樂波形(步驟310),加載該樂器音符命令,若為開(Note_On)則設(shè)定該頻道開始合成該樂器音符的音樂波形,若為關(guān)(Note_Off)則設(shè)定該頻道的該樂器音符的合成進(jìn)入消逝階段,并讀入該頻道下一個(gè)樂器音符的時(shí)間間隔參數(shù)w(步驟320)。如此,即可得知每個(gè)樂器音符何時(shí)開始合成音樂,何時(shí)進(jìn)入消逝階段。接著,檢查所有頻道,將所有已開始,尚未結(jié)束的樂器音符合成,依序于每個(gè)頻道合成長度為SPT的音樂波形(步驟130),因?yàn)槊看沃缓铣砷L度為SPT的音樂波形,故必須記錄每個(gè)頻道每個(gè)合成中的已合成音樂波形的長度及相位、振幅參數(shù)及合成模式(合成為起奏衰減、延音或消逝階段)。接著,將各頻道中所合成長度為SPT的音樂波形相加輸出(步驟140),此步驟即將上述各步驟中所有頻道所合成的音樂波形加以相加。最后,輸出經(jīng)相加的音樂波形。
如此,即完成一個(gè)SPT的合成。而每一次的合成,均運(yùn)用上述的起奏衰減(步驟400)、延音(步驟410)及消逝(步驟420)三階段的合成方式。接著,將每個(gè)頻道所讀入的下一個(gè)樂器音符的時(shí)間間隔參數(shù)w減1,因?yàn)閣代表須經(jīng)過的基本時(shí)間長度,上述流程已經(jīng)過一個(gè)SPT的基本時(shí)間長度。因此,下一個(gè)SPT時(shí)間時(shí),所有位于頻道的樂器音符的時(shí)間間隔參數(shù)將減去1(步驟150),若從開始合成經(jīng)過w個(gè)時(shí)間單位后進(jìn)入消逝階段,則在進(jìn)入消逝階段前的總合成的音樂長度為w*SPT個(gè)取樣點(diǎn)(samples)。然后,檢查各頻道的播放音符是否合成完畢(步驟160),若否,則回到該設(shè)定各頻道的播放樂器音符步驟(步驟120),以繼續(xù)合成下一個(gè)SPT的音樂波形,若是,則檢查每個(gè)頻道是否到了最后一個(gè)音符(步驟170),若是,則結(jié)束,若否,則回到該設(shè)定各頻道的播放樂器音符步驟(步驟120)。
其中,如果使用者按下終止鍵,即輸入一強(qiáng)制終止播放指令,則所有頻道的音樂合成直接跳至消逝階段。
須補(bǔ)充的是,本發(fā)明所運(yùn)用的時(shí)間間隔非以TPT的中斷來計(jì)算經(jīng)過了多少時(shí)間,而是將的換算為每個(gè)拍子的樣本點(diǎn)數(shù)(SPT)。即SPT=TPT*SR(Sampling Rate)。所以,必須在每個(gè)SPT的音樂波形合成時(shí),控制其相位,而達(dá)到在不同音符的銜接時(shí)相位同步的效果。
所以,等待w個(gè)基本時(shí)間長度,即是代表在每合成w*SPT個(gè)樣本點(diǎn)時(shí),讀取下一個(gè)欲合成或停止合成的音符,并開始合成下一個(gè)音符(Attack;按下琴鍵;起奏)或停止合成(release;松開琴鍵;消逝階段)該音符。
于合成時(shí),在每合成SPT個(gè)樣本點(diǎn)時(shí),令w=w-1,若w=0,則讀取下一個(gè)欲合成或停止合成的音符,然后繼續(xù)讀取下一個(gè)w及音符。
本發(fā)明所提的方法,其音樂的合成也適用于敲擊樂器,敲擊樂器的音樂波形只含起奏衰減階段,不包括延音及消逝階段,只要在合成長度大于起奏衰減數(shù)據(jù)長度時(shí),將振幅參數(shù)設(shè)為零即可。它可控制音樂節(jié)奏的快慢,及各種樂器的混音輸出,另外,若能配合音階產(chǎn)生方法,只以一個(gè)音階產(chǎn)生其它音階,則可更進(jìn)一步以較小的內(nèi)存空間(128種樂器、61種敲擊樂器,約占3Mbytes),合成出各種完整的交響樂曲,目前已以C++程序語言撰寫完成,并在PC上驗(yàn)證成功。
以上所述,僅為本發(fā)明其中的較佳實(shí)施例而已,并非用來限定本發(fā)明的實(shí)施范圍;即凡是依本發(fā)明所作的等效變化與修飾,皆為本發(fā)明專利范圍所涵蓋。
權(quán)利要求
1.一種音樂合成的節(jié)奏控制及混音方法,其特征在于,包括下列步驟加載一樂譜于至少一個(gè)合成頻道;讀入該合成頻道中第一個(gè)樂器音符的時(shí)間間隔參數(shù)w;設(shè)定該頻道的該播放樂器音符;將該頻道合成長度為SPT的音樂波形;將該合成的波形相加輸出;將該頻道所讀入的次一個(gè)樂器音符的時(shí)間間隔參數(shù)w減1;檢查該頻道的播放音符是否合成完畢;以及檢查該每個(gè)頻道是否到了最后一個(gè)音符。
2.如權(quán)利要求1所述的音樂合成的節(jié)奏控制及混音方法,其特征在于,加載一樂譜于至少一個(gè)合成頻道步驟中,還包括有下列步驟提供至少一個(gè)合成頻道,該合成頻道具有一時(shí)間間隔參數(shù)w及一命令序列;輸入一樂譜,該樂譜具有至少一個(gè)樂器音符序列;以及將該樂譜中的樂器音符序列對應(yīng)到該至少一個(gè)合成頻道中的該時(shí)間間隔參數(shù)w及該命令序列。
3.如權(quán)利要求2所述的音樂合成的節(jié)奏控制及混音方法,其特征在于,該命令序列系為該樂器音符序列中每一樂器音符的狀態(tài),該狀態(tài)為開(ON)與關(guān)(OFF)其中之一。
4.如權(quán)利要求1所述的音樂合成的節(jié)奏控制及混音方法,其特征在于,設(shè)定該頻道的播放樂器音符步驟中還包括下列步驟檢查該頻道的該時(shí)間間隔參數(shù)w是否為0;設(shè)定該頻道的合成音樂波形;以及讀入該頻道中的次一個(gè)樂器音符的該時(shí)間間隔參數(shù)w。
5.如權(quán)利要求1所述的音樂合成的節(jié)奏控制及混音方法,其特征在于,將該頻道合成長度為SPT的音樂波形的步驟中,還包括有下列步驟輸出一起奏衰減階段的波形并乘以一固定的振幅參數(shù);輸出該遞歸波形并乘以一延音階段的振幅參數(shù)及做振幅參數(shù)的調(diào)整;輸出該遞歸波形并乘上一消逝階段的振幅參數(shù)及做振幅參數(shù)的調(diào)整。
6.如權(quán)利要求1所述的音樂合成的節(jié)奏控制及混音方法,其特征在于,該頻道長度為SPT的音樂波形合成時(shí),必須控制其相位,以使不同音符的銜接時(shí)相位同步。
全文摘要
本發(fā)明涉及一種音樂合成的節(jié)奏控制及混音方法,是將多種樂器的樂譜以數(shù)字信號(hào)波形的樣本點(diǎn)數(shù)為基本時(shí)間單位來合成音樂,并通過樂譜當(dāng)中的音符前段的時(shí)間間隔參數(shù)(w)來控制每個(gè)音符合成的開始與關(guān)閉,合成的開始即輸出起奏及衰減的波形,合成的關(guān)閉即輸出消逝階段的波形。
文檔編號(hào)G10H1/40GK1472723SQ02127489
公開日2004年2月4日 申請日期2002年8月2日 優(yōu)先權(quán)日2002年8月2日
發(fā)明者楊凰琳 申請人:無敵科技股份有限公司