本發(fā)明涉及一種音樂旋律表示和提取方法,尤其涉及一種對人類自然哼唱時(shí)由于起調(diào)高低隨意性而無法適用五線譜音符哆唻咪來表示時(shí),僅用各音之間的頻率對數(shù)比的差值來表示的方法,尤其涉及該表示方法的語音識別軟件提取技術(shù)方法。
背景技術(shù):
對于識別演唱音樂的樂譜表示方法,通常的方法是識別每一個(gè)單個(gè)音符的絕對頻率音高,來將其對應(yīng)到某一個(gè)五線譜或簡譜所規(guī)定的音符,例如簡譜中的哆、唻、咪、發(fā)、嗦、啦、嘻,(1、2、3、4、5、6、7),或五線譜中的C、D、E、F、G、A、B。
這種傳統(tǒng)的表示方法的好處是,識別時(shí)任何單個(gè)音符具有唯一性,只要識別單個(gè)音符的中心頻率立刻可以得到樂譜,另一個(gè)好處是它是音樂家可以演奏的樂譜,電腦可以直接播放的樂譜,播放的效果聽上去與原演唱的音高序列完全一致。
但這種方法有一個(gè)弊端,即對于專業(yè)音樂人士來說,可以準(zhǔn)確的演唱一首歌,并被識別為正確的樂譜。但對于非專業(yè)的普通大眾來說,由于起調(diào)的隨意性,演唱的隨意性,很容易被識別為大量很難懂的音符,其中包括大量的升降調(diào)號。
本發(fā)明放棄單個(gè)音符的音高識別和表示,而是采用對綜合整體的相對音高的識別,以及他們之間的相對變化值來表示旋律。這樣的方法雖然對于單個(gè)音符來說完全無法表示,但是對于整句或多句演唱時(shí),可以非常準(zhǔn)確的提取其相對旋律譜。
這種表示和提取方法,對于后期搜索音樂、轉(zhuǎn)換為標(biāo)準(zhǔn)樂譜、加上伴奏等功能提供了便捷的方法,使普通大眾可以記錄自己的音樂,甚至創(chuàng)作自己的音樂。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明涉及一種哼唱音樂旋律的表示和提取方法。
這是一種對人類無伴奏自然哼唱時(shí)由于起調(diào)高低隨意性而無法適用五線譜絕對音高的哆唻咪等音符來表示時(shí),僅用各音之間的頻率對數(shù)差值來表示的方法,簡稱為“相對旋律譜”表示法。尤其涉及該表示方法的語音識別軟件提取技術(shù)方法。包括以下步驟:將哼唱錄音分為小時(shí)間片;使用時(shí)域轉(zhuǎn)頻域算法來對每個(gè)小時(shí)間片的錄音進(jìn)行轉(zhuǎn)換;使用泛音能量分析定位該時(shí)間片內(nèi)能量最集中的基音中心頻率;將前后基音中心頻率幾乎一致的小時(shí)間片連貫起來作為一個(gè)音符,用平均基音中心頻率來表示;將各音符的基音中心頻率取對數(shù),并基于最可能的兩個(gè)倍頻進(jìn)行12分量化;將各音符表示為與前一個(gè)音符的相對量化單位;將采用這種表示法的音符序列來代替該哼唱的旋律譜。
本發(fā)明有益效果:能對非音樂專業(yè)人士的自然哼唱迅速記錄其旋律譜,便于后期記錄、搜索、伴奏等用途;使非專業(yè)大眾作曲成為可能性。
附圖說明
下面根據(jù)附圖和實(shí)施例對本發(fā)明作進(jìn)一步詳細(xì)說明。
圖1是口哨的PCM波形與頻譜;
圖2是哼唱“a”音的PCM波形與頻譜;
圖3是哼唱“啦”音階頻譜-時(shí)間圖;
圖4是單音節(jié)奏切分原理圖
圖5是哼唱歌曲的時(shí)域圖
圖6是哼唱歌曲的頻域圖,基音與泛音關(guān)系,提取公式與提取后結(jié)果圖
圖7是軟件流程圖
具體實(shí)施方式
音樂與普通語音最大的區(qū)別在于其頻率存在相關(guān)性。
無論是哼唱或樂器,每一個(gè)發(fā)音都由一個(gè)基音頻率以及其整數(shù)倍數(shù)的泛音組成,基音的頻譜寬窄及泛音的多少?zèng)Q定其音色如何。簡單純凈的樂器、音叉、或口哨的波形單純,泛音少。渾厚樂器、人聲哼唱的波形復(fù)雜,泛音多。例如圖1和圖2是口哨和哼唱“a”音的PCM波形及其頻譜對比。
不過對于已經(jīng)是主旋律的哼唱語音來說,已經(jīng)不需要音色的提取,只要提取其基音的中心頻率即可,這是比較簡單的,例如很容易看出上面口哨的基音頻率中心約為1250Hz,哼唱“a”音的基音頻率中心約為126Hz。
如果是需要識別樂器的絕對音名,有了基音頻率,就可以通過查表得到這個(gè)音符的絕對音名了,但本項(xiàng)目“哼唱相對旋律譜”提取的關(guān)鍵就在于不是識別絕對音名,而在于要提取相對音高的變化。因此還要提取前后音符的相對音高關(guān)系。
首先來看音階中各音頻率的關(guān)系:
如圖3所示:以音階中C,D,E,F(xiàn),G,A,B,C不同音高來唱“啦”,其基頻頻率和泛音同時(shí)都在變化。
分析研究發(fā)現(xiàn),相差一個(gè)音階的高低同一個(gè)音(例如中音“哆”到高音“哆”),其頻率為2倍關(guān)系,一共相差12個(gè)半音程:
CD(哆來)之間為全音程(一個(gè)全音程等于兩個(gè)半音程),DE(來咪)之間為全音程,EF(咪發(fā))之間為半音程,F(xiàn)G(發(fā)梭)之間為全音程,GA(梭拉)之間為全音程,AB(拉西)之間為全音程,BC(西哆)之間為半音程。一共12個(gè)半音程。
例如樂器校準(zhǔn)時(shí)通常把頻率440Hz定為標(biāo)準(zhǔn)音A4(低音“拉”)。頻率增加一倍,音階增加一。因此880Hz為A5(中音“拉”),而220Hz為A3(再低音“拉”)。從A4到A5要經(jīng)歷如下12個(gè)音:
A4(拉),A4#,B4(西),C5(哆),C5#,D5(來),D5#,E5(咪),F(xiàn)5(發(fā)),F(xiàn)5#,G5(梭),G5#
這12個(gè)音的頻率組成一個(gè)等比數(shù)列,因此每兩個(gè)音之間的頻率比是2^(1/12)=1.0594630。所以A4#的頻率為:440*1.0594630=466.164Hz。依次類推:見12音階音名與基音頻率關(guān)系
12音階音名與基音頻率關(guān)系表
概括的說,即任意兩個(gè)全音程關(guān)系的音符的頻率為1∶2^(1/6)的比例。任意兩個(gè)半音程關(guān)系的音符的頻率為1∶2^(1/12)的比例。
哼唱相對旋律譜識別原理:
以上是樂器的頻率關(guān)系,樂器通常都是用校音器校準(zhǔn),不同的樂器同一音名的頻率是一樣的,但就人在沒有伴奏的情況下哼唱歌曲主旋律,起調(diào)卻千差萬別,其頻率之間又有什么規(guī)律呢?經(jīng)過仔細(xì)研究對比發(fā)現(xiàn),與樂器的規(guī)律一樣,口頭哼唱的時(shí)候各人起調(diào)不同,基準(zhǔn)音的絕對頻率可能差很遠(yuǎn),但是各音符之間的相對頻率比不會(huì)變。不管他從多高的頻率起調(diào),唱一個(gè)音階,最終同名的高音都是起調(diào)的兩倍頻率,中間仍然是分為12個(gè)等比頻率的音符。例如,起調(diào)200Hz為中音“哆”,則高音“哆”一定是400Hz,如果起調(diào)150Hz為中音哆,則高音“哆”一定是300Hz,也就是說,我們要識別哼唱旋律,所謂識別音高,實(shí)際上只是識別其相對頻率比的變化,與絕對頻率完全無關(guān)。
再換句話說,要識別單個(gè)音符,如果是樂器,我們可以根據(jù)其頻率高低直接識別是哪個(gè)音名,例如440Hz是A4,但是如果是人的哼唱,只唱一個(gè)音符,就絕對不可能知道他唱的是哪個(gè)音符,只有當(dāng)他哼唱兩個(gè)以上音符,才可以從相對頻率變化上判別他唱的旋律。
例如男生習(xí)慣性的中音“哆”基音頻率大約為100Hz,而女生習(xí)慣性的中音哆大約為200Hz,但是這并不影響他(她)們唱同段旋律的感覺,因?yàn)槠鹫{(diào)低的相對后續(xù)音符也都低,起調(diào)高的相對后續(xù)音符也都高,
我們又注意到音符數(shù)比較少的時(shí)候,即使是相對有變化,仍然無法判別具體是哪幾個(gè)音符,例如女生用“啦-啦-啦-”來唱A4(啦)-B4(西)-C5(哆)三個(gè)音高,和男生用“啦-啦-啦”來唱D5(來)-E5(咪)-F5(發(fā))三個(gè)音高的感覺聽多了怎么都覺得是一樣,究其原因是因?yàn)樗麄兌际且粋€(gè)全音程和一個(gè)半音程的關(guān)系。然而當(dāng)音符數(shù)再增多,加上節(jié)奏的變化時(shí),就可以聽出他們要唱的是哪一首歌里面的調(diào)子了。一個(gè)樂感稍好的人,都可以以任意一個(gè)音高起唱任意一首歌,只是起調(diào)太高后面的高音會(huì)唱不上去而已。
所以我們得到一個(gè)結(jié)論,絕對音名的判別其實(shí)在判別和搜索歌曲時(shí)其實(shí)是沒有意義的,我們只要聽出其頻率的相對變化就可以了,也就是說我們要識別的并不是絕對樂譜,而是相對樂譜,只要相對樂譜一樣,找到那首歌就達(dá)到目的了,我們并不需要關(guān)心其絕對樂譜是什么,那是音樂家寫譜的時(shí)候要做的事。
“相對旋律譜提取技術(shù)”原理與計(jì)算公式:
我們根據(jù)音階中12個(gè)音符頻率呈等比數(shù)列的特性,把兩個(gè)頻率之間的相對變化用數(shù)學(xué)公式來處理,先比,然后取2的對數(shù),再除以1/12,建立頻率到相對樂譜的計(jì)算公式如下:
(Log2(fn/fn-1))/(1/12)=12*Log2(fn/fn-1)
例如12341,按以上公式對每兩個(gè)相鄰音的頻率處理之后,得到的序列為2,2,1,-5,是非常簡單的一個(gè)表示方法。上面這個(gè)公式用樂理的常識來理解,也可以理解為:
將后一個(gè)音相對前一個(gè)音的音程數(shù)除以半音程的倍數(shù)來記錄,正的音程記為正,負(fù)的音程記為負(fù)。
當(dāng)然以上是標(biāo)準(zhǔn)的頻率,得到的頻率比的對數(shù)都是1/12的整數(shù)倍,如果有輕微的走音,得到的不是1/12的整數(shù)倍,則需要進(jìn)行四舍五入取整到一個(gè)最接近的整數(shù),這一點(diǎn)是很好理解:
INT[12*Log2(fn/fn-1)+0.5]
取最接近1/12的整數(shù)倍是把“頻率比對數(shù)”量化的一個(gè)過程,所以給這種記譜法一個(gè)數(shù)學(xué)命名,叫“頻率比對數(shù)量化記譜法”。
按樂理命名可以叫“相對音程變化記譜法”,總之就是要提取音高序列的相對變化的旋律譜,而不是絕對的音名譜,所以我們稱之為“相對旋律譜”,這種提取技術(shù)稱之為“相對旋律譜提取技術(shù)”。
語音識別哼唱節(jié)奏原理:
在中文里,一個(gè)字的發(fā)音是由一個(gè)聲母和一個(gè)韻母組成的,例如“啦”,是聲母“l(fā)”和韻母“a”的組合,聲母發(fā)音短促,其頻譜分布較寬,變化快,持續(xù)時(shí)間0.1秒~0.2秒,韻母發(fā)音時(shí)間較長,其頻譜有較細(xì)的譜線,較為穩(wěn)定,變化慢。如圖4所示。
因此,輔音的邊界可以作為音符的切分邊界。我們目前采用PCM聲強(qiáng)包絡(luò)線突變的地方作為音符切分的主要依據(jù),效果比較好。圖5是哼唱“滄海笑,濤濤兩岸潮”的PCM語音,其包絡(luò)線可分離出各輔音邊界。
另一個(gè)音符的邊界,是音高的變化,即同一個(gè)發(fā)音的音高發(fā)生變化時(shí),也作為另一個(gè)音符來處理。例如以下是哼唱“滄海笑,濤濤兩岸潮”的頻譜,其中“滄”和“?!倍急磺蟹譃閮蓚€(gè)音符:
關(guān)于音符切分的技術(shù),國內(nèi)技術(shù)領(lǐng)域中已有相對成熟的眾多論文可供參考。
“相對旋律譜”的天然技術(shù)優(yōu)勢:
(1)與起調(diào)音高無關(guān):每一個(gè)音都是相對前一個(gè)音高的相對變化量,與男女老少不同聲線音域、起調(diào)高低都無關(guān),無需識別其參考基音是什么。
(2)抗走調(diào):經(jīng)大量對比研究我們所搜集的眾多哼唱錄音發(fā)現(xiàn),一般唱歌走調(diào)不嚴(yán)重的人都能比較準(zhǔn)確的把握時(shí)間上和音高上相差不大的兩個(gè)音。
能把握“時(shí)間上相差不大的兩個(gè)音”的意思是,相隔比較近的幾個(gè)音相對音高可唱得準(zhǔn),或者即使是走調(diào)也走得不嚴(yán)重,但隔得比較遠(yuǎn)的兩句歌詞,就會(huì)失去參考音準(zhǔn),無法把握相對音高?!跋鄬π勺V”采用的是前后兩個(gè)音的差異,時(shí)間上相差比較遠(yuǎn)的兩個(gè)音之間的音高關(guān)系不會(huì)被表達(dá),因此走調(diào)會(huì)集中在真正走調(diào)的那幾個(gè)音符上,搜索的時(shí)候也會(huì)將錯(cuò)誤集中體現(xiàn)在走調(diào)的那幾個(gè)旋律譜上,剩下的旋律譜信息,仍然比較準(zhǔn)確的保留著歌曲的旋律細(xì)節(jié),可以起到命中歌曲的作用。
能把握“音高上相差不大的兩個(gè)音”的意思是,兩個(gè)音程相差不大的音,比較能把握,跨度比較大的兩個(gè)音,比較容易走調(diào),而且從這個(gè)音之后,后面的音都以后面一個(gè)音為基準(zhǔn)偏移。換句話說,走調(diào)是發(fā)生在突然遇到跨度大的音符上,并且由于這個(gè)音,導(dǎo)致了歌唱者心里偏離了基準(zhǔn)音,之后整個(gè)基準(zhǔn)都偏離了。事實(shí)上,大部分歌曲的大部分旋律都是跨度小的音,跨度大的音比較少,會(huì)間歇性出現(xiàn),因此走調(diào)者通常也是間歇性走調(diào)?!跋鄬π勺V”正好就沒有所謂的基準(zhǔn)音,因?yàn)樗涗浀拿總€(gè)音的基準(zhǔn)都是相對前一個(gè)音的頻率關(guān)系,所以也正好完美的避免了這個(gè)問題,即仍然可以將錯(cuò)誤集中在開始走調(diào)的那個(gè)音上,后面的旋律譜信息,仍然完美的保留著歌曲的旋律細(xì)節(jié),可以起到命中歌曲的作用。
可以這樣說,如果采用絕對音名來記錄一個(gè)哼唱旋律,走調(diào)會(huì)嚴(yán)重干擾基準(zhǔn)音的選定,而一旦基準(zhǔn)音選取偏離,又會(huì)導(dǎo)致大部分音符都表達(dá)不準(zhǔn)確,最終導(dǎo)致整個(gè)旋律譜無法識別,即會(huì)產(chǎn)生錯(cuò)誤擴(kuò)散的惡性趨勢。而“相對旋律譜”則沒有統(tǒng)一的基準(zhǔn)音,唱歌的人隨時(shí)間的逐漸走調(diào)和受大跨度音跳變影響而導(dǎo)致的基準(zhǔn)音變化,都會(huì)被集中到局部,大部分旋律細(xì)節(jié),仍然可以起到命中歌曲的作用,即具有錯(cuò)誤局部化的良性優(yōu)勢。所以“相對旋律譜”具有抗走調(diào)的天然優(yōu)勢。
軟件流程圖:
見附圖7是軟件流程圖
將哼唱錄音分為小時(shí)間片;
使用時(shí)域轉(zhuǎn)頻域算法來對每個(gè)小時(shí)間片的錄音進(jìn)行轉(zhuǎn)換;
使用泛音能量分析定位該時(shí)間片內(nèi)能量最集中的基音中心頻率;
將前后基音中心頻率幾乎一致的小時(shí)間片連貫起來作為一個(gè)音符,用平均基音中心頻率來表示;
將各音符的基音中心頻率取對數(shù),并基于最可能的兩個(gè)倍頻進(jìn)行12分量化;
將各音符表示為與前一個(gè)音符的相對量化單位;
將采用這種表示法的音符序列來代替該哼唱的旋律譜。
此流程圖對于普通語音識別軟件領(lǐng)域內(nèi)的工程師來說已經(jīng)足夠簡單,因此沒有給出更詳細(xì)的流程圖。