本發(fā)明實施例涉及信號處理技術(shù)領(lǐng)域,特別涉及一種BPM檢測方法及裝置。
背景技術(shù):
BPM(Beat Per Minute,每分鐘節(jié)拍數(shù))是音樂的特征之一,用于衡量音樂的節(jié)拍頻率,BPM的數(shù)值越高表示節(jié)拍頻率越高,音樂的節(jié)奏越快。
現(xiàn)有技術(shù)中對BPM的檢測,首先對截取的音樂片段的自相關(guān)函數(shù)進(jìn)行峰值搜索,確定每一節(jié)拍包含的幀數(shù)I,比如,音樂片段的自相關(guān)函數(shù)橫坐標(biāo)取值范圍為0~1000幀,通過對自相關(guān)函數(shù)進(jìn)行峰值搜索,確定出橫坐標(biāo)取60時自相關(guān)函數(shù)的峰值最大,即確定每一節(jié)拍包含的幀數(shù)I是60幀;然后判斷音樂片段的自相關(guān)函數(shù)在節(jié)拍型X乘以幀數(shù)I的整數(shù)倍位置的幀是否為峰值,若判斷結(jié)果為峰值的幀數(shù)大于閾值,則確定節(jié)拍型為X拍型,若判斷結(jié)果為峰值的幀數(shù)不大于閾值,則重新選取一個X的值代入,通常流行音樂的節(jié)拍型為2拍型或3拍型,因此,X可以取2或3;之后對音樂片段進(jìn)行能量幅度檢測,將能量幅度低于預(yù)定閾值的位置作為停頓點,根據(jù)停頓點的時間間隔確定停頓點的周期值,將兩個停頓點之間的時間間隔確定為一句歌詞的時間長度,并且一句歌詞包含4個小節(jié),根據(jù)停頓點的周期值確定每個小節(jié)的時間長度;最后根據(jù)節(jié)拍型和每個小節(jié)的時間長度計算音樂片段的BPM。
但由于現(xiàn)在很多音樂通過壓縮,整體能量幅度比較平均,將能量幅度低于預(yù)定閾值的位置作為停頓點,根據(jù)停頓點的周期值確定出的一句歌詞的時間長度可能不準(zhǔn)確,并且一句歌詞不一定是4個小節(jié),從而導(dǎo)致最終計算得到的BPM的準(zhǔn)確率較低。
技術(shù)實現(xiàn)要素:
為了解決現(xiàn)有技術(shù)中在音樂壓縮之后,通過將能量幅度低于預(yù)定閾值的位置作為停頓點,根據(jù)停頓點的周期值確定每個小節(jié)的時間長度,導(dǎo)致計算得到的BPM的準(zhǔn)確率較低的問題,本發(fā)明實施例提供了一種BPM檢測方法及裝置。所述技術(shù)方案如下:
第一方面,提供了一種BPM檢測方法,所述方法包括:
對音頻信號片段進(jìn)行信號處理,得到峰值點序列;
從所述峰值點序列中確定出第一峰值點和第二峰值點,所述第一峰值點是所述峰值點序列中的第一序列范圍內(nèi)取值最大的點,所述第二峰值點是所述峰值點序列中的第二序列范圍內(nèi)取值最大的點,所述第一序列范圍中包含的峰值點的數(shù)量比所述第二序列范圍中包含的峰值點的數(shù)量少,所述第二序列范圍的起始點為所述第一峰值點;
根據(jù)所述第一峰值點的序列位置和所述第二峰值點的序列位置確定節(jié)拍型;
根據(jù)所述第一峰值點的序列位置和取值、所述第二峰值點的序列位置和取值以及所述節(jié)拍型確定出第一候選點和第二候選點;
根據(jù)所述第一候選點、所述第二候選點和所述節(jié)拍型計算BPM。
可選地,所述根據(jù)所述第一峰值點的序列位置和所述第二峰值點的序列位置確定節(jié)拍型,包括:
對所述第二峰值點的序列位置除以所述第一峰值點的序列位置的結(jié)果進(jìn)行四舍五入取整,得到第一數(shù)值;
判斷所述第一數(shù)值是否是3的整數(shù)倍;
當(dāng)所述第一數(shù)值是3的整數(shù)倍時,確定所述節(jié)拍型為3拍型;
當(dāng)所述第一數(shù)值不是3的整數(shù)倍時,確定所述節(jié)拍型為2拍型。
可選地,所述第一數(shù)值是2的整數(shù)倍或是3的整數(shù)倍;
所述根據(jù)所述第一峰值點的序列位置和取值、所述第二峰值點的序列位置和取值以及所述節(jié)拍型確定出第一候選點和第二候選點,包括:
根據(jù)所述第一峰值點的序列位置和所述節(jié)拍型確定第三峰值點和第四峰值點;
根據(jù)第一策略從所述第一峰值點、所述第三峰值點和所述第四峰值點中確定出所述第一候選點和所述第二候選點。
可選地,所述根據(jù)所述第一峰值點的序列位置和所述節(jié)拍型確定第三峰值點和第四峰值點,包括:
根據(jù)所述第一峰值點的序列位置和所述節(jié)拍型確定第一序列位置;
根據(jù)所述第一序列位置和預(yù)定誤差范圍確定第三序列范圍;
將所述第三序列范圍內(nèi)取值最大的點確定為所述第三峰值點;
將所述第一序列位置乘以預(yù)定系數(shù)得到第二序列位置,所述預(yù)定系數(shù)為大于1的整數(shù);
根據(jù)所述第二序列位置和所述預(yù)定誤差范圍確定第四序列范圍;
將所述第四序列范圍內(nèi)取值最大的點確定為所述第四峰值點。
可選地,所述根據(jù)第一策略從所述第一峰值點、所述第三峰值點和所述第四峰值點中確定出所述第一候選點和所述第二候選點,包括:
利用第一系數(shù)乘以所述第一峰值點的取值,得到第一峰值;
利用第二系數(shù)乘以所述第三峰值點的取值,得到第二峰值;
利用第三系數(shù)乘以所述第四峰值點的取值,得到第三峰值;
確定出所述第一峰值、所述第二峰值和所述第三峰值中的最大值;
當(dāng)所述最大值為所述第一峰值時,將所述第一峰值點確定為所述第一候選點,將所述第三峰值點確定為所述第二候選點;
當(dāng)所述最大值為所述第二峰值時,將所述第三峰值點確定為所述第一候選點,將所述第一峰值點確定為所述第二候選點;
當(dāng)所述最大值為所述第四峰值時,將所述第四峰值點確定為所述第一候選點,將所述第三峰值點確定為所述第二候選點;
其中,所述第一系數(shù)大于所述第二系數(shù),所述第二系數(shù)大于所述第三系數(shù)。
可選地,所述第一數(shù)值不是2的整數(shù)倍或不是3的整數(shù)倍;
所述根據(jù)所述第一峰值點的序列位置和取值、所述第二峰值點的序列位置和取值以及所述節(jié)拍型確定出第一候選點和第二候選點,包括:
根據(jù)所述第一峰值點的序列位置、所述第二峰值點的序列位置和所述節(jié)拍型確定第五峰值點和第六峰值點;
根據(jù)第二策略從所述第一峰值點、所述第二峰值點、所述第五峰值點和所述第六峰值點中確定出所述第一候選點和所述第二候選點。
可選地,所述根據(jù)所述第一峰值點的序列位置、所述第二峰值點的序列位置和所述節(jié)拍型確定第五峰值點和第六峰值點,包括:
根據(jù)所述第一峰值點的序列位置和所述節(jié)拍型確定第三序列位置;
根據(jù)所述第三序列位置和預(yù)定誤差范圍確定第五序列范圍;
將所述第五序列范圍內(nèi)取值最大的點確定為所述第五峰值點;
根據(jù)第二峰值點的序列位置和所述節(jié)拍型確定第四序列位置;
根據(jù)所述第四序列位置和所述預(yù)定誤差范圍確定第六序列范圍;
將所述第六序列范圍內(nèi)取值最大的點確定為所述第六峰值點。
可選地,所述根據(jù)第二策略從所述第一峰值點、所述第二峰值點、所述第五峰值點和所述第六峰值點中確定出所述第一候選點和所述第二候選點,包括:
當(dāng)所述第二峰值點的序列位置與所述第一峰值點的序列位置的間隔小于預(yù)定閾值時,將所述第一峰值點確定為所述第一候選點,將所述第五峰值點確定為所述第二候選點;
當(dāng)所述第二峰值點的序列位置與所述第一峰值點的序列位置的間隔不小于所述預(yù)定閾值時,利用第四系數(shù)乘以所述第一峰值點的取值,得到第四峰值,利用第五系數(shù)乘以所述第二峰值點的取值,得到第五峰值;當(dāng)所述第四峰值大于所述第五峰值時,將所述第一峰值點確定為所述第一候選點,將所述第五峰值點確定為所述第二候選點;當(dāng)所述第四峰值小于所述第五峰值時,將所述第二峰值點確定為所述第一候選點,將所述第六峰值點確定為所述第二候選點;
其中,所述第四系數(shù)大于所述第五系數(shù)。
可選地,所述根據(jù)所述第一候選點、所述第二候選點和所述節(jié)拍型計算BPM,包括:
將所述第一候選點的序列位置代入轉(zhuǎn)換公式,計算得到第一BPM;
將所述第二候選點的序列位置代入轉(zhuǎn)換公式,計算得到第二BPM;
判斷所述第一BPM是否在所述預(yù)定范圍內(nèi);
當(dāng)所述第一BPM在所述預(yù)定范圍內(nèi)時,將所述第一BPM確定為所述音頻信號片段的BPM。
可選地,所述判斷所述第一BPM是否在所述預(yù)定范圍內(nèi)之后,還包括:
當(dāng)所述第一BPM不在所述預(yù)定范圍內(nèi)時,判斷所述第二BPM是否在所述預(yù)定范圍內(nèi);
當(dāng)所述第二BPM在所述預(yù)定范圍內(nèi)時,將所述第二BPM確定為所述音頻信號片段的BPM。
可選地,所述判斷所述第二BPM是否在所述預(yù)定范圍內(nèi)之后,還包括:
當(dāng)所述第一BPM和所述第二BPM均不在所述預(yù)定范圍內(nèi)時,將所述第一BPM與所述預(yù)定范圍的上限值和下限值進(jìn)行比較;
當(dāng)所述第一BPM小于所述預(yù)定范圍的下限值時,利用所述第一BPM乘以所述節(jié)拍型,得到所述音頻信號片段的BPM;
當(dāng)所述第一BPM大于所述預(yù)定范圍的上限值時,利用所述第一BPM除以所述節(jié)拍型,得到所述音頻信號片段的BPM。
可選地,所述信號處理至少包括對所述音頻信號片段的采樣,所述采樣的參數(shù)至少包括采樣頻率和步進(jìn)值;
所述轉(zhuǎn)換公式為:其中,m表示所述采樣頻率,n表示所述步進(jìn)值,P表示候選點的序列位置。
第二方面,提供了一種BPM檢測裝置,所述裝置包括:
處理模塊,用于對音頻信號片段進(jìn)行信號處理,得到峰值點序列;
第一確定模塊,用于從所述處理模塊得到的所述峰值點序列中確定出第一峰值點和第二峰值點,所述第一峰值點是所述峰值點序列中的第一序列范圍內(nèi)取值最大的點,所述第二峰值點是所述峰值點序列中的第二序列范圍內(nèi)取值最大的點,所述第一序列范圍中包含的峰值點的數(shù)量比所述第二序列范圍中包含的峰值點的數(shù)量少,所述第二序列范圍的起始點為所述第一峰值點;
第二確定模塊,用于根據(jù)所述第一確定模塊確定出的所述第一峰值點的序列位置和所述第二峰值點的序列位置確定節(jié)拍型;
第三確定模塊,用于根據(jù)所述第一確定模塊確定出的所述第一峰值點的序列位置和取值、所述第二峰值點的序列位置和取值以及所述第二確定模塊確定出的所述節(jié)拍型確定出第一候選點和第二候選點;
計算模塊,用于根據(jù)所述第三確定模塊確定出的所述第一候選點、所述第二候選點和所述第二確定模塊確定出的所述節(jié)拍型計算BPM。
可選地,所述第二確定模塊,包括:
第一計算單元,用于對所述第二峰值點的序列位置除以所述第一峰值點的序列位置的結(jié)果進(jìn)行四舍五入取整,得到第一數(shù)值;
第一判斷單元,用于判斷所述第一計算單元計算的所述第一數(shù)值是否是3的整數(shù)倍;
第一確定單元,用于當(dāng)所述第一判斷單元判斷出所述第一計算單元計算的所述第一數(shù)值是3的整數(shù)倍時,確定所述節(jié)拍型為3拍型;
第二確定單元,用于當(dāng)所述第一判斷單元判斷出所述第一計算單元計算的所述第一數(shù)值不是3的整數(shù)倍時,確定所述節(jié)拍型為2拍型。
可選地,所述第一數(shù)值是2的整數(shù)倍或是3的整數(shù)倍;
所述第三確定模塊,包括:
第三確定單元,用于根據(jù)所述第一峰值點的序列位置和所述節(jié)拍型確定第三峰值點和第四峰值點;
第四確定單元,用于根據(jù)第一策略從所述第一峰值點、所述第三確定單元確定出的所述第三峰值點和所述第四峰值點中確定出所述第一候選點和所述第二候選點。
可選地,所述第三確定單元還用于
根據(jù)所述第一峰值點的序列位置和所述節(jié)拍型確定第一序列位置;
根據(jù)所述第一序列位置和預(yù)定誤差范圍確定第三序列范圍;
將所述第三序列范圍內(nèi)取值最大的點確定為所述第三峰值點;
將所述第一序列位置乘以預(yù)定系數(shù)得到第二序列位置,所述預(yù)定系數(shù)為大于1的整數(shù);
根據(jù)所述第二序列位置和所述預(yù)定誤差范圍確定第四序列范圍;
將所述第四序列范圍內(nèi)取值最大的點確定為所述第四峰值點。
可選地,所述第四確定單元還用于
利用第一系數(shù)乘以所述第一峰值點的取值,得到第一峰值;
利用第二系數(shù)乘以所述第三峰值點的取值,得到第二峰值;
利用第三系數(shù)乘以所述第四峰值點的取值,得到第三峰值;
確定出所述第一峰值、所述第二峰值和所述第三峰值中的最大值;
當(dāng)所述最大值為所述第一峰值時,將所述第一峰值點確定為所述第一候選點,將所述第三峰值點確定為所述第二候選點;
當(dāng)所述最大值為所述第二峰值時,將所述第三峰值點確定為所述第一候選點,將所述第一峰值點確定為所述第二候選點;
當(dāng)所述最大值為所述第四峰值時,將所述第四峰值點確定為所述第一候選點,將所述第三峰值點確定為所述第二候選點;
其中,所述第一系數(shù)大于所述第二系數(shù),所述第二系數(shù)大于所述第三系數(shù)。
可選地,所述第一數(shù)值不是2的整數(shù)倍或不是3的整數(shù)倍;
所述第三確定模塊,包括:
第五確定單元,用于根據(jù)所述第一峰值點的序列位置、所述第二峰值點的序列位置和所述節(jié)拍型確定第五峰值點和第六峰值點;
第六確定單元,用于根據(jù)第二策略從所述第一峰值點、所述第二峰值點、所述第五峰值點和所述第六峰值點中確定出所述第一候選點和所述第二候選點。
可選地,所述第五確定單元還用于
根據(jù)所述第一峰值點的序列位置和所述節(jié)拍型確定第三序列位置;
根據(jù)所述第三序列位置和預(yù)定誤差范圍確定第五序列范圍;
將所述第五序列范圍內(nèi)取值最大的點確定為所述第五峰值點;
根據(jù)第二峰值點的序列位置和所述節(jié)拍型確定第四序列位置;
根據(jù)所述第四序列位置和所述預(yù)定誤差范圍確定第六序列范圍;
將所述第六序列范圍內(nèi)取值最大的點確定為所述第六峰值點。
可選地,所述第六確定單元還用于
當(dāng)所述第二峰值點的序列位置與所述第一峰值點的序列位置的間隔小于預(yù)定閾值時,將所述第一峰值點確定為所述第一候選點,將所述第五峰值點確定為所述第二候選點;
當(dāng)所述第二峰值點的序列位置與所述第一峰值點的序列位置的間隔不小于所述預(yù)定閾值時,利用第四系數(shù)乘以所述第一峰值點的取值,得到第四峰值,利用第五系數(shù)乘以所述第二峰值點的取值,得到第五峰值;當(dāng)所述第四峰值大于所述第五峰值時,將所述第一峰值點確定為所述第一候選點,將所述第五峰值點確定為所述第二候選點;當(dāng)所述第四峰值小于所述第五峰值時,將所述第二峰值點確定為所述第一候選點,將所述第六峰值點確定為所述第二候選點;
其中,所述第四系數(shù)大于所述第五系數(shù)。
可選地,所述計算模塊,包括:
第二計算單元,用于將所述第一候選點的序列位置代入轉(zhuǎn)換公式,計算得到第一BPM;
第三計算單元,用于將所述第二候選點的序列位置代入轉(zhuǎn)換公式,計算得到第二BPM;
第二判斷單元,用于判斷所述第二計算單元計算得到的所述第一BPM是否在所述預(yù)定范圍內(nèi);
第七確定單元,用于當(dāng)所述第二判斷單元判斷出所述第一BPM在所述預(yù)定范圍內(nèi)時,將所述第二計算單元計算得到的所述第一BPM確定為所述音頻信號片段的BPM。
可選地,所述計算模塊,還包括:
第三判斷單元,用于當(dāng)所述第二判斷單元判斷出所述第一BPM不在所述預(yù)定范圍內(nèi)時,判斷所述第三計算單元計算得到的所述第二BPM是否在所述預(yù)定范圍內(nèi);
第八確定單元,用于當(dāng)所述第三判斷單元判斷出所述第二BPM在所述預(yù)定范圍內(nèi)時,將所述第三計算單元計算得到的所述第二BPM確定為所述音頻信號片段的BPM。
可選地,所述計算模塊,還包括:
比較單元,用于當(dāng)所述第一BPM和所述第二BPM均不在所述預(yù)定范圍內(nèi)時,將所述第二計算單元計算得到的所述第一BPM與所述預(yù)定范圍的上限值和下限值進(jìn)行比較;
第四計算單元,用于當(dāng)所述第一BPM小于所述預(yù)定范圍的下限值時,利用所述第二計算單元計算得到的所述第一BPM乘以所述節(jié)拍型,得到所述音頻信號片段的BPM;
第五計算單元,用于當(dāng)所述第一BPM大于所述預(yù)定范圍的上限值時,利用所述第二計算單元計算得到的所述第一BPM除以所述節(jié)拍型,得到所述音頻信號片段的BPM。
可選地,所述信號處理至少包括對所述音頻信號片段的采樣,所述采樣的參數(shù)至少包括采樣頻率和步進(jìn)值;
所述轉(zhuǎn)換公式為:其中,m表示所述采樣頻率,n表示所述步進(jìn)值,P表示候選點的序列位置。
本發(fā)明實施例提供的技術(shù)方案帶來的有益效果是:
通過從信號處理后得到的峰值點序列中確定出第一峰值點和第二峰值點,根據(jù)第一峰值點和第二峰值點確定出節(jié)拍型,然后根據(jù)第一峰值點、第二峰值點和節(jié)拍型確定出第一候選點和第二候選點,根據(jù)第一候選點、第二候選點和節(jié)拍型計算BPM,由于第一候選點和第二候選點是根據(jù)第一峰值點、第二峰值點和節(jié)拍型確定出來的,第一峰值點是第一序列范圍內(nèi)取值最大的點,第二峰值點是第二序列范圍內(nèi)取值最大的點,即使是對整體能量幅度比較平均的音樂進(jìn)行檢測,對于第一峰值點和第二峰值點的選取也比較準(zhǔn)確,也就避免了將能量幅度低于預(yù)定閾值的位置作為停頓點時產(chǎn)生的誤差,導(dǎo)致根據(jù)停頓點的周期計算得到的BPM準(zhǔn)確率較低的問題,從而提高了BPM檢測的準(zhǔn)確率。
另外,通過對第二峰值點的序列位置除以第一峰值點的序列位置的結(jié)果進(jìn)行取整,并判斷取整后的數(shù)值是否是3的倍數(shù),從而快速確定出節(jié)拍型是2拍型還是3拍型。
另外,在已經(jīng)確定出節(jié)拍型是2拍型還是3拍型后,根據(jù)第一策略確定出用于計算BPM的第一候選點和第二候選點。由于選取的第一候選點和第二候選點是按照第一策略進(jìn)行過選擇,使得根據(jù)第一候選點和第二候選點計算得到的BPM的準(zhǔn)確率更高。
另外,在確定出節(jié)拍型是2拍型但第一數(shù)值不是2的整數(shù)倍時,表明第一峰值點選取的可能不準(zhǔn)確,根據(jù)第二策略確定用于計算BPM的第一候選點和第二候選點。由于在第一峰值點選取的可能不準(zhǔn)確的情況下,按照第二策略選取合適的第一候選點和第二候選點,使得根據(jù)第一候選點和第二候選點計算得到的BPM的準(zhǔn)確率更高。
另外,在根據(jù)第一候選點計算得到第一BPM,根據(jù)第二候選點計算得到第二BPM后,在第一BPM和第二BPM中進(jìn)行選擇,確定出合適的BPM,在計算得到的第一BPM和第二BPM不在預(yù)定范圍內(nèi)時,通過將第一BPM乘以節(jié)拍型或除以節(jié)拍型,使得最終得到的BPM能夠在預(yù)定范圍內(nèi)。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明一個實施例提供的BPM檢測方法的方法流程圖;
圖2A是本發(fā)明另一個實施例提供的BPM檢測方法的方法流程圖;
圖2B是本發(fā)明再一個實施例提供的BPM檢測方法的方法流程圖;
圖3是本發(fā)明一個實施例提供的BPM檢測裝置的結(jié)構(gòu)方框圖;
圖4是本發(fā)明另一個實施例提供的BPM檢測裝置的結(jié)構(gòu)方框圖;
圖5是本發(fā)明部分實施例中提供的終端的結(jié)構(gòu)方框圖。
具體實施方式
為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明實施方式作進(jìn)一步地詳細(xì)描述。
在本發(fā)明實施例中,終端可以是手機(jī)、平板電腦、電子書閱讀器、膝上型便攜計算機(jī)和臺式計算機(jī)等。
可選地,終端中運行有音樂播放器或視頻播放器,該音樂播放器或視頻播放器通常是指軟件形式的播放器。也即,終端具備播放音頻信號的能力。
圖1是本發(fā)明一個實施例提供的BPM檢測方法的方法流程圖,該方法應(yīng)用在具備播放音頻信號能力的終端中。如圖1所示,該BPM檢測方法可以包括:
步驟101,對音頻信號片段進(jìn)行信號處理,得到峰值點序列。
可選地,信號處理至少包括對音頻信號片段的采樣、時頻轉(zhuǎn)換、降低維度、自相關(guān)處理。其中,采樣的參數(shù)至少包括采樣頻率、步進(jìn)值和采樣點的數(shù)量。
步驟102,從峰值點序列中確定出第一峰值點和第二峰值點。
第一峰值點是峰值點序列中的第一序列范圍內(nèi)取值最大的點,第二峰值點是峰值點序列中的第二序列范圍內(nèi)取值最大的點,第一序列范圍中包含的峰值點的數(shù)量比第二序列范圍中包含的峰值點的數(shù)量少,第二序列范圍的起始點為第一峰值點。
第一序列范圍包含的峰值點的數(shù)量較少,比如,第一序列范圍可以是峰值點序列中從第10個點開始的100個點的范圍內(nèi),即第一序列范圍對應(yīng)的序列位置范圍是第10個點到第109個點。
第二序列范圍的起始點為第一峰值點,假設(shè)第一峰值點的序列位置為50,峰值點序列總共包含1000個點,則第二序列范圍可以是第50個點到第1000個點。
步驟103,根據(jù)第一峰值點的序列位置和第二峰值點的序列位置確定節(jié)拍型。
在流行音樂中,節(jié)拍型通常只包括2拍型和3拍型。
步驟104,根據(jù)第一峰值點的序列位置和取值、第二峰值點的序列位置和取值以及節(jié)拍型確定出第一候選點和第二候選點。
第一候選點和第二候選點是用于計算BPM的峰值點。
步驟105,根據(jù)第一候選點、第二候選點和節(jié)拍型計算BPM。
在計算BPM時,第一候選點的優(yōu)先級高于第二候選點的優(yōu)先級。
綜上所述,本發(fā)明實施例提供的BPM檢測方法,通過從信號處理后得到的峰值點序列中確定出第一峰值點和第二峰值點,根據(jù)第一峰值點和第二峰值點確定出節(jié)拍型,然后根據(jù)第一峰值點、第二峰值點和節(jié)拍型確定出第一候選點和第二候選點,根據(jù)第一候選點、第二候選點和節(jié)拍型計算BPM,由于第一候選點和第二候選點是根據(jù)第一峰值點、第二峰值點和節(jié)拍型確定出來的,第一峰值點是第一序列范圍內(nèi)取值最大的點,第二峰值點是第二序列范圍內(nèi)取值最大的點,即使是對整體能量幅度比較平均的音樂進(jìn)行檢測,對于第一峰值點和第二峰值點的選取也比較準(zhǔn)確,也就避免了將能量幅度低于預(yù)定閾值的位置作為停頓點時產(chǎn)生的誤差,導(dǎo)致根據(jù)停頓點的周期計算得到的BPM準(zhǔn)確率較低的問題,從而提高了BPM檢測的準(zhǔn)確率。
圖2A是本發(fā)明另一個實施例提供的BPM檢測方法的方法流程圖,該方法應(yīng)用在具備播放音頻信號能力的終端中。如圖2A所示,該BPM檢測方法可以包括:
步驟201,對音頻信號片段進(jìn)行信號處理,得到峰值點序列。
可選地,信號處理包括對音頻信號片段的采樣。音頻信號片段經(jīng)過采樣得到數(shù)字音頻信號矩陣。其中,采樣參數(shù)至少包括采樣頻率、步進(jìn)值和采樣點的數(shù)量。采樣參數(shù)的選取可以根據(jù)經(jīng)驗值,比如,采樣頻率為8kHz,步進(jìn)值為32,采樣點的數(shù)量為256。對應(yīng)的采樣過程為:在采樣頻率為8kHz時,以32為步進(jìn)值取256個采樣點,第1幀包括第1點~第256點,第2幀包括第33點~第288點,第3幀包括第65點~第320點,以此類推。假設(shè)采樣一共采集了10000幀,音頻信號片段經(jīng)過采樣得到一個256*10000的矩陣,該矩陣為采樣得到的數(shù)字音頻信號矩陣。
可選地,信號處理還包括時頻轉(zhuǎn)換,時頻轉(zhuǎn)換可以通過短時傅里葉變換實現(xiàn)。數(shù)字音頻信號矩陣通過短時傅里葉變換后取非負(fù)半頻的頻域信號,得到129*10000的矩陣,該矩陣為時頻轉(zhuǎn)換得到的頻域信號矩陣。
可選地,在時頻轉(zhuǎn)換之后,信號處理還包括降低維度處理。降低維度的具體實現(xiàn)方式為將頻域信號與梅爾矩陣相乘,梅爾矩陣是用于降低維度的矩陣,梅爾矩陣中的元素是根據(jù)經(jīng)驗值選取的。舉例說明,將40*129的梅爾矩陣與時頻轉(zhuǎn)換得到的129*10000的頻域信號矩陣相乘,即可得到40*10000的頻域信號矩陣,從而實現(xiàn)了降低維度的目的。頻域信號矩陣的維度降低后,通過對降低維度的頻域信號矩陣差分求平均后得到音頻信號片段的突變點序列。差分是指用降低維度的頻域信號矩陣中的后一列的元素減去前一列的元素,求平均是對差分后的頻域信號矩陣中每一列的元素求取平均值。比如,降低維度的頻域信號矩陣包括40*10000的元素,通過差分,頻域信號矩陣包括40*9999的元素,再通過求平均,頻域信號矩陣包括1*9999的元素。這一行按序排列的元素即為突變點序列。
可選地,信號處理還包括自相關(guān)處理,自相關(guān)處理可以通過自相關(guān)函數(shù)運算實現(xiàn)。突變點序列經(jīng)過自相關(guān)函數(shù)運算后,從一半位置取預(yù)定數(shù)量的點得到峰值點序列。由于突變點序列經(jīng)過自相關(guān)函數(shù)運算,得到的序列前一半與后一半相同,因此從一半位置選取峰值點序列。
對于峰值點序列中的各個峰值點,可以看作分別與各個節(jié)奏點對應(yīng)。
步驟202,從峰值點序列中確定出第一峰值點和第二峰值點。
第一峰值點是峰值點序列中的第一序列范圍內(nèi)取值最大的點,第二峰值點是峰值點序列中的第二序列范圍內(nèi)取值最大的點,第一序列范圍中包含的峰值點的數(shù)量比第二序列范圍中包含的峰值點的數(shù)量少,第二序列范圍的起始點為第一峰值點。
在實際應(yīng)用中,由于自相關(guān)函數(shù)運算得到的序列中間位置的取值最大,峰值點序列是從突變點序列經(jīng)過自相關(guān)函數(shù)運算得到的序列的中間位置向后選取預(yù)定數(shù)量的點得到的,為了避免中間位置取值較大的點對峰值點的確定產(chǎn)生影響,因此第一序列范圍通常不從第1個點開始,而是避開峰值點序列起始的幾個點,將后面的點作為起始點,比如第10個點。
第一序列范圍包含的峰值點的數(shù)量較少,比如,第一序列范圍可以是峰值點序列中從第10個點開始的100個點的范圍內(nèi),即第一序列范圍對應(yīng)的序列位置范圍是第10個點到第109個點。
第二序列范圍的起始點為第一峰值點,假設(shè)第一峰值點的序列位置為50,峰值點序列總共包含1000個點,則第二序列范圍可以是第50個點到第1000個點。
可選的,由于音樂的節(jié)拍通常按一定的規(guī)律循環(huán),在實際應(yīng)用中,2拍型和3拍型的音樂通過8個節(jié)奏點通常就能夠表達(dá)出規(guī)律,因此,第二序列范圍在選取的時候,可以選取從第一峰值點到8乘以第一峰值點的序列位置加上預(yù)定誤差的序列范圍。
第一序列范圍內(nèi)取值最大的點作為選取的一個節(jié)奏點,也即,選取的是第一序列范圍內(nèi)節(jié)拍能量最強(qiáng)的一個點;第二序列范圍內(nèi)取值最大的點作為選取的另一個節(jié)奏點,也即,選取的是第二序列范圍內(nèi)節(jié)拍能量最強(qiáng)的一個點,則第二峰值點很有可能對應(yīng)節(jié)拍能量最強(qiáng)的節(jié)奏點。
步驟203,根據(jù)第一峰值點的序列位置和第二峰值點的序列位置確定節(jié)拍型。
在流行音樂中,節(jié)拍型通常只包括2拍型和3拍型。
可選地,步驟203可以具體實現(xiàn)成如圖2B所示的步驟:
步驟203a,對第二峰值點的序列位置除以第一峰值點的序列位置的結(jié)果進(jìn)行四舍五入取整,得到第一數(shù)值。
舉例說明,假設(shè)第一峰值點的序列位置為60,第二峰值點的序列位置為180,則第一數(shù)值為3。
步驟203b,判斷第一數(shù)值是否是3的整數(shù)倍。
由于流行音樂的節(jié)拍型只包括2拍型和3拍型,因此通過判斷第一數(shù)值是否是3的倍數(shù),可以快速確定出節(jié)拍型是2拍型還是3拍型。
步驟203c,當(dāng)?shù)谝粩?shù)值是3的整數(shù)倍時,確定節(jié)拍型為3拍型。
步驟203d,當(dāng)?shù)谝粩?shù)值不是3的整數(shù)倍時,確定節(jié)拍型為2拍型。
對于步驟203a至步驟203d中節(jié)拍型的確定,可以簡化為如下公式:
其中,bm表示節(jié)拍型的取值,round(x)表示對x進(jìn)行四舍五入取整,mod(a,b)表示取a除以b的余數(shù),p1表示第一峰值點的序列位置,P2表示第二峰值點的序列位置。
步驟204,根據(jù)第一峰值點的序列位置和取值、第二峰值點的序列位置和取值以及節(jié)拍型確定出第一候選點和第二候選點。
第一候選點和第二候選點是用于計算BPM的峰值點。
可選地,當(dāng)?shù)谝粩?shù)值是2的整數(shù)倍或是3的整數(shù)倍時,即節(jié)拍型確定出為2拍型或3拍型時,步驟204可以替換成如圖2B所示的步驟:
步驟204a,根據(jù)第一峰值點的序列位置和節(jié)拍型確定第三峰值點和第四峰值點。
第三峰值點和第四峰值點是與第一峰值點相關(guān)的峰值點。
可選地,第三峰值點的確定可以包括以下步驟:
S1,根據(jù)第一峰值點的序列位置和節(jié)拍型確定第一序列位置。
比如,第一峰值點的序列位置為p1,節(jié)拍型為bm,則第一序列位置為bm*P1。
S2,根據(jù)第一序列位置和預(yù)定誤差范圍確定第三序列范圍。
預(yù)定誤差范圍是根據(jù)經(jīng)驗值選取的范圍,比如預(yù)定誤差范圍是±20,則第三序列范圍是bm*P1±20。
S3,將第三序列范圍內(nèi)取值最大的點確定為第三峰值點。
第三峰值點為選取的又一個節(jié)奏點。
可選地,第四峰值點的確定可以包括以下步驟:
S4,將第一序列位置乘以預(yù)定系數(shù)得到第二序列位置,預(yù)定系數(shù)為大于1的整數(shù)。
通過將第一序列位置乘以預(yù)定系數(shù)可以得到與第一序列位置相關(guān)的第二序列位置,由于第一序列位置是根據(jù)第一峰值點的序列位置和節(jié)拍型確定的,因此,第二序列位置與第一峰值點的序列位置和節(jié)拍型相關(guān)。
假設(shè)預(yù)定系數(shù)為2,第一序列位置是bm*P1,則第二序列位置為2*bm*P1。
S5,根據(jù)第二序列位置和預(yù)定誤差范圍確定第四序列范圍。
預(yù)定誤差范圍是根據(jù)經(jīng)驗值選取的范圍,用于確定出第四序列范圍的預(yù)定誤差范圍可以與用于確定出第三序列范圍的預(yù)定誤差范圍相同,也可以不同。
S6,將第四序列范圍內(nèi)取值最大的點確定為第四峰值點。
第四峰值點為選取的再一個節(jié)奏點。
步驟204b,根據(jù)第一策略從第一峰值點、第三峰值點和第四峰值點中確定出第一候選點和第二候選點。
在選取第一候選點和第二候選點時,第一峰值點的優(yōu)先級高于第三峰值點的優(yōu)先級,第三峰值點的優(yōu)先級高于第四峰值點的優(yōu)先級。
可選地,第一策略的具體實現(xiàn)方式包括:
s1,利用第一系數(shù)乘以第一峰值點的取值,得到第一峰值。
s2,利用第二系數(shù)乘以第三峰值點的取值,得到第二峰值。
s3,利用第三系數(shù)乘以第四峰值點的取值,得到第三峰值。
其中,第一系數(shù)大于第二系數(shù),第二系數(shù)大于第三系數(shù)。
比如,第一系數(shù)為1,第二系數(shù)為0.8,第三系數(shù)為0.6,第一峰值點的取值為E1,第三峰值點的取值為E3,第四峰值點的取值為E4,則第一峰值為1*E1,第二峰值為0.8*E3,第三峰值為0.6*E4。
選取第一候選點和第二候選點的策略是將與計算得到的第一峰值、第二峰值、第三峰值中較大的一個對應(yīng)的峰值點作為第一候選點,將第一峰值點、第三峰值點、第四峰值點中最靠近第一候選點序列位置的峰值點作為第二候選點。具體請參見s4至s7:
s4,確定出第一峰值、第二峰值和第三峰值中的最大值。
s5,當(dāng)最大值為第一峰值時,將第一峰值點確定為第一候選點,將第三峰值點確定為第二候選點。
s6,當(dāng)最大值為第二峰值時,將第三峰值點確定為第一候選點,將第一峰值點確定為第二候選點。
由于第一峰值點的優(yōu)先級高于第四峰值點,因此在第三峰值點為第一候選點時,第一峰值點為第二候選點。
s7,當(dāng)最大值為第四峰值時,將第四峰值點確定為第一候選點,將第三峰值點確定為第二候選點。
可選地,當(dāng)?shù)谝粩?shù)值不是2的整數(shù)倍或不是3的整數(shù)倍時,確定出節(jié)拍型為2拍型,步驟204可以替換成如圖2B所示的步驟:
步驟204c,根據(jù)第一峰值點的序列位置、第二峰值點的序列位置和節(jié)拍型確定第五峰值點和第六峰值點。
第五峰值點是與第一峰值點相關(guān)的峰值點,第六峰值點是與第二峰值點相關(guān)的峰值點。
由于第一數(shù)值不是3的整數(shù)倍,表明節(jié)拍型為2拍型。由于第一數(shù)值不是2的整數(shù)倍,表明第一峰值點和第二峰值點中的一個點可能選取的不準(zhǔn)確,對于不準(zhǔn)確的峰值點的識別需要通過進(jìn)一步的比較過程來確定。具體的比較過程請參見步驟s8至步驟s9。
根據(jù)第一峰值點可以確定出與第一峰值點相關(guān)的第五峰值點??蛇x地,第五峰值點的確定可以包括以下步驟:
S7,根據(jù)第一峰值點的序列位置和節(jié)拍型確定第三序列位置。
比如,第一峰值點的序列位置為P1,由于節(jié)拍型為2拍型,則第三序列位置為2*P1。
S8,根據(jù)第三序列位置和預(yù)定誤差范圍確定第五序列范圍。
預(yù)定誤差范圍是根據(jù)經(jīng)驗值選取的范圍,比如預(yù)定誤差范圍是±20,則第五序列范圍是2*P1±20。
S9,將第五序列范圍內(nèi)取值最大的點確定為第五峰值點。
第五峰值點為選取的又一個節(jié)奏點。
根據(jù)第二峰值點可以確定出與第二峰值點相關(guān)的第六峰值點??蛇x地,第六峰值點的確定可以包括以下步驟:
S10,根據(jù)第二峰值點的序列位置和節(jié)拍型確定第四序列位置。
由于第一峰值點的選取可能不合適,從第二峰值點位置向前倒推出可能的節(jié)奏點。
比如,第二峰值點的序列位置為P2,由于節(jié)拍型為2拍型,則第四序列位置是對的四舍五入取整,即
S11,根據(jù)第四序列位置和預(yù)定誤差范圍確定第六序列范圍。
預(yù)定誤差范圍是根據(jù)經(jīng)驗值選取的范圍,用于確定出第六序列范圍的預(yù)定誤差范圍可以與用于確定出第五序列范圍的預(yù)定誤差范圍相同,也可以不同。
S12,將第六序列范圍內(nèi)取值最大的點確定為第六峰值點。
第六峰值點為選取的再一個節(jié)奏點。
步驟204d,根據(jù)第二策略從第一峰值點、第二峰值點、第五峰值點和第六峰值點中確定出第一候選點和第二候選點。
可選地,第二策略的具體實現(xiàn)方式包括:
s8,當(dāng)?shù)诙逯迭c的序列位置與第一峰值點的序列位置的間隔小于預(yù)定閾值時,將第一峰值點確定為第一候選點,將第五峰值點確定為第二候選點。
可選地,在判斷第二峰值點的序列位置與第一峰值點的序列位置的間隔是否小于預(yù)定閾值時,可以轉(zhuǎn)換為判斷第二峰值點的序列位置是否小于預(yù)定閾值。
s9,當(dāng)?shù)诙逯迭c的序列位置與第一峰值點的序列位置的間隔不小于預(yù)定閾值時,利用第四系數(shù)乘以第一峰值點的取值,得到第四峰值,利用第五系數(shù)乘以第二峰值點的取值,得到第五峰值;當(dāng)?shù)谒姆逯荡笥诘谖宸逯禃r,將第一峰值點確定為第一候選點,將第五峰值點確定為第二候選點;當(dāng)?shù)谒姆逯敌∮诘谖宸逯禃r,將第二峰值點確定為第一候選點,將第六峰值點確定為第二候選點。
其中,第四系數(shù)大于第五系數(shù)。
比如,第四系數(shù)為1,第五系數(shù)為0.6,第一峰值點的取值為E1,第二峰值點的取值為E2,則第四峰值為1*E1,第五峰值點為0.6*E2。
當(dāng)?shù)诙逯迭c的序列位置與第一峰值點的序列位置的間隔不小于預(yù)定閾值時,表明第一峰值點與第二峰值點相隔較遠(yuǎn)。
將第四峰值與第五峰值進(jìn)行大小比較,與第四峰值和第五峰值中較大的一個對應(yīng)的峰值點被確定為準(zhǔn)確選取的峰值點,則該峰值點作為第一候選點,若第一候選點為第一峰值點,則根據(jù)第一峰值點確定出的第五峰值點作為第二候選點,若第一候選點為第二峰值點,則根據(jù)第二峰值點確定出的第六峰值點作為第二候選點。
步驟205,根據(jù)第一候選點、第二候選點和節(jié)拍型計算BPM。
在計算BPM時,第一候選點的優(yōu)先級高于第二候選點的優(yōu)先級。
可選地,步驟205可以替換成如圖2B所示的步驟:
步驟205a,將第一候選點的序列位置代入轉(zhuǎn)換公式,計算得到第一BPM。
步驟205b,將第二候選點的序列位置代入轉(zhuǎn)換公式,計算得到第二BPM。
可選地,轉(zhuǎn)換公式為:其中,m表示采樣頻率,n表示步進(jìn)值,P表示候選點的序列位置。
步驟205c,判斷第一BPM是否在預(yù)定范圍內(nèi)。
預(yù)定范圍中流行音樂的BPM的合理范圍,如[30,250]。
步驟205d,當(dāng)?shù)谝籅PM在預(yù)定范圍內(nèi)時,將第一BPM確定為音頻信號片段的BPM。
若計算出的第一BPM在流行音樂的BPM的合理范圍內(nèi),則直接將第一BPM作為音頻信號片段的BPM。
步驟205e,當(dāng)?shù)谝籅PM不在預(yù)定范圍內(nèi)時,判斷第二BPM是否在預(yù)定范圍內(nèi)。
步驟205f,當(dāng)?shù)诙﨎PM在預(yù)定范圍內(nèi)時,將第二BPM確定為音頻信號片段的BPM。
若第一BPM不在流行音樂的BPM的合理范圍內(nèi),而第二BPM在流行音樂的BPM的合理范圍內(nèi),則直接將第二BPM作為音頻信號片段的BPM。
步驟205g,當(dāng)?shù)谝籅PM和第二BPM均不在預(yù)定范圍內(nèi)時,將第一BPM與預(yù)定范圍的上限值和下限值進(jìn)行比較。
若第一BPM和第二BPM均不在流行音樂的BPM的合理范圍內(nèi),則需要判斷BPM是過大還是過小。
步驟205h,當(dāng)?shù)谝籅PM小于預(yù)定范圍的下限值時,利用第一BPM乘以節(jié)拍型,得到音頻信號片段的BPM。
當(dāng)?shù)谝籅PM小于預(yù)定范圍的下限值時,表明第一BPM過小,需要對第一BPM進(jìn)行調(diào)整優(yōu)化,利用第一BPM乘以節(jié)拍型。
在一種可能的實現(xiàn)方式中,若第一BPM在乘以節(jié)拍型后得到的BPM仍小于預(yù)定范圍的下限值,則利用得到的BPM繼續(xù)乘以節(jié)拍型,直至再次計算的BPM在預(yù)定范圍內(nèi)。
步驟205i,當(dāng)?shù)谝籅PM大于預(yù)定范圍的上限值時,利用第一BPM除以節(jié)拍型,得到音頻信號片段的BPM。
當(dāng)?shù)谝籅PM大于預(yù)定范圍的上限值時,表明第一BPM過大,需要對第一BPM進(jìn)行調(diào)整優(yōu)化,利用第一BPM除以節(jié)拍型。
在一種可能的實現(xiàn)方式中,若第一BPM在除以節(jié)拍型后得到的BPM仍大于預(yù)定范圍的上限值,則利用得到的BPM繼續(xù)除以節(jié)拍型,直至再次計算的BPM在預(yù)定范圍內(nèi)。
由于第一候選點的優(yōu)先級高于第二候選點的優(yōu)先級,通常在第一BPM和第二BPM均不在預(yù)定范圍內(nèi)時,只對第一BPM進(jìn)行調(diào)整優(yōu)化,在實際應(yīng)用中,也可以對第二BPM進(jìn)行調(diào)整優(yōu)化。
綜上所述,本發(fā)明實施例提供的BPM檢測方法,通過從信號處理后得到的峰值點序列中確定出第一峰值點和第二峰值點,根據(jù)第一峰值點和第二峰值點確定出節(jié)拍型,然后根據(jù)第一峰值點、第二峰值點和節(jié)拍型確定出第一候選點和第二候選點,根據(jù)第一候選點、第二候選點和節(jié)拍型計算BPM,由于第一候選點和第二候選點是根據(jù)第一峰值點、第二峰值點和節(jié)拍型確定出來的,第一峰值點是第一序列范圍內(nèi)取值最大的點,第二峰值點是第二序列范圍內(nèi)取值最大的點,即使是對整體能量幅度比較平均的音樂進(jìn)行檢測,對于第一峰值點和第二峰值點的選取也比較準(zhǔn)確,也就避免了將能量幅度低于預(yù)定閾值的位置作為停頓點時產(chǎn)生的誤差,導(dǎo)致根據(jù)停頓點的周期計算得到的BPM準(zhǔn)確率較低的問題,從而提高了BPM檢測的準(zhǔn)確率。
另外,通過對第二峰值點的序列位置除以第一峰值點的序列位置的結(jié)果進(jìn)行取整,并判斷取整后的數(shù)值是否是3的倍數(shù),從而快速確定出節(jié)拍型是2拍型還是3拍型。
另外,在已經(jīng)確定出節(jié)拍型是2拍型還是3拍型后,根據(jù)第一策略確定出用于計算BPM的第一候選點和第二候選點。由于選取的第一候選點和第二候選點是按照第一策略進(jìn)行過選擇,使得根據(jù)第一候選點和第二候選點計算得到的BPM的準(zhǔn)確率更高。
另外,在確定出節(jié)拍型是2拍型但第一數(shù)值不是2的整數(shù)倍時,表明第一峰值點選取的可能不準(zhǔn)確,根據(jù)第二策略確定用于計算BPM的第一候選點和第二候選點。由于在第一峰值點選取的可能不準(zhǔn)確的情況下,按照第二策略選取合適的第一候選點和第二候選點,使得根據(jù)第一候選點和第二候選點計算得到的BPM的準(zhǔn)確率更高。
另外,在根據(jù)第一候選點計算得到第一BPM,根據(jù)第二候選點計算得到第二BPM后,在第一BPM和第二BPM中進(jìn)行選擇,確定出合適的BPM,在計算得到的第一BPM和第二BPM不在預(yù)定范圍內(nèi)時,通過將第一BPM乘以節(jié)拍型或除以節(jié)拍型,使得最終得到的BPM能夠在預(yù)定范圍內(nèi)。
以下為本發(fā)明實施例的裝置實施例,對于裝置實施例中未詳細(xì)描述的細(xì)節(jié),可以參考上述一一對應(yīng)的方法實施例。
圖3是本發(fā)明一個實施例提供的BPM檢測裝置的結(jié)構(gòu)方框圖。該BPM檢測裝置能夠通過軟件、硬件或者兩者的結(jié)合實現(xiàn)成為終端的全部或一部分。該BPM檢測裝置包括:處理模塊310、第一確定模塊320、第二確定模塊330、第三確定模塊340和計算模塊350。
處理模塊310,用于對音頻信號片段進(jìn)行信號處理,得到峰值點序列。
第一確定模塊320,用于從處理模塊310得到的峰值點序列中確定出第一峰值點和第二峰值點,第一峰值點是峰值點序列中的第一序列范圍內(nèi)取值最大的點,第二峰值點是峰值點序列中的第二序列范圍內(nèi)取值最大的點,第一序列范圍中包含的峰值點的數(shù)量比第二序列范圍中包含的峰值點的數(shù)量少,第二序列范圍的起始點為第一峰值點。
第二確定模塊330,用于根據(jù)第一確定模塊320確定出的第一峰值點的序列位置和第二峰值點的序列位置確定節(jié)拍型。
第三確定模塊340,用于根據(jù)第一確定模塊320確定出的第一峰值點的序列位置和取值、第二峰值點的序列位置和取值以及第二確定模塊330確定出的節(jié)拍型確定出第一候選點和第二候選點。
計算模塊350,用于根據(jù)第三確定模塊340確定出的第一候選點、第二候選點和第二確定模塊330確定出的節(jié)拍型計算BPM。
綜上所述,本發(fā)明實施例提供的BPM檢測裝置,通過從信號處理后得到的峰值點序列中確定出第一峰值點和第二峰值點,根據(jù)第一峰值點和第二峰值點確定出節(jié)拍型,然后根據(jù)第一峰值點、第二峰值點和節(jié)拍型確定出第一候選點和第二候選點,根據(jù)第一候選點、第二候選點和節(jié)拍型計算BPM,由于第一候選點和第二候選點是根據(jù)第一峰值點、第二峰值點和節(jié)拍型確定出來的,第一峰值點是第一序列范圍內(nèi)取值最大的點,第二峰值點是第二序列范圍內(nèi)取值最大的點,即使是對整體能量幅度比較平均的音樂進(jìn)行檢測,對于第一峰值點和第二峰值點的選取也比較準(zhǔn)確,也就避免了將能量幅度低于預(yù)定閾值的位置作為停頓點時產(chǎn)生的誤差,導(dǎo)致根據(jù)停頓點的周期計算得到的BPM準(zhǔn)確率較低的問題,從而提高了BPM檢測的準(zhǔn)確率。
圖4是本發(fā)明另一個實施例提供的BPM檢測裝置的結(jié)構(gòu)方框圖。該BPM檢測裝置能夠通過軟件、硬件或者兩者的結(jié)合實現(xiàn)成為終端的全部或一部分。該BPM檢測裝置包括:處理模塊310、第一確定模塊320、第二確定模塊330、第三確定模塊340和計算模塊350。
處理模塊310,用于對音頻信號片段進(jìn)行信號處理,得到峰值點序列。
第一確定模塊320,用于從處理模塊310得到的峰值點序列中確定出第一峰值點和第二峰值點,第一峰值點是峰值點序列中的第一序列范圍內(nèi)取值最大的點,第二峰值點是峰值點序列中的第二序列范圍內(nèi)取值最大的點,第一序列范圍中包含的峰值點的數(shù)量比第二序列范圍中包含的峰值點的數(shù)量少,第二序列范圍的起始點為第一峰值點。
第二確定模塊330,用于根據(jù)第一確定模塊320確定出的第一峰值點的序列位置和第二峰值點的序列位置確定節(jié)拍型。
第三確定模塊340,用于根據(jù)第一確定模塊320確定出的第一峰值點的序列位置和取值、第二峰值點的序列位置和取值以及第二確定模塊330確定出的節(jié)拍型確定出第一候選點和第二候選點。
計算模塊350,用于根據(jù)第三確定模塊340確定出的第一候選點、第二候選點和第二確定模塊330確定出的節(jié)拍型計算BPM。
可選地,第二確定模塊330,包括:第一計算單元331、第一判斷單元332、第一確定單元333和第二確定單元334。
第一計算單元331,用于對第二峰值點的序列位置除以第一峰值點的序列位置的結(jié)果進(jìn)行四舍五入取整,得到第一數(shù)值。
第一判斷單元332,用于判斷第一計算單元331計算的第一數(shù)值是否是3的整數(shù)倍。
第一確定單元333,用于當(dāng)?shù)谝慌袛鄦卧?32判斷出第一計算單元331計算的第一數(shù)值是3的整數(shù)倍時,確定節(jié)拍型為3拍型。
第二確定單元334,用于當(dāng)?shù)谝慌袛鄦卧?32判斷出第一計算單元331計算的第一數(shù)值不是3的整數(shù)倍時,確定節(jié)拍型為2拍型。
可選地,第三確定模塊340,包括:第三確定單元341和第四確定單元342。
第三確定單元341,用于根據(jù)第一峰值點的序列位置和節(jié)拍型確定第三峰值點和第四峰值點。
第四確定單元342,用于根據(jù)第一策略從第一峰值點、第三確定單元341確定出的第三峰值點和第四峰值點中確定出第一候選點和第二候選點。
可選地,第三確定單元341還用于根據(jù)第一峰值點的序列位置和節(jié)拍型確定第一序列位置;根據(jù)第一序列位置和預(yù)定誤差范圍確定第三序列范圍;將第三序列范圍內(nèi)取值最大的點確定為第三峰值點;將第一序列位置乘以預(yù)定系數(shù)得到第二序列位置,預(yù)定系數(shù)為大于1的整數(shù);根據(jù)第二序列位置和預(yù)定誤差范圍確定第四序列范圍;將第四序列范圍內(nèi)取值最大的點確定為第四峰值點。
可選地,第四確定單元342還用于利用第一系數(shù)乘以第一峰值點的取值,得到第一峰值;利用第二系數(shù)乘以第三峰值點的取值,得到第二峰值;利用第三系數(shù)乘以第四峰值點的取值,得到第三峰值;確定出第一峰值、第二峰值和第三峰值中的最大值;當(dāng)最大值為第一峰值時,將第一峰值點確定為第一候選點,將第三峰值點確定為第二候選點;當(dāng)最大值為第二峰值時,將第三峰值點確定為第一候選點,將第一峰值點確定為第二候選點;當(dāng)最大值為第四峰值時,將第四峰值點確定為第一候選點,將第三峰值點確定為第二候選點;其中,第一系數(shù)大于第二系數(shù),第二系數(shù)大于第三系數(shù)。
可選地,第三確定模塊340,還包括:第五確定單元343和第六確定單元344。
第五確定單元343,用于根據(jù)第一峰值點的序列位置、第二峰值點的序列位置和節(jié)拍型確定第五峰值點和第六峰值點。
第六確定單元344,用于根據(jù)第二策略從第一峰值點、第二峰值點、第五峰值點和第六峰值點中確定出第一候選點和第二候選點。
可選地,第五確定單元343還用于根據(jù)第一峰值點的序列位置和節(jié)拍型確定第三序列位置;根據(jù)第三序列位置和預(yù)定誤差范圍確定第五序列范圍;將第五序列范圍內(nèi)取值最大的點確定為第五峰值點;根據(jù)第二峰值點的序列位置和節(jié)拍型確定第四序列位置;根據(jù)第四序列位置和預(yù)定誤差范圍確定第六序列范圍;將第六序列范圍內(nèi)取值最大的點確定為第六峰值點。
可選地,第六確定單元344還用于當(dāng)?shù)诙逯迭c的序列位置與第一峰值點的序列位置的間隔小于預(yù)定閾值時,將第一峰值點確定為第一候選點,將第五峰值點確定為第二候選點;當(dāng)?shù)诙逯迭c的序列位置與第一峰值點的序列位置的間隔不小于預(yù)定閾值時,利用第四系數(shù)乘以第一峰值點的取值,得到第四峰值,利用第五系數(shù)乘以第二峰值點的取值,得到第五峰值;當(dāng)?shù)谒姆逯荡笥诘谖宸逯禃r,將第一峰值點確定為第一候選點,將第五峰值點確定為第二候選點;當(dāng)?shù)谒姆逯敌∮诘谖宸逯禃r,將第二峰值點確定為第一候選點,將第六峰值點確定為第二候選點;其中,第四系數(shù)大于第五系數(shù)。
計算模塊350,包括:第二計算單元351、第三計算單元352、第二判斷單元353、第七確定單元354、第三判斷單元355、第八確定單元356、比較單元357、第四計算單元358和第五計算單元359。
第二計算單元351,用于將第一候選點的序列位置代入轉(zhuǎn)換公式,計算得到第一BPM。
第三計算單元352,用于將第二候選點的序列位置代入轉(zhuǎn)換公式,計算得到第二BPM。
第二判斷單元353,用于判斷第二計算單元351計算得到的第一BPM是否在預(yù)定范圍內(nèi)。
第七確定單元354,用于當(dāng)?shù)诙袛鄦卧?53判斷出第一BPM在預(yù)定范圍內(nèi)時,將第二計算單元351計算得到的第一BPM確定為音頻信號片段的BPM。
第三判斷單元355,用于當(dāng)?shù)诙袛鄦卧?53判斷出第一BPM不在預(yù)定范圍內(nèi)時,判斷第三計算單元352計算得到的第二BPM是否在預(yù)定范圍內(nèi)。
第八確定單元356,用于當(dāng)?shù)谌袛鄦卧?55判斷出第二BPM在預(yù)定范圍內(nèi)時,將第三計算單元352計算得到的第二BPM確定為音頻信號片段的BPM。
比較單元357,用于當(dāng)?shù)谝籅PM和第二BPM均不在預(yù)定范圍內(nèi)時,將第二計算單元351計算得到的第一BPM與預(yù)定范圍的上限值和下限值進(jìn)行比較。
第四計算單元358,用于當(dāng)?shù)谝籅PM小于預(yù)定范圍的下限值時,利用第二計算單元351計算得到的第一BPM乘以節(jié)拍型,得到音頻信號片段的BPM。
第五計算單元359,用于當(dāng)?shù)谝籅PM大于預(yù)定范圍的上限值時,利用第二計算單元351計算得到的第一BPM除以節(jié)拍型,得到音頻信號片段的BPM。
綜上所述,本發(fā)明實施例提供的BPM檢測裝置,通過從信號處理后得到的峰值點序列中確定出第一峰值點和第二峰值點,根據(jù)第一峰值點和第二峰值點確定出節(jié)拍型,然后根據(jù)第一峰值點、第二峰值點和節(jié)拍型確定出第一候選點和第二候選點,根據(jù)第一候選點、第二候選點和節(jié)拍型計算BPM,由于第一候選點和第二候選點是根據(jù)第一峰值點、第二峰值點和節(jié)拍型確定出來的,第一峰值點是第一序列范圍內(nèi)取值最大的點,第二峰值點是第二序列范圍內(nèi)取值最大的點,即使是對整體能量幅度比較平均的音樂進(jìn)行檢測,對于第一峰值點和第二峰值點的選取也比較準(zhǔn)確,也就避免了將能量幅度低于預(yù)定閾值的位置作為停頓點時產(chǎn)生的誤差,導(dǎo)致根據(jù)停頓點的周期計算得到的BPM準(zhǔn)確率較低的問題,從而提高了BPM檢測的準(zhǔn)確率。
另外,通過對第二峰值點的序列位置除以第一峰值點的序列位置的結(jié)果進(jìn)行取整,并判斷取整后的數(shù)值是否是3的倍數(shù),從而快速確定出節(jié)拍型是2拍型還是3拍型。
另外,在已經(jīng)確定出節(jié)拍型是2拍型還是3拍型后,根據(jù)第一策略確定出用于計算BPM的第一候選點和第二候選點。由于選取的第一候選點和第二候選點是按照第一策略進(jìn)行過選擇,使得根據(jù)第一候選點和第二候選點計算得到的BPM的準(zhǔn)確率更高。
另外,在確定出節(jié)拍型是2拍型但第一數(shù)值不是2的整數(shù)倍時,表明第一峰值點選取的可能不準(zhǔn)確,根據(jù)第二策略確定用于計算BPM的第一候選點和第二候選點。由于在第一峰值點選取的可能不準(zhǔn)確的情況下,按照第二策略選取合適的第一候選點和第二候選點,使得根據(jù)第一候選點和第二候選點計算得到的BPM的準(zhǔn)確率更高。
另外,在根據(jù)第一候選點計算得到第一BPM,根據(jù)第二候選點計算得到第二BPM后,在第一BPM和第二BPM中進(jìn)行選擇,確定出合適的BPM,在計算得到的第一BPM和第二BPM不在預(yù)定范圍內(nèi)時,通過將第一BPM乘以節(jié)拍型或除以節(jié)拍型,使得最終得到的BPM能夠在預(yù)定范圍內(nèi)。
需要說明的是:上述實施例中提供的BPM檢測裝置在檢測BPM時,僅以上述各功能模塊的劃分進(jìn)行舉例說明,實際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能模塊完成,即將終端的內(nèi)部結(jié)構(gòu)劃分成不同的功能模塊,以完成以上描述的全部或者部分功能。另外,上述實施例提供的BPM檢測裝置與BPM檢測方法實施例屬于同一構(gòu)思,其具體實現(xiàn)過程詳見方法實施例,這里不再贅述。
請參見圖5所示,其示出了本發(fā)明部分實施例中提供的終端的結(jié)構(gòu)方框圖。該終端500用于實施上述實施例提供的BPM檢測方法。本發(fā)明中的終端500可以包括一個或多個如下組成部分:用于執(zhí)行計算機(jī)程序指令以完成各種流程和方法的處理器,用于信息和存儲程序指令隨機(jī)接入存儲器(RAM)和只讀存儲器(ROM),用于存儲數(shù)據(jù)和信息的存儲器,I/O設(shè)備,界面,天線等。具體來講:
終端500可以包括RF(Radio Frequency,射頻)電路510、存儲器520、輸入單元530、顯示單元540、傳感器550、音頻電路560、WiFi(wireless fidelity,無線保真)模塊570、處理器580、電源582、攝像頭590等部件。本領(lǐng)域技術(shù)人員可以理解,圖5中示出的終端結(jié)構(gòu)并不構(gòu)成對終端的限定,可以包括比圖示更多或更少的部件,或者組合某些部件,或者不同的部件布置。
下面結(jié)合圖5對終端500的各個構(gòu)成部件進(jìn)行具體的介紹:
RF電路510可用于收發(fā)信息或通話過程中,信號的接收和發(fā)送,特別地,將基站的下行信息接收后,給處理器580處理;另外,將設(shè)計上行的數(shù)據(jù)發(fā)送給基站。通常,RF電路包括但不限于天線、至少一個放大器、收發(fā)信機(jī)、耦合器、LNA(Low Noise Amplifier,低噪聲放大器)、雙工器等。此外,RF電路510還可以通過無線通信與網(wǎng)絡(luò)和其他設(shè)備通信。所述無線通信可以使用任一通信標(biāo)準(zhǔn)或協(xié)議,包括但不限于GSM(Global System of Mobile communication,全球移動通訊系統(tǒng))、GPRS(General Packet Radio Service,通用分組無線服務(wù))、CDMA(Code Division Multiple Access,碼分多址)、WCDMA(Wideband Code Division Multiple Access,寬帶碼分多址)、LTE(Long Term Evolution,長期演進(jìn))、電子郵件、SMS(Short Messaging Service,短消息服務(wù))等。
存儲器520可用于存儲軟件程序以及模塊,處理器580通過運行存儲在存儲器520的軟件程序以及模塊,從而執(zhí)行終端500的各種功能應(yīng)用以及數(shù)據(jù)處理。存儲器520可主要包括存儲程序區(qū)和存儲數(shù)據(jù)區(qū),其中,存儲程序區(qū)可存儲操作系統(tǒng)、至少一個功能所需的應(yīng)用程序(比如聲音播放功能、圖像播放功能等)等;存儲數(shù)據(jù)區(qū)可存儲根據(jù)終端500的使用所創(chuàng)建的數(shù)據(jù)(比如音頻數(shù)據(jù)、電話本等)等。此外,存儲器520可以包括高速隨機(jī)存取存儲器,還可以包括非易失性存儲器,例如至少一個磁盤存儲器件、閃存器件、或其他易失性固態(tài)存儲器件。
輸入單元530可用于接收輸入的數(shù)字或字符信息,以及產(chǎn)生與終端500的用戶設(shè)置以及功能控制有關(guān)的鍵信號輸入。具體地,輸入單元530可包括觸控面板531以及其他輸入設(shè)備532。觸控面板531,也稱為觸摸屏,可收集用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸控面板531上或在觸控面板531附近的操作),并根據(jù)預(yù)先設(shè)定的程式驅(qū)動相應(yīng)的連接裝置??蛇x的,觸控面板531可包括觸摸檢測裝置和觸摸控制器兩個部分。其中,觸摸檢測裝置檢測用戶的觸摸方位,并檢測觸摸操作帶來的信號,將信號傳送給觸摸控制器;觸摸控制器從觸摸檢測裝置上接收觸摸信息,并將它轉(zhuǎn)換成觸點坐標(biāo),再送給處理器580,并能接收處理器580發(fā)來的命令并加以執(zhí)行。此外,可以采用電阻式、電容式、紅外線以及表面聲波等多種類型實現(xiàn)觸控面板531。除了觸控面板531,輸入單元530還可以包括其他輸入設(shè)備532。具體地,其他輸入設(shè)備532可以包括但不限于物理鍵盤、功能鍵(比如音量控制按鍵、開關(guān)按鍵等)、軌跡球、鼠標(biāo)、操作桿等中的一種或多種。
顯示單元540可用于顯示由用戶輸入的信息或提供給用戶的信息以及終端500的各種菜單。顯示單元540可包括顯示面板541,可選的,可以采用LCD(Liquid Crystal Display,液晶顯示器)、OLED(Organic Light-Emitting Diode,有機(jī)發(fā)光二極管)等形式來配置顯示面板541。進(jìn)一步的,觸控面板531可覆蓋顯示面板541,當(dāng)觸控面板531檢測到在其上或附近的觸摸操作后,傳送給處理器580以確定觸摸事件的類型,隨后處理器580根據(jù)觸摸事件的類型在顯示面板541上提供相應(yīng)的視覺輸出。雖然在圖5中,觸控面板531與顯示面板541是作為兩個獨立的部件來實現(xiàn)終端500的輸入和輸入功能,但是在某些實施例中,可以將觸控面板531與顯示面板541集成而實現(xiàn)終端500的輸入和輸出功能。
終端500還可包括至少一種傳感器550,比如陀螺儀傳感器、磁感應(yīng)傳感器、光傳感器、運動傳感器以及其他傳感器。具體地,光傳感器可包括環(huán)境光傳感器及接近傳感器,其中,環(huán)境光傳感器可根據(jù)環(huán)境光線的明暗來調(diào)節(jié)顯示面板541的亮度,接近傳感器可在終端500移動到耳邊時,關(guān)閉顯示面板541和/或背光。作為運動傳感器的一種,加速度傳感器可檢測各個方向上(一般為三軸)加速度的大小,靜止時可檢測出重力的大小及方向,可用于識別電子設(shè)備姿態(tài)的應(yīng)用(比如橫豎屏切換、相關(guān)游戲、磁力計姿態(tài)校準(zhǔn))、振動識別相關(guān)功能(比如計步器、敲擊)等;至于終端500還可配置的氣壓計、濕度計、溫度計、紅外線傳感器等其他傳感器,在此不再贅述。
音頻電路560、揚聲器561,傳聲器562可提供用戶與終端500之間的音頻接口。音頻電路560可將接收到的音頻數(shù)據(jù)轉(zhuǎn)換后的電信號,傳輸?shù)綋P聲器561,由揚聲器561轉(zhuǎn)換為聲音信號輸出;另一方面,傳聲器562將收集的聲音信號轉(zhuǎn)換為電信號,由音頻電路560接收后轉(zhuǎn)換為音頻數(shù)據(jù),再將音頻數(shù)據(jù)輸出處理器580處理后,經(jīng)RF電路510以發(fā)送給比如另一終端,或者將音頻數(shù)據(jù)輸出至存儲器520以便進(jìn)一步處理。
WiFi屬于短距離無線傳輸技術(shù),終端500通過WiFi模塊570可以幫助用戶收發(fā)電子郵件、瀏覽網(wǎng)頁和訪問流式媒體等,它為用戶提供了無線的寬帶互聯(lián)網(wǎng)訪問。雖然圖5示出了WiFi模塊570,但是可以理解的是,其并不屬于終端500的必須構(gòu)成,完全可以根據(jù)需要在不改變公開的本質(zhì)的范圍內(nèi)而省略。
處理器580是終端500的控制中心,利用各種接口和線路連接整個電子設(shè)備的各個部分,通過運行或執(zhí)行存儲在存儲器520內(nèi)的軟件程序和/或模塊,以及調(diào)用存儲在存儲器520內(nèi)的數(shù)據(jù),執(zhí)行終端500的各種功能和處理數(shù)據(jù),從而對電子設(shè)備進(jìn)行整體監(jiān)控??蛇x的,處理器580可包括一個或多個處理單元;優(yōu)選的,處理器580可集成應(yīng)用處理器和調(diào)制解調(diào)處理器,其中,應(yīng)用處理器主要處理操作系統(tǒng)、用戶界面和應(yīng)用程序等,調(diào)制解調(diào)處理器主要處理無線通信??梢岳斫獾氖?,上述調(diào)制解調(diào)處理器也可以不集成到處理器580中。
終端500還包括給各個部件供電的電源582(比如電池),優(yōu)選的,電源可以通過電源管理系統(tǒng)與處理器580邏輯相連,從而通過電源管理系統(tǒng)實現(xiàn)管理充電、放電、以及功耗管理等功能。
攝像頭590一般由鏡頭、圖像傳感器、接口、數(shù)字信號處理器、CPU、顯示屏幕等組成。其中,鏡頭固定在圖像傳感器的上方,可以通過手動調(diào)節(jié)鏡頭來改變聚焦;圖像傳感器相當(dāng)于傳統(tǒng)相機(jī)的“膠卷”,是攝像頭采集圖像的心臟;接口用于把攝像頭利用排線、板對板連接器、彈簧式連接方式與電子設(shè)備主板連接,將采集的圖像發(fā)送給所述存儲器520;數(shù)字信號處理器通過數(shù)學(xué)運算對采集的圖像進(jìn)行處理,將采集的模擬圖像轉(zhuǎn)換為數(shù)字圖像并通過接口發(fā)送給存儲器520。
盡管未示出,終端500還可以包括藍(lán)牙模塊等,在此不再贅述。
本發(fā)明實施例還提供了一種計算機(jī)可讀存儲介質(zhì),該計算機(jī)可讀存儲介質(zhì)可以是上述實施例中的存儲器中所包含的計算機(jī)可讀存儲介質(zhì);也可以是單獨存在,未裝配入終端中的計算機(jī)可讀存儲介質(zhì)。該計算機(jī)可讀存儲介質(zhì)存儲有一個或者一個以上程序,該一個或者一個以上程序被一個或者一個以上的處理器用來執(zhí)行上述BPM檢測方法。
上述本發(fā)明實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例的全部或部分步驟可以通過硬件來完成,也可以通過程序來指令相關(guān)的硬件完成,所述的程序可以存儲于一種計算機(jī)可讀存儲介質(zhì)中,上述提到的存儲介質(zhì)可以是只讀存儲器,磁盤或光盤等。
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。