一種結(jié)合樂譜的音符切分方法
【專利摘要】本發(fā)明公開了一種結(jié)合樂譜的音符切分方法,包括下列步驟:1、對樂譜對應(yīng)的MIDI文件進(jìn)行解析,獲得音符時(shí)值和音高信息;2、對音樂信號(hào)進(jìn)行采集,之后對音樂信號(hào)進(jìn)行預(yù)處理,預(yù)處理過程包括預(yù)加重、分幀、加窗等;3、采用短時(shí)平均能量的方法對預(yù)處理后的信號(hào)進(jìn)行包絡(luò)提取;4、對提取的信號(hào)包絡(luò)進(jìn)行峰值提取并將峰值與樂譜進(jìn)行雙向匹配,取所有信號(hào)的能量平均值作為閾值,先將大于閾值的峰值與樂譜匹配,從而確定能量較大的音符的起始點(diǎn)峰值;再將小于閾值的峰值與已確定音符之間的樂譜匹配;5、將起始點(diǎn)峰值與音樂信號(hào)中的音符起點(diǎn)進(jìn)行一一映射,從而完成對音樂的音符切分。本發(fā)明對強(qiáng)弱變化較多的多音音樂能夠?qū)崿F(xiàn)準(zhǔn)確的音符切分。
【專利說明】
一種結(jié)合樂譜的音符切分方法
技術(shù)領(lǐng)域
[0001] 本發(fā)明屬于音頻信號(hào)處理領(lǐng)域,特別是一種結(jié)合樂譜的音符切分方法。
【背景技術(shù)】
[0002] 隨著生活水平的不斷提高,人們開始學(xué)習(xí)樂器來提高自身的音樂素質(zhì)。音符作為 音樂構(gòu)成的基本要素,在分析音樂信號(hào)中起著關(guān)鍵的作用,準(zhǔn)確的切分音符可以提高音符 識(shí)別的準(zhǔn)確率。音符切分的實(shí)質(zhì)是檢測鋼琴音樂音符的起始位置,將鋼琴音樂信號(hào)中的每 個(gè)音樂事件劃分出來。
[0003] 音樂切分方法大多數(shù)借鑒使用了語音端點(diǎn)檢測的方法和思路,大致分為兩種情 況:一種是基于信號(hào)特征的檢測方法,根據(jù)信號(hào)的幅度包絡(luò)、短時(shí)平均能量、時(shí)頻、相位、功 率譜等特征表示來檢測音符起點(diǎn);另一種是基于統(tǒng)計(jì)信號(hào)模型,根據(jù)模型變化點(diǎn)檢測突發(fā) 信號(hào)來確定音符起點(diǎn)。近年來,許多新的方法被提出,如基于多特征聯(lián)合的方法,基于頻域 能量的特征,基于差分能量和差分過零率的特征,基于排序幅度譜的特征,基于高頻能量和 低頻能量的特征等。音樂具有節(jié)奏、情感和旋律等語義要素,較之簡單的語音信息具有更多 的復(fù)雜性,所以對音樂音符切分的研究還是有很大的潛力。
[0004] 專利申請?zhí)枮镃N200610086469.7,發(fā)明名稱為"一種基于雙峰值檢測的音符切分 方法及其裝置"的中國專利,是根據(jù)判斷第一波峰和第二波峰是否滿足雙峰值檢測的條件, 完成對能量大于臨界值的連續(xù)語音幀構(gòu)成的每一濁音段的音符切分。該方法可以實(shí)現(xiàn)對各 音符能量均勻的單音音樂的音符切分,但對于多音音樂,特別是雙手彈奏的鋼琴音樂,相鄰 很近的音符之間極易重疊,此時(shí)雙峰值檢測的性能下降,漏檢率上升。
[0005] 專利申請?zhí)枮镃N201110063242.1,發(fā)明名稱為"基于Teager能量熵的音符切分方 法"的中國專利,通過統(tǒng)計(jì)Teager能量的信息熵Η后采用雙門限閾值法進(jìn)行峰值提取來完成 音符切分。該方法可以實(shí)現(xiàn)多音音樂的音符切分,但對于強(qiáng)弱變化較多的多音音樂,采用閾 值來進(jìn)行峰值提取會(huì)遺漏部分音符起點(diǎn)。
[0006] 由上可知,現(xiàn)有技術(shù)能夠?qū)崿F(xiàn)連續(xù)單音音樂的音符切分,但對于強(qiáng)弱變化較多的 多音音樂不適用。
【發(fā)明內(nèi)容】
[0007] 本發(fā)明所解決的技術(shù)問題在于提供一種結(jié)合樂譜的音符切分方法。
[0008] 實(shí)現(xiàn)本發(fā)明目的技術(shù)解決方案為:一種結(jié)合樂譜的音符切分方法,包括以下步驟:
[0009] 步驟1、對樂譜信息進(jìn)行提取,具體是對樂譜對應(yīng)的MIDI文件進(jìn)行解析,提取出樂 譜中的音符時(shí)值和音高信息;
[0010] 步驟2、對音樂信號(hào)進(jìn)行采集,該音樂信號(hào)是根據(jù)步驟1中的樂譜進(jìn)行演奏的,之后 對采集到的音樂信號(hào)進(jìn)行預(yù)處理;
[0011] 步驟3、對預(yù)處理后的信號(hào)進(jìn)行包絡(luò)提??;
[0012] 步驟4、對提取的信號(hào)包絡(luò)進(jìn)行峰值提取并將峰值與樂譜進(jìn)行雙向匹配;
[0013] 步驟5、將起始點(diǎn)峰值與音樂信號(hào)中的音符起點(diǎn)進(jìn)行一一映射,具體是將起始點(diǎn)峰 值與幀長相乘,得到音符起點(diǎn)在音樂信號(hào)中的位置,從而完成對音樂的音符切分。
[0014] 本發(fā)明與現(xiàn)有技術(shù)相比,其顯著優(yōu)點(diǎn)為:1)本發(fā)明的結(jié)合樂譜的音符切分方法主 要結(jié)合樂譜中的先驗(yàn)信息,提高了音符切分的效率;2)本發(fā)明結(jié)合樂譜的音符切分方法中 采用短時(shí)平均能量特征為時(shí)域特征,計(jì)算復(fù)雜度低,速度快;3)本發(fā)明的結(jié)合樂譜的音符切 分方法對包絡(luò)峰值與樂譜進(jìn)行雙向匹配,提高了音符切分的準(zhǔn)確度;4)本發(fā)明的結(jié)合樂譜 的音符切分方法將音符起始點(diǎn)檢測與多基頻檢測同時(shí)進(jìn)行,可以實(shí)現(xiàn)在確定一個(gè)小節(jié)的音 樂音符起點(diǎn)后得到該小節(jié)中各音符的所有基頻,即實(shí)現(xiàn)信號(hào)音符音高實(shí)時(shí)檢測;5)本發(fā)明 的結(jié)合樂譜的音符切分方法能夠?qū)崿F(xiàn)強(qiáng)弱變化較多的多音音樂的音符切分,對簡單的連續(xù) 音樂同樣具有適用性。
[0015] 下面結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)描述。
【附圖說明】
[0016] 圖1是本發(fā)明的結(jié)合樂譜的音符切分方法框圖。
[0017] 圖2是鋼琴曲《小奏鳴曲》前三小節(jié)的樂譜。
[0018] 圖3是對音樂預(yù)處理和包絡(luò)提取之后的結(jié)果圖,其中圖3(a)是現(xiàn)場演奏的《小奏鳴 曲》前三小節(jié)的音樂波形;圖3(b)是音樂信號(hào)預(yù)加重之后的波形;圖3(c)是音樂信號(hào)包絡(luò) 圖。
[0019] 圖4是包絡(luò)峰值與樂譜雙向匹配的流程圖。
[0020] 圖5是包絡(luò)峰值與樂譜匹配后的起始點(diǎn)峰值位置圖。
[0021] 圖6是鋼琴音樂信號(hào)起始點(diǎn)檢測結(jié)果圖。
【具體實(shí)施方式】
[0022] 結(jié)合圖1,本發(fā)明的一種結(jié)合樂譜的音符切分方法,包括以下步驟:
[0023]步驟1、對樂譜信息進(jìn)行提取,具體是對樂譜對應(yīng)的MIDI文件進(jìn)行解析,提取出樂 譜中的音符時(shí)值和音高信息;
[0024]步驟2、對音樂信號(hào)進(jìn)行采集,該音樂信號(hào)是根據(jù)步驟1中的樂譜進(jìn)行演奏的,之后 對采集到的音樂信號(hào)進(jìn)行預(yù)處理;具體為:
[0025] 步驟2-1、通過一階數(shù)字濾波器對音樂信號(hào)進(jìn)行預(yù)加重處理,數(shù)字濾波器H(z)公式 為:
[0026] Η(ζ) = 1-μζ_1
[0027] 式中,μ為濾波器系數(shù);
[0028]步驟2-2、對預(yù)加重處理后的信號(hào)進(jìn)行分幀,分幀公式為
[0029] fn= (L-N+inc)/inc
[0030] 式中fn為分幀后的總幀數(shù),L為預(yù)加重后的信號(hào)長度,N為幀長,inc為后一幀對前 一幀的位移量;
[0031] 步驟2-3、對分幀處理后的信號(hào)進(jìn)行加窗,第i幀加窗音樂信號(hào)71(1〇表示為:
[0032] yi(n)=x((i_l)*inc+n)*w(n)
[0033] 式中x(n)為預(yù)加重之后的信號(hào),w(n)為窗函數(shù),n = l,2,…,N,i = l,2,…,fn;
[0034]米用漢寧窗,窗函數(shù)公式為:
[0035]
[0036]式中N為窗長,窗長與幀長相等。
[0037]步驟3、對預(yù)處理后的信號(hào)進(jìn)行包絡(luò)提取;其中對預(yù)處理后的信號(hào)采用短時(shí)平均能 量作為音樂信號(hào)的包絡(luò),第i幀的短時(shí)平均能量E(i)表示為:
[0038]
[0039] 式中,yi(n)為第i幀加窗音樂信號(hào),Ν為窗長。
[0040] 步驟4、對提取的信號(hào)包絡(luò)進(jìn)行峰值提取并將峰值與樂譜進(jìn)行雙向匹配;具體為:
[0041] 步驟4-1、采用中值濾波對信號(hào)包絡(luò)進(jìn)行平滑處理,并采用極大值法提取包絡(luò)中的 峰值Pa;
[0042] 步驟4-2、對當(dāng)前峰值索引、音符在樂譜中的位置索引和音符起點(diǎn)在包絡(luò)峰值Pa中 的位置索引indj進(jìn)行初始化,將當(dāng)前峰值索引i設(shè)置為1,當(dāng)前音符在樂譜中的位置索引 temp」設(shè)置為1,音符起點(diǎn)在包絡(luò)峰值Pa中的位置索引ind_l設(shè)置為1;
[0043]步驟4-3、設(shè)定固定閾值δ,所述固定閾值δ為所有信號(hào)能量的平均值;
[0044]步驟4-4、利用閾值獲得有效峰值Ρη,所述有效峰值Ρη為高于固定閾值δ的峰值,得 到有效峰值Ρη在包絡(luò)峰值Pa中的位置索引為ind;
[0045] 步驟4-5、對位置索引ind進(jìn)行判斷,若ind>l,則令音樂信號(hào)第1個(gè)音符起點(diǎn)Pan(l) 對應(yīng)包絡(luò)第一個(gè)峰值Pa(l);若ind = 1,則信號(hào)第1個(gè)音符起點(diǎn)對應(yīng)第一個(gè)有效峰值Pan(l) = Pn(l),并將索引i增1,即i = i+l;
[0046] 步驟4-6、對步驟1中提取出的音符時(shí)值midi_t ime累加求和:
[0047]
[0048] 其中,音符時(shí)值midi_time為l*p矩陣,p為音樂事件的個(gè)數(shù),cumsum_time為累加 和,t為音符在樂譜中的位置索引,1彡t彡p,l彡X彡t;
[0049] 步驟4-7、初步判定第1個(gè)音符起點(diǎn)Pan(l)和第i個(gè)有效峰值Pn(i)之間信號(hào)包含的 音樂事件數(shù)cm為:
[0050] cm=max{t | cumsum_time(tXnote_len}
[00511式中,note_len為第1個(gè)音符起點(diǎn)Pan(l)和第i個(gè)有效峰值之間信號(hào)的相對長度, 公式為:
[0052] note_len= (Pn( i)_Pan( 1) )*N/n_len
[0053] 式中,N為幀長,n_len為一個(gè)八分音符在時(shí)域上的信號(hào)長度;
[0054] 步驟4-8、將有效峰值與樂譜匹配,對第i個(gè)有效峰值所在的音符瞬態(tài)部分作傅里 葉變換,利用諧波峰值法獲得該段音樂信號(hào)包含的基音頻率pitch,從步驟1中提取出的音 高信息midi_note的第temp_i+l列到cm+1列數(shù)據(jù)尋找與基音頻率pitch相等的最小列cml, 由此確定第i個(gè)有效峰值Pn(i)表示第cml個(gè)音符的起點(diǎn),即Pan(cml) =Pn(i),令峰值Pan (cml)對應(yīng)在Pa中的索引為ind_2;若沒有找到cml,則該有效峰值為偽峰值,i = i+1,返回步 驟4-7;其中音高信息midi_note為q*p的矩陣,p為音樂事件的個(gè)數(shù),q為一個(gè)音樂事件中含 有的基頻個(gè)數(shù)最大值;
[0055]步驟4-9、對已經(jīng)確定音符起點(diǎn)之間的包絡(luò)峰值與樂譜匹配,設(shè)置包絡(luò)峰值索引j 的范圍為ind_l〈 j〈ind_2,將包絡(luò)峰值Pa中第ind_]^ljind_2個(gè)峰值逐個(gè)按照步驟4-7的方法 初步判定第1個(gè)音符起點(diǎn)Pan( 1)和第j個(gè)包絡(luò)峰值Pa( i)之間信號(hào)包含的音樂事件數(shù)cm2; [0056] 步驟4-10、設(shè)置音符起點(diǎn)峰值索引ii的范圍為temp_i〈ii〈cml,按照步驟4-8中的 方法來確定第j個(gè)包絡(luò)峰值Pa( j)對應(yīng)的第ii個(gè)音符的起點(diǎn),即Pan(ii) =Pa( j);若某個(gè)音 符起點(diǎn)沒有與其對應(yīng)的峰值,將步驟4-9中的粗判結(jié)果作為音符起點(diǎn),即Pan (cm2) = Pa (j);
[0057] 步驟4-11、確定前cml個(gè)音符起點(diǎn)之后,將當(dāng)前待匹配音符起點(diǎn)索引temp」設(shè)置為 cml,同時(shí)將ind_2的值賦值給下一個(gè)有效峰值在包絡(luò)峰值Pa中的位置索引ind_l,即ind_l =ind_2,i自增1,返回步驟4-7;若找到的音符起點(diǎn)個(gè)數(shù)等于音符總數(shù),音符切分結(jié)束,音符 起點(diǎn)在音樂信號(hào)中的位置為起始點(diǎn)峰值與幀長相乘,即onset = Pan*N。
[0058] 步驟5、將起始點(diǎn)峰值與音樂信號(hào)中的音符起點(diǎn)進(jìn)行一一映射,具體是將起始點(diǎn)峰 值與幀長相乘,得到音符起點(diǎn)在音樂信號(hào)中的位置,從而完成對音樂的音符切分。
[0059] 下面結(jié)合實(shí)施例進(jìn)行更詳細(xì)的描述:
[0060] 實(shí)施例
[0061 ]單音音樂是指任意時(shí)刻只有一個(gè)聲音的音樂,比如獨(dú)唱、小號(hào)獨(dú)奏等;而多音音樂 則允許同一時(shí)刻有多個(gè)聲音存在,比如一般的鋼琴演奏、重奏、交響樂等。對于多音音樂,具 有相同開始時(shí)間的所有音高被稱為一個(gè)音樂事件。音符切分的實(shí)質(zhì)是音樂音符的起始位 置,將音樂信號(hào)中的每個(gè)音樂事件劃分出來。
[0062] 圖1為結(jié)合樂譜的音符切分方法框圖,結(jié)合樂譜的音符切分方法包括提取樂譜信 息、音樂信號(hào)采集、信號(hào)預(yù)處理、包絡(luò)提取、峰值提取、峰值與樂譜雙向匹配和音符起始點(diǎn)映 射部分。下面以鋼琴演奏音樂為例說明本發(fā)明的結(jié)合樂譜的音符切分方法。
[0063] 樂譜是音樂的最初形式,它由作曲家創(chuàng)作得到,演奏者根據(jù)樂譜演奏出音樂。如圖 2為鋼琴曲《小奏鳴曲》前三小節(jié)的樂譜,樂譜有雙行譜表,即高音、低音譜表。音符時(shí)值也稱 為音符值或音值,在樂譜中用來表達(dá)各音符之間的相對持續(xù)時(shí)間;音高在物理上反映為音 符的基頻值,即基音的頻率。MIDI可以看作樂譜的電子化表達(dá)形式,它記錄了音符、節(jié)拍、力 度、樂器等信息。MIDI文件中的二、三音軌對應(yīng)樂譜中的高音、低音譜表,通過解析MIDI文 件,可以提取各音軌包含的音符時(shí)值和音高信息,并將兩個(gè)音軌的信息合并。《小奏鳴曲》前 三小節(jié)樂譜對應(yīng)的音符相對時(shí)值集合為{1,1,1,1,1,1,1,1,1,1,2,2,2,2},表1是對《小奏 鳴曲》前三小節(jié)的MIDI樂譜兩個(gè)音軌合并后得到的鋼琴鍵號(hào)數(shù)組,其中第1列為高音譜表, 2-4列為低音譜表。
[0064] 表 1
[0065]
[0066] 鋼琴演奏的音樂通過模數(shù)變化后變成數(shù)字樂音信號(hào),圖3(a)為現(xiàn)場演奏的《小奏 鳴曲》前三小節(jié)的音樂波形。采集之后的信號(hào)需要進(jìn)行預(yù)處理,預(yù)處理過程包括預(yù)加重、分 幀、加窗等。圖3(b)為音樂信號(hào)預(yù)加重之后的波形。預(yù)加重處理可以提高高頻部分,使信號(hào) 音符起始點(diǎn)處的能量增強(qiáng)。采用一階數(shù)字濾波器對音樂信號(hào)進(jìn)行預(yù)加重處理,數(shù)字濾波器 公式為:
[0067] Η(ζ) = 1-μζ_1
[0068] 式中,μ 值取 0.99。
[0069] 分幀加窗處理以有限長度的移動(dòng)窗口對信號(hào)樣本加權(quán)的形式實(shí)現(xiàn),可以將總體非 平穩(wěn)的樂音信號(hào)轉(zhuǎn)化為短時(shí)平穩(wěn)信號(hào)。采用交疊分段的方法可以使幀與幀之間平滑過渡且 保持其連續(xù)性,前一幀和后一幀的交疊部分稱為幀移。分幀公式為:
[0070] fn= (L-N+inc)/inc
[0071] 式中fn為分幀后的總幀數(shù),L為預(yù)加重后的信號(hào)長度,N為幀長,inc為幀移。本發(fā)明 為了體現(xiàn)峰值與音符起始點(diǎn)的映射關(guān)系,取幀移與幀長相等。
[0072]對分幀處理后的信號(hào)進(jìn)行加窗,第i幀加窗音樂信號(hào)yi(n)表不為:
[0073] yi(n)=x((i_l)*inc+n)*w(n)
[0074] 式中x(n)為預(yù)加重之后的信號(hào),w(n)為窗函數(shù),n = l,2,…,N,i = l,2,…,fn。常用 在語音、樂音信號(hào)處理中的加窗函數(shù)有海明窗、漢寧窗和矩形窗等幾種,本發(fā)明采用漢寧 窗,窗函數(shù)公式為:
[0075]
[0076] 式中N為窗長,窗長與幀長相等,本發(fā)明取一個(gè)標(biāo)準(zhǔn)八分音符長度的1/10。
[0077]在音樂信號(hào)中,每個(gè)音符的能量首先會(huì)突然上升然后經(jīng)歷一個(gè)衰減過程,這個(gè)階 段的變化稱為瞬態(tài)。音樂信號(hào)分析中的起始點(diǎn)是指是一個(gè)音樂事件的開始,就是指音高的 變化或者一個(gè)音符的開始。由于音符起點(diǎn)處能量的增加尤為明顯,使用短時(shí)平均能量作為 信號(hào)包絡(luò)可以使音符的起點(diǎn)大致凸顯出來。第i幀的短時(shí)平均能量E(i)表示為:
[0078]
[0079] 式中,yi(n)為第i幀加窗音樂信號(hào),N為窗長。取窗長為1000點(diǎn),得到的音樂信號(hào)包 絡(luò)如圖3(c)。
[0080] 采用中值濾波對信號(hào)包絡(luò)進(jìn)行平滑處理,并采用極大值法提取包絡(luò)中的峰值Pa。
[0081] 在一般的時(shí)域起點(diǎn)檢測方法中,設(shè)定閾值后取大于閾值的部分作為濁音段,同時(shí) 得到濁音信號(hào)的端點(diǎn)。根據(jù)基本樂理知識(shí),鋼琴彈奏中,一般右手彈奏的是主旋律,而左手 只是伴奏彈奏,所以右手彈奏時(shí)的力度普遍要大于左手彈奏的力度,左右手合奏出強(qiáng)弱變 化的音樂。只取大于閾值的峰值非??赡苎谏w力度小的音符起點(diǎn),也可能誤將偽峰值作為 音符起點(diǎn)。但可以確定的是,大于較大閾值的峰值一定與樂譜中某個(gè)音符對應(yīng),因此本發(fā)明 的方法設(shè)定較大的閾值,對包絡(luò)峰值進(jìn)行雙向匹配。
[0082] 雙向匹配即將大于閾值的峰值作為有效峰值,對有效峰值與樂譜匹配,從而確定 能量較大的音符的起點(diǎn)位置;再將小于閾值的峰值與已確定音符之間的樂譜進(jìn)行匹配,如 圖4為包絡(luò)峰值與樂譜雙向匹配的流程圖,算法描述如下:
[0083] (1)對當(dāng)前峰值索引、音符在樂譜中的位置索引和音符起點(diǎn)在包絡(luò)峰值Pa中的位 置索引ind_l進(jìn)行初始化,將當(dāng)前峰值索引i設(shè)置為1,當(dāng)前音符在樂譜中的位置索引temp」 設(shè)置為1,音符起點(diǎn)在包絡(luò)峰值Pa中的位置索引ind_l設(shè)置為1;
[0084] (2)設(shè)定固定閾值δ,所述固定閾值δ為所有信號(hào)能量的平均值;
[0085] (3)利用閾值獲得有效峰值Ρη,所述有效峰值Ρη為高于固定閾值δ的峰值,得到有 效峰值Ρη在包絡(luò)峰值Pa中的位置索引為ind;
[0086] (4)對位置索引ind進(jìn)行判斷,若ind>l,則令音樂信號(hào)第1個(gè)音符起點(diǎn)Pan(l)對應(yīng) 包絡(luò)第一個(gè)峰值Pa(l);若ind=l,則信號(hào)第1個(gè)音符起點(diǎn)對應(yīng)第一個(gè)有效峰值Pan(l)=Pn (1),并將索引i增1,即i = i+l;
[0087] (5)對步驟1中提取出的音符時(shí)值mi d i_t ime累加求和:
[0088]
[0089] 式中,cumsum_time為累加和,t為音符在樂譜中的位置索引,Kt<n,Kx<t,n 為音樂事件總數(shù);
[0090] (6)初步判定第1個(gè)音符起點(diǎn)Pan(l)和第i個(gè)有效峰值Pn(i)之間信號(hào)包含的音樂 事件數(shù)cm為:
[0091 ] cm=max{t | cumsum_time(tXnote_len}
[0092] 式中,note_len為第1個(gè)音符起點(diǎn)Pan(l)和第i個(gè)有效峰值之間信號(hào)的相對長度, 公式為:
[0093] note_len= (Pn( i)_Pan( 1) )*N/n_len
[0094] 式中,N為幀長,n_len為一個(gè)八分音符在時(shí)域上的信號(hào)長度;
[0095] (7)將有效峰值與樂譜匹配,對第i個(gè)有效峰值所在的音符瞬態(tài)部分作傅里葉變 換,利用諧波峰值法獲得該段音樂信號(hào)包含的基音頻率pitch,從步驟1中提取出的音高 midi_note的第temp_i+l列到cm+1列數(shù)據(jù)尋找與基音頻率pitch相等的最小列cml,由此確 定第i個(gè)有效峰值Pn(i)表示第cml個(gè)音符的起點(diǎn),即Pan(cml) = Pn(i),令峰值Pan(cml)對 應(yīng)在Pa中的索引為ind_2;若沒有找到cml,則該有效峰值為偽峰值,i = i+1,返回(6);
[0096] (8)對已經(jīng)確定音符起點(diǎn)之間的包絡(luò)峰值與樂譜匹配,設(shè)置包絡(luò)峰值索引j的范圍 為ind_l〈j〈ind_2,將包絡(luò)峰值Pa中第ind_]^ljind_2個(gè)峰值逐個(gè)按照步驟4-7的方法初步判 定第1個(gè)音符起點(diǎn)Pan(l)和第j個(gè)包絡(luò)峰值Pa(i)之間信號(hào)包含的音樂事件數(shù)cm2,即cm2 = max{t | cumsum_time(tXnote_len2}
[0097] 其中note_len2 = (Pa( j)_Pan( 1) )*N/n_len;
[0098] (9)設(shè)置音符起點(diǎn)峰值索引ii的范圍為以111?_1〈^〈〇111,按照(7)中的方法來確定 第j個(gè)包絡(luò)峰值Pa( j)表示第ii個(gè)音符的起點(diǎn),即Pan(ii) =Pa( j);若某個(gè)音符起點(diǎn)沒有與 其對應(yīng)的峰值,將步驟4-9中的粗判結(jié)果作為音符起點(diǎn),即Pan(cm2) =Pa( j)。
[0099] (10)確定前cml個(gè)音符起點(diǎn)之后,將當(dāng)前待匹配音符起點(diǎn)索引temp_i設(shè)置為cml, 同時(shí)將ind_2的值賦值給下一個(gè)有效峰值在包絡(luò)峰值Pa中的位置索引ind_l,即indj = ind_2, i自增1,返回步驟4-7;若找到的音符起點(diǎn)個(gè)數(shù)等于音符總數(shù),包絡(luò)峰值與樂譜雙向 匹配結(jié)束。
[0100] 圖5為包絡(luò)峰值與樂譜匹配后的起始點(diǎn)峰值位置,其中正方形點(diǎn)表示有效峰值匹 配結(jié)果,圓圈點(diǎn)表示其余包絡(luò)峰值匹配結(jié)果。
[0101]將起始點(diǎn)峰值與音樂信號(hào)中的音符起點(diǎn)進(jìn)行一一映射,通過將起始點(diǎn)峰值與幀長 相乘來得到音符起點(diǎn)在音樂信號(hào)中的位置,即〇nset = Pan*N。圖6為起始點(diǎn)檢測結(jié)果,其中 實(shí)線表示由有效峰值確定的音符起始點(diǎn),虛線表示由其余包絡(luò)峰值確定的音符起始點(diǎn),由 此實(shí)現(xiàn)音符的準(zhǔn)確切分。
[0102]由上可知,本發(fā)明結(jié)合樂譜的音符切分方法能夠?qū)崿F(xiàn)強(qiáng)弱變化較多的多音音樂的 音符切分,對簡單的連續(xù)音樂同樣具有適用性。
【主權(quán)項(xiàng)】
1. 一種結(jié)合樂譜的音符切分方法,其特征在于,包括W下步驟: 步驟1、對樂譜信息進(jìn)行提取,具體是對樂譜對應(yīng)的MIDI文件進(jìn)行解析,提取出樂譜中 的音符時(shí)值和音高信息; 步驟2、對音樂信號(hào)進(jìn)行采集,該音樂信號(hào)是根據(jù)步驟1中的樂譜進(jìn)行演奏的,之后對采 集到的音樂信號(hào)進(jìn)行預(yù)處理; 步驟3、對預(yù)處理后的信號(hào)進(jìn)行包絡(luò)提??; 步驟4、對提取的信號(hào)包絡(luò)進(jìn)行峰值提取并將峰值與樂譜進(jìn)行雙向匹配; 步驟5、將起始點(diǎn)峰值與音樂信號(hào)中的音符起點(diǎn)進(jìn)行一一映射,具體是將起始點(diǎn)峰值與 帖長相乘,得到音符起點(diǎn)在音樂信號(hào)中的位置,從而完成對音樂的音符切分。2. 根據(jù)權(quán)利要求1所述的結(jié)合樂譜的音符切分方法,其特征在于,步驟2中對采集到的 音樂信號(hào)進(jìn)行預(yù)處理具體為: 步驟2-1、通過一階數(shù)字濾波器對音樂信號(hào)進(jìn)行預(yù)加重處理,數(shù)字濾波器H(z)公式為: H(z) = 1-帖-1 式中,μ為濾波器系數(shù); 步驟2-2、對預(yù)加重處理后的信號(hào)進(jìn)行分帖,分帖公式為 fn= (L-N+inc)/inc 式中fn為分帖后的總帖數(shù),L為預(yù)加重后的信號(hào)長度,N為帖長,inc為后一帖對前一帖的 位移量; 步驟2-3、對分帖處理后的信號(hào)進(jìn)行加窗,第i帖加窗音樂信號(hào)yi(n)表示為: yi(n) = x( (i-l)*inc+n)*w(n) 式中x(n)為預(yù)加重之后的信號(hào),w(n)為窗函數(shù),n=l,2,…,N,i = l,2,…,fn; 采用漢寧窗,窗函數(shù)公式為:式中N為窗長,窗長與帖長相等。3. 根據(jù)權(quán)利要求1所述的結(jié)合樂譜的音符切分方法,其特征在于,步驟3對預(yù)處理后的 信號(hào)進(jìn)行包絡(luò)提取,其中對預(yù)處理后的信號(hào)采用短時(shí)平均能量作為音樂信號(hào)的包絡(luò),第i帖 的短時(shí)平均能量E(i)表示為:式中,yi(n)為第i帖加窗音樂信號(hào),N為窗長。4. 根據(jù)權(quán)利要求1所述的結(jié)合樂譜的音符切分方法,其特征在于,步驟4對提取的信號(hào) 包絡(luò)進(jìn)行峰值提取并將峰值與樂譜進(jìn)行雙向匹配具體為: 步驟4-1、采用中值濾波對信號(hào)包絡(luò)進(jìn)行平滑處理,并采用極大值法提取包絡(luò)中的峰值 Pa; 步驟4-2、對當(dāng)前峰值索引、音符在樂譜中的位置索引和音符起點(diǎn)在包絡(luò)峰值化中的位 置索引ind_l進(jìn)行初始化,將當(dāng)前峰值索引i設(shè)置為1,當(dāng)前音符在樂譜中的位置索引temp_i 設(shè)置為1,音符起點(diǎn)在包絡(luò)峰值化中的位置索引ind_l設(shè)置為1; 步驟4-3、設(shè)定固定闊值δ,所述固定闊值δ為所有信號(hào)能量的平均值; 步驟4-4、利用闊值獲得有效峰值化,所述有效峰值化為高于固定闊值δ的峰值,得到有 效峰值化在包絡(luò)峰值化中的位置索引為ind; 步驟4-5、對位置索引ind進(jìn)行判斷,若ind〉l,則令音樂信號(hào)第1個(gè)音符起點(diǎn)化n( 1)對應(yīng) 包絡(luò)第一個(gè)峰值化(1);若ind=l,則信號(hào)第1個(gè)音符起點(diǎn)對應(yīng)第一個(gè)有效峰值化n(l)=化 (1),并將索弓li增1,即i = i+l; 步驟4-6、對步驟1中提取出的音符時(shí)值累加求和:其中,音符時(shí)值為l*p矩陣,P為音樂事件的個(gè)數(shù),cumsum_time為累加和,t為 音符在樂譜中的位置索引, 步驟4-7、初步判定第1個(gè)音符起點(diǎn)化n(l)和第i個(gè)有效峰值化(i)之間信號(hào)包含的音樂 事件數(shù)cm為: cm=max{t I cumsum_time(t)《note_len} 式中,note_len為第1個(gè)音符起點(diǎn)化n(l)和第i個(gè)有效峰值之間信號(hào)的相對長度,公式 為: note_len =(Pn(i)-Pan(1))*N/n_len 式中,N為帖長,n_len為一個(gè)八分音符在時(shí)域上的信號(hào)長度; 步驟4-8、將有效峰值與樂譜匹配,對第i個(gè)有效峰值所在的音符瞬態(tài)部分作傅里葉變 換,利用諧波峰值法獲得該段音樂信號(hào)包含的基音頻率pitch,從步驟1中提取出的音高信 息midi_note的第temp_i+l列到cm+1列數(shù)據(jù)尋找與基音頻率pitch相等的最小列cml,由此 確定第i個(gè)有效峰值化(i)表示第cm 1個(gè)音符的起點(diǎn),即Pan (cm 1)=化(i),令峰值化η (cm 1) 對應(yīng)在化中的索引為ind_2;若沒有找到cml,則該有效峰值為偽峰值,i = i+1,返回步驟4- 7;其中音高信息midi_note為q*p的矩陣,P為音樂事件的個(gè)數(shù),q為一個(gè)音樂事件中含有的 基頻個(gè)數(shù)最大值; 步驟4-9、對已經(jīng)確定音符起點(diǎn)之間的包絡(luò)峰值與樂譜匹配,設(shè)置包絡(luò)峰值索引j的范 圍為ind_l < j < ind_2,將包絡(luò)峰值化中第ind_l到ind_2個(gè)峰值逐個(gè)按照步驟4-7的方法初 步判定第1個(gè)音符起點(diǎn)化n(l)和第j個(gè)包絡(luò)峰值化(i)之間信號(hào)包含的音樂事件數(shù)cm2; 步驟4-10、設(shè)置音符起點(diǎn)峰值索引i i的范圍為temp_i < i i <cml,按照步驟4-8中的方 法來確定第j個(gè)包絡(luò)峰值化(j)對應(yīng)的第ii個(gè)音符的起點(diǎn),即Pan(ii)=化(j);若某個(gè)音符 起點(diǎn)沒有與其對應(yīng)的峰值,將步驟4-9中的粗判結(jié)果作為音符起點(diǎn),即Pan(cm2)=化(j); 步驟4-11、確定前cml個(gè)音符起點(diǎn)之后,將當(dāng)前待匹配音符起點(diǎn)索引temp_i設(shè)置為cml, 同時(shí)將ind_2的值賦值給下一個(gè)有效峰值在包絡(luò)峰值化中的位置索引ind_l,即ind_l = ind_2,i自增1,返回步驟4-7;若找到的音符起點(diǎn)個(gè)數(shù)等于音符總數(shù),音符切分結(jié)束,音符起 點(diǎn)在音樂信號(hào)中的位置為起始點(diǎn)峰值與帖長相乘,即onset =化n*N。
【文檔編號(hào)】G10H1/00GK105976803SQ201610262452
【公開日】2016年9月28日
【申請日】2016年4月25日
【發(fā)明人】芮義斌, 李秀珍, 張躍龍, 謝仁宏, 李鵬, 郭山紅
【申請人】南京理工大學(xué)