中文字幕无码日韩视频无码三区

計算音樂速度估計的制作方法

文(wen)檔(dang)序號:2830542閱(yue)讀(du):776來源:國知局
專利名稱:計算音樂速度估計的制作方法
技術領域
本發明涉及信號處理和信號表征,尤其涉及用于估計與音樂作品的 一小部分相對應的音頻信號的音樂速度的方法和系統。
背景技術
隨著個人計算機和計算機系統的處理能力、數據容量和功能性的增 強,與其他個人計算機互連的個人計算機以及高端計算機系統已變成用 于各種不同類型的信息和包括音樂的娛樂節目傳送的主要媒介。個人計 算機的使用者能從因特網下載大量不同的、數字編碼的音樂片段,將數 字編碼的音樂片段存儲在個人計算機內的大容量存儲設備上或者與個 人計算機關聯的大容量存儲設備上,并且能通過音頻播放軟件、固件和 硬件部件來取回和播放音樂片段。個人計算機使用者能通過因特網從數 以千計的不同無線電臺和其他音頻廣插-機構接收實況的,流式音頻廣 播。
在用戶開始積累了大量的音樂片段,并且開始體驗到需要管理和搜 索他們積累的音樂片段時,軟件和計算機廠家開始提供各種軟件工具來 使得使用者能夠組織、管理和瀏覽存儲的音樂片段。對于音樂片段存儲 和瀏覽操作來說,或者通過依靠使用者或者音樂片段提供商與數字編碼 的音樂片段關聯的、包括標題和縮略說明的文本編碼的屬性,或者通常 更期望地,通過對數字編碼的音樂片段進行分析從而確定音樂片段的各 種特征,來表征音樂片段是經常需要的。作為一個示例,使用者可嘗試 通過大量音樂參數值來表征音樂片段從而將類似的音樂一起放置在特 定目錄或子目錄樹內,并且可將音樂參數值輸入音樂片段瀏覽器從而減 小并集中對特定音樂片段的搜索。更復雜的音樂片段瀏覽軟件可采用音 樂片段表征技術來提供本地存儲和遠程存儲的音樂片段的更復雜的自 動搜索和瀏覽。
演奏或廣播音樂片段的音樂速度是一種通常遇到的音樂參數。收聽 者通常能容易地而且通過直覺來為音樂片段分配音樂速度,或者主要察
6覺的速度,盡管音樂速度的分配一般來說不是明確的,并且給定的收聽 者可給在不同音樂上下文中存在的相同音樂片段分配不同的音樂速度。 然而,由大量收聽者分配的給定音樂片段的按照每分鐘的節拍的主要速 度或音樂速度一般落入一個或幾個離散的窄頻帶中。而且,察覺的音樂 速度一般對應于代表了音樂片段的音頻信號的信號特征。因為音樂速度 是通常被認識的并且是基本的音樂參數,所以計算機使用者、軟件廠家、 音樂提供商和音樂廣播公司都已經認識到對于確定給定的音樂片段的 音樂速度值的有效計算方法的需要,該音樂速度值可用作用于對數字編 碼的音樂片段進行組織、存儲、取回以及搜索的參數。

發明內容
本發明的各種方法和系統實施例涉及對數字編碼的音樂片段的音 樂速度進行計算估計。在如下所述的本發明的某些實施例中,對音樂片 段的 一 小部分進行分析來確定音樂片段的音樂速度。對數字編碼的音樂 片段按照計算方法進行變換來得到對應于該采樣的功率語,依次變換來 得到二維起奏強度矩陣。隨后針對一組對應的頻帶,將二維起奏強度矩 陣變換成 一組起奏強度/時間函數。隨后分析起奏強度/時間函數以得到 最可靠的起奏間隔,該起奏間隔被變換成通過分析所返回的被估計的音 樂速度。


圖1A-圖1G示出了產生音頻波形的多個分量音頻信號或分量波形 的組合。
圖2示出了將復雜波形分解成分量波形頻率的數學方法。 圖3示出了加入幅度相對于頻率和時間的三維標繪圖的第 一頻域標 繪圖。
圖4示出了三維頻率、時間和幅度標繪圖,其中兩列繪出的數據符
合時間z"l和r2處的時間軸。
圖5示出了由對于圖2-圖4所述方法產生的頻譜圖。
圖6A-圖6C示出了本發明的方法實施例中使用的頻譜圖的兩種變
換中的第一種。
圖7A-圖7B示出了針對一組頻帶的起奏強度/時間函數的計算。
7圖8是示出了本發明的 一 音樂速度估計方法實施例的流程控制圖。
圖9A-圖9D示出了起奏間隔和相位的概念。
圖10示出了由圖8中的步驟810所表示的搜索的狀態空間。
圖11示出了根據本發明的實施例,在D(t,b)值的鄰域內的波頂
D(t, b)值的選擇。
圖12示出了在通過連續考慮沿時間軸的起奏間隔的代表性D(t,b)
值來計算可靠度的過程的一個步驟。
圖13示出了根據起奏間隔中的可能的、更高階頻率或音樂速度的
識別減'J、或降低起奏間隔的可靠度。
具體實施例方式
本發明的各種方法和系統實施例涉及針對數字編碼的音樂片段的 估計音樂速度的計算確定。如下詳細地所述,對音樂片段的小部分進行 變換來產生多個起奏強度/時間函數,被分析以確定估計的音樂速度。 在以下討論中,首先概括地討論了音頻信號,隨后討論本發明的方法實 施例中所使用的,用于產生一組頻帶的起奏強度/時間函數的各種變換。 隨后利用圖形說明和流程控制圖來描述起奏強度/時間函數的分析。
圖1A-圖1G示出了產生音頻波形的多個分量音頻信號或分量波形 的組合。盡管圖U-圖1G示出了的波形分量是一般波形分量的特殊情 況,但是示例示出 一 般復雜音頻波形可以由多個簡單的單 一 頻率波形分 量組成。圖1A示出了六個簡單分量波形的第一個的一部分。音頻信號 基本上是通過空間傳播的振蕩氣壓擾動。當在空間中的特定點處隨時間 觀察時,氣壓關于一中值氣壓規則地振蕩。圖1A中的波形102是正弦 波形,沿豎軸畫出氣壓并沿橫軸畫出時間,以圖形方式顯示了在空間特 定點處作為時間的函數的氣壓。聲波強度與聲波的氣壓幅度的平方成比 例。通過按時測量沿從特定距離處的聲源發出的直線的空間中各個點處 的氣壓也得到類似波形。返回到空間特定點處一段時間內的氣壓的波形 表現形式,在波形中任意兩個波頂之間的距離,諸如波頂106和108之 間的距離104,是在氣壓擾動中連續的振蕩之間的時間。該時間的倒數 是波形的頻率。認為圖1A所示的分量波形具有基頻尸,圖1B-圖1F所 示的波形表示基頻的各個高階諧波。諧波頻率是基頻的整數倍。因此, 例如,圖1B所示的分量波形的頻率2尸,是圖1A所示基頻的頻率的兩倍,因為在具有基頻f的分量波形中發生一個周期的同時,在圖IB所示的
分量波形中發生了兩個完整的周期。圖1C-圖1F的分量波形的頻率分別 是;3/,4/, ^和ef。圖1A-圖IF所示的六個波形的總和產生圖1G所示 的音頻波形110。音頻波形可以表示在弦樂器或管樂器上演奏的單個音。 音頻波形具有比圖1A-圖1F所示的正弦、單一頻率、分量波形更復雜的 形狀。然而,音頻波形可被看成以基頻尸重復,并且展現出在更高頻率 處的規則模式。
與復雜音樂片段相對應的波形,諸如樂隊或管弦樂隊演奏的歌曲, 可以是極復雜的由好幾百個不同的分量波形組成。如在圖1A-圖1G的示 例中所看到的,通過目測或直覺^^圖1G中所示的波形110分解成圖1A-圖1F所示的分量波形將會非常困難。對于代表演奏的音樂分量的非常 復雜的波形來說,通過目測或直覺進行分解實際上是不可能的。已經開 發出數學方法來將復雜波形分解成分量波形頻率。圖2示出了將復雜波 形分解成分量波形頻率的數學方法。在圖2中,示出了相對于時間繪制 的復雜波形202的幅度。該波形能利用短時傅立葉變換方法進行數學變 換,來產生針對給定短時間段在一頻率范圍內的每個頻率處的分量波形 的幅度的繪圖。圖2示出了連續短時傅立葉變換204:
其中,^是一時間點, ^("是描繪波形的函數, —"是時間窗函數, "是所選頻率,以及
^V")是波形W。中頻率"在時間5的分量波形的幅度、壓力或能量。
和短時傅立葉變換的離散形式206: J(歷,= $ z[/ ]伊["—y ]e—細"
其中,歷是所選的時間間隔,
^W是描繪波形的離散函數, 『["-w]是時間窗函數,
"是所選頻率,以及
是波形Z[Z7]中頻率"在時間間隔歷上的分量波形的幅度、壓力
9或能量。
對于時域波形(圖2中的202 ),短時傅立葉變換被應用于以特定 時間點或采樣點為中心的時間窗。例如,圖2所示的連續2 0 4和離散2 0 6 傅立葉變換被應用于以時間^ (或者在離散情況下的時間間隔m) 208 為中心的小的時間窗來產生二維頻域繪圖210,其中沿橫軸212以分貝 (db)為單位畫出了強度并且沿縱軸214畫出了頻率。頻域繪圖210指 示頻率在對波形202有貢獻的《到《-i的頻率范圍上的分量波形的幅度。 連續短時傅立葉變換2 0 4適合用于模擬信號分析,而離散短時傅立葉變 換206適合用于數字編碼波形。在本發明的一個實施例中,使用具有漢 明窗和3584點重疊的4096點快速傅立葉變換,輸入采樣率為4"00Hz, 來產生頻譜圖。
可以把與時域時間7'相對應的頻域繪圖加入到幅度相對于頻率和時 間的三維繪圖中。圖3示出了加入到幅度相對于頻率和時間的三維繪圖 的第一頻域繪圖。圖2所示的二維頻域繪圖214關于繪圖的縱軸向紙面 外旋轉g(T,并且在沿時間軸304的對應于時間^的位置平行于頻率軸 302插入。按照相似方式,通過將短時傅立葉變換應用于時間^處的波 形(圖2中的202 )能得到下一個頻域二維繪圖,并且該二維繪圖能被 添加到圖3的三維繪圖得到具有兩列的三維繪圖。圖4示出了三維頻率、 時間和幅度繪圖,其中兩列畫出的數據位于采樣時間7'和5。按照該方 式繼續,通過對時域內的音頻波形在每個MJ'J間隔的時間間隔連續應用 短時傅立葉變換,能夠生成波形的完整三維繪圖。
圖5示出了由關于圖2-圖4所述方法而得到的頻語圖。圖5是以二 維方式繪制的,而不是如圖3和圖4的三維透視。頻譜圖502具有水平 時間軸504和縱向頻率軸506。頻譜圖包含對于每個采樣時間的一列強 度值。例如,列508對應于通過應用于時間^ (圖2中的208 )處的波 形(圖2中的202 )的短時傅立葉變換所生成的二維頻域繪圖(圖2中 的214)。頻譜圖中的每個單元都包含與對特定時間處的特定頻率計算 的幅度相對應的強度值。例如,圖5中的單元510包含與圖2中根據時 間^處的復雜音頻波形(圖2中的202 )計算的行216的長度相對應的 強度值P"i'《。)。圖5示出了對于頻i普圖502中的兩個額外單元512和514 的功率標記。注釋。頻譜圖可以在計算機存儲器中以二維陣列數值 地編碼,并且通常作為二維矩陣或陣列顯示在顯示裝置上,顯示的單元
10的顏色編碼與功率相對應。
盡管對于不同頻率的分量波形對音頻信號的動態貢獻的分析來說
頻譜圖是便捷的工具,但是頻語圖不強調強度相對于時間的變化率。本 發明的各種實施例從頻譜圖開始利用了兩個附加的變換,來對對應的一
組頻帶產生能從其估計音樂速度的一組起奏強度/時間函數。圖6A-圖 6C示出了在本發明的方法實施例中使用的頻譜圖的兩個變換中的第一 個。在圖6A-圖6B中,示出了頻譜圖的一'j、部分602。在頻諳圖6(M內 的給定點或者單元P("n,能計算出對于由頻譜圖604中的給定點或者 單元所代表的時間和頻率的起奏強度d(" f〉。前一 強度朋("f)被計算為在 時間上在給定點之前的四個點或者單元606-609中的最大值,如圖6A
中的第一表達式610所描述的
/7P(t, /) = max — 2, /"), / (t — 1, f + 1) , p(t — 1, /),戶(t — 1, / — 1))
根據在時間上緊隨著給定單元604的單個單元612來計算下一強度 ,(t'/),如圖6A中表達式614所示的
邵(t, /) = p(£ + 1, /)
隨后,如圖6B所示,項"被計算為與下一功率對應的單元612以及
給定單元604的最大功率值
a = max (/ (t, /) , ,(t 一 /))
最終,在給定點處的起奏強度"("f)被計算為"與,("n之間的差,
如圖6B中的表達式616所示的
t/(t, /) = a_PP(" /)
針對頻譜圖的每個內部點能計算出起奏強度值而產生二維起奏強 度矩陣618,如圖6C所示。在限定了二維起奏強度矩陣的邊界的粗矩形 620內的每個內部點或內部單元與一起奏強度值"("f)關聯。粗矩形意在 當二維起奏強度矩陣覆蓋在從其計算出該二維起奏強度矩陣的頻譜圖 上時,示出二維起奏強度矩陣略去了頻語圖中不能為其計算^m的某 些邊緣單元。
盡管二維起奏強度繪圖包括局部強度變化值,但是這些繪圖 一般還 包含足夠多的噪聲和局部變化,從而很難辨別出音樂速度。因此,在第 二變換中,針對離散頻帶計算出起奏強度/時間函數。圖7A-圖7B示出 了針對一組頻帶的起奏強度/時間函數的計算。如圖7A所示,二維起奏 強度矩陣702能被劃分成多個水平方向的頻帶704-707。在本發明的一個實施例中,使用了四個頻帶
頻帶1: 32. 3Hz到1 076. 6Hz; 頻帶2: 1 076. 6Hz到3229. 8Hz; 頻帶3: 3229. 8Hz到7536. 2Hz;以及 頻帶4: 7536. 2Hz到1 3995. 8Hz。
在這些頻帶的縱列諸如頻帶705中的縱列708內的每個單元中的起 奏強度值,被求和來產生對于每個頻帶6中的每個時間點t的起奏強度值 如圖7A中的表達式710所描述的。對于每個值6的起奏強度值 "(t, A)被單獨收集以產生離散的起奏強度/時間函數,表示為針對每個頻
帶的"W值的一維陣列,圖7B示出了針對其中一個頻帶(band)的繪圖 716。隨后在下文描述的處理中分析針對每個頻帶的起奏強度/時間函 數,來產生音頻信號的估計音樂速度。
圖8是示出了本發明的一個音樂速度估計方法實施例的流程控制 圖。在第一步驟802中,該方法接收電子編碼的音樂,諸如.wav文件。 在步驟804,該方法針對電子編碼的音樂的一小部分來生成頻譜圖。在 步驟806,該方法將頻鐠圖變換成包含^"f)值的二維起奏強度矩陣,如 上面參考圖6A-圖6C所討論的。隨后,在步驟808,該方法將二維起奏 強度矩陣變換成針對一組對應頻帶的一組起奏強度/時間函數,如上面 參考圖7A-圖7B所討論的。在步驟810,該方法通過下文描述的處理來 確定, 一個范圍的起奏間隔在步驟808中所生成的該組起奏強度/時間 函數內的可靠度。最后,在步驟812,該處理選擇最可靠的起奏間隔, 根據該最可靠的起奏間隔來計算估計的音樂速度,并且返回估計的音樂 速度。
由圖8中的步驟810所表示的,用于確定一個范圍的起奏間隔的可 靠度的處理,在下文被描述為類似0++的偽代碼實現。然而,在討論可 靠度確定和估計音樂速度計算的類似0++的偽代碼實現之前,首先參考 圖9-圖13來描述與可靠度確定有關的各種概念,從而有助于后續的類 似0++的偽代碼實現的討論。
圖9A-圖9D示出了起奏間隔和相位的概念。在圖9A和隨后的圖9B-圖9D中,顯示了針對特定頻帶902的起奏強度/時間函數的一部分。在 起奏強度/時間函數的繪圖中的每一列,諸如第一列904,表示出針對特 定頻帶在特定采樣時間的起奏強度值"("W 。在估計音樂速度的處理中
12考慮一個范圍的起奏間隔長度。在圖9A中,考慮短的4列寬的起奏間
隔906-912。在圖9A中,每個起奏間隔都包括在4"的時間間隔上的四 個Z (t,W值,其中At等于與采樣點相對應的短時間段。注意,在實際的
音樂速度估計中,起奏間隔通常長得多,并且起奏強度/時間函數可能 包含幾萬或更多數量的"",W值。為了說明簡潔起見,示例使用了人為 的小值。
在每個起奏間隔("ior )中的相同位置的每個ioi中的"("w值
可以被看作潛在的起奏點,或者強度快速增加的點,其可能表示音樂片
段中的節拍或音樂速度點。評估一個范圍的101以便找出在每個間隔內
的選擇的w位置處具有高w值方面具有最大規則性或者可靠度
的101。換言之,當針對固定長度間隔的一個連續集合的可靠度為高時, 該101典型地表示了在音樂片段內的節拍或頻率。通過分析對于一組對 應的頻帶的一組起奏強度/時間函數所確定的最可靠的101通常與估計 的音樂速度有關。因此,在圖8中的步驟810的可靠度分析考慮了從某 個最小101長度到最大101長度的101長度的范圍,并且針對每個101 長度來確定可靠度。
對于,個選擇的101長度,需,考^慮等于比101長度小1的數,的
強度/時間函數的原點的全部可能的起奏或相位。如果在圖9A中的第一 列904表示時間、那么圖9所示的間隔906-912能被考慮成表示4At間 隔,或者具有零相位的4列寬度的101。在圖9B-圖9D中,間隔的開始 沿時間軸偏移連續的位置,從而分別得到A" 2At和3"的連續相位。 因此,通過針對可能的101長度的范圍來評估相對于^。的全部可能的相 位,或者開始點,能在音樂片段中窮盡地搜索可靠地出現的節拍。圖10 示出了由圖8所示的步驟810所表示的搜索的狀態空間。在圖10中, 沿i,軸1 002畫出了 101長度,沿縱軸1 004畫出了相位,101長度和相 位兩者都是以由每個采樣點所代表的時間段At為增量繪制的。如圖10 所示,考慮了最小間隔大小1 006和最大間隔大小1008之間的全部間隔 大小,并且針對每個IOI長度,考慮了在0與比101長度小1之間的全 部相位。因此,陰影區域IOIO表示了搜索的狀態空間。
如上所述,在每個101內的特定位置處的特定〃(""值被選擇用于
評估101的可靠度。然而,不是確切地選擇該特定位置處的"",w值,而是考慮該位置鄰域內的〃("W值,并且在包括該特定位置的該特定位 置的鄰域內具有最大值的"("W值被選擇為該101的"("w值。圖11示 出了根據本發明的實施例的在〃",W值的鄰域內的峰值"("W值的選擇。
在圖11中,每個101中的最后一個"("w值,諸如""W值no2,是代 表101的最初候選^0值。考慮該候選"&W值周圍的鄰域R ll(M,在 該鄰域內的最大"&W值,在圖ii所示情況下"&W值U06,被選擇為
該101的代表性的,w值。
如上所述,作為高"("W值在起奏強度/時間函數中為每個101所選 擇的代表性"仏W值處出現的規則性,計算對于特定101長度和特定相 位的可靠度。通過連續考慮沿時間軸的各101的代表性〃",w值來計算 可靠度。圖12示出了通過連續考慮沿時間軸的各起奏間隔的代表性 "",W值來計算可靠度的處理的一個步驟。在圖12中,已經到達了 101 1204的特定的代表性"("W值1 202。找到下一 101 1208的下一代表性 "(0)值1206,并且確定下一代表性"("W值是否大于閾值,如圖12中 的表達式1210所示。如果是的話,則增加該IOI長度和相位的可靠度
量度,以表示在相對于當前考慮的IOI 1204的下一 IOI中找到了相對
高的"fc W值。
盡管如參考圖12的上述方法確定的可靠度是確定估計音樂速度時 的一個因素,但是當在IOI內找到更高次音樂速度時,特定I0I的可靠 度被減小。圖13示出根據對起奏間隔中可能的、更高次頻率或音樂速 度的識別來對當前考慮的起奏間隔進行可靠度減小或降低。在圖13中, 當前正在考慮IOI 1 302。如上所述,當關于前一 101 1 308中的候選"("W 值1 306來確定可靠度時,考慮在本101內的最后位置處的"&W值1304 的幅度。然而,如果在由本101表示的頻率的更高次諧波處,諸如在〃",w 值1310-1312處,檢測出很大的"(""值,那么當前考慮的101可被降 低可靠度。在特定101長度的評估期間對在大量該101上的更高次諧波 頻率的檢測,表示在音樂片段中可能存在能更好地估計音樂速度的更 快,更高次諧波音樂速度。因此,如下面要很詳細討論的,當檢測出更 高次諧波頻率時,計算出的可靠度扣除了損失。
提供了以下的圖8所示的步驟81 0和812的類似C+十的偽代碼實現, 來具體說明本發明的一個可能的方法實施例,用于根據從二維起奏強度 矩陣獲得的一組對應頻帶的一組起奏強度/時間函數來估計音樂速度。首先,聲明多個常數
1 const int maxT;
2 const double tDelta;
3 const double Fs;
4 const int maxBands=4;
5 const int numFractiona1Onsets=4;
6 const double ractiona 10nse t s [n固Fract iona 10nset s] = (0. 666, 0. 5, 0. 333, . 25};
7 const double fractionalCoefficients[numFractiona10nsets] = {0. 4, 0. 25, 0. 4, 0. 8};
8 const int Penalty=0;
9 const double g [maxBands] = {1. 0, 1 0, 0. 5, 0. 25);
這些常數包括(1 )第1行聲明的maxT,表示針對起奏強度/時間 函數的沿時間軸的最大時間樣本或者時間索引;(2)第2行聲明的 tDelta,包含由每個采樣表示的時間段的數值;(3)第3行聲明的Fs, 表示每秒收集到的采樣;(4)第4行聲明的maxBands ,表示了最初的 二維起奏強度矩陣能被分割成的頻帶的最大數量;(5)第5行聲明的 numFractionalOnsets,表示了在每個101內與高次諧波頻率相對應的 位置的數量,這些高次諧波頻率被評估以確定在可靠度確定期間用于 IOT的損失;(6 )第6行聲明的fractionalOnsets,為包含在損失計 算期間考慮的分數起奏中的每一個在101內位于101的分數的陣列; (7 )第7行聲明的fractionalCoefficients,為在101的損失的計算 期間出現在IOI內考慮的分數起奏處的"","值所乘的系數的矩陣;(8) 第8行聲明的Penalty,在101的代表性"("W值落入闊值以下時從評估
的可靠度中減掉的值;以及(9)第9行聲明的g,在每個頻帶中每個所 考慮的101的可靠度所乘以的增益值的陣列,從而比在其他頻帶中的相 應可靠度更高地對特定頻帶中的101的可靠度加權。
接下來,聲明兩個類。首先,下面聲明類"OnsetStrength":
1 class OnsetStrength
2 {
3 private:
4 int D—t [隨T];
5 int sz;
6 int minFj
7 int maxF;
8
9 public:
10 int operator [] (int i);
11 Uf (i<0 II i>=maxT) return -l;else return (D t[i]););
12 int getSize () {return sz;)j
13 int getMaxF () {return maxF;};
14 int getMinF() {return minF;};15 OnsetStrength ();
16 };
類"OnsetStrength"表示對應于一頻帶的起奏強度/時間函數,如參考圖7A-圖7B所討論的。沒有提供該類的完整的聲明,這是由于它只被用來提取出用于可靠度的計算的"(""值。私有數據成員包括(1)第4行聲明的D—t,為包含〃",W值的陣列;(2)第5行聲明的sz,起奏強度/時間函數中的〃&W值的量或者數量;(3)第6行聲明的minF,由類"OnsetStrength"的一個實例代表的頻帶內的最小頻率;以及(4)maxF,由類"OnsetStrength"的 一 個實例代表的最大頻率。類"OnsetStrength"包括四個公有函數成員(l)第IO行聲明的operator[],其提取與指定索引或采樣序號相對應的〃(t'6)值,從而類OnsetStrength的實例起一維陣列的作用;(2)三個函數getSize,getMaxF和getMinF, 分另ll返回私有數據成員sz, minF和maxF的當前值;以及(3)構造器。
接下來,聲明了類"TempoEstimator":
1 class TempoEstimator
2 (
3 private:
4 OnsetStrength*D;
5 int numBands;
6 int maxI0I;
7 int minIOI;
8 int thresholds[maxBands];
9 int fractionalTs[nufflFractionalOnsets];
10 double reliabi1ities [maxBands] [maxT];
11 double finaIReliabi1ity [maxT]
12 double penalties[maxT];
13
14 int findPeak (0nsetStrength& dt, int t, int R);
15 void computeThresholds();
16 void computeFractionalTs(int 101);
17 void nxtReliabi1ityAndPenalty
18 (int 101, int phase, int band, double & reliability
19 double & penalty);
20 public:
22 void setD (0nsetStrength*d, int b) {D=d, numBands=b;};
23 void setMaxIOI (int mxl01)(隨I0I,I0I;);
24 void setMinIOI (int ranIOI) (minlOI,IOI;};
25 int estimateTempo ();
26 TempoEst imator ();
27 );
類"TempoEstimator"包括以下私有數據成員(1)第4行聲明的D,代表一組頻帶的起奏強度/時間函數的、類"OnsetStrength"的實例的陣列;(2)第5行聲明的numBands,其存儲當前被考慮的頻帶以及起奏強度/時間函數的數量;(3)第6-7行聲明的maxIOI和min101,在可靠度分析中要被考慮的最大101長度和最小101長度,分別對應于圖10中的點1 008和1006; ( 4 )第8行聲明的thresholds,計算出的
(5)第9行聲明的fractionalTs,在根據當前考慮的101內的更高次頻率的出現的針對101的損失的計算期間,與要考慮的分數起奏相對應的,從101的起點的按照"的偏移;(6)第IO行聲明的reliabilities,存儲每個101長度在每個頻帶中的計算的可靠度的二維陣列;(7)第11行聲明的finalReliability,存儲最終可靠度的陣列,最終可靠度是通過將針對一個范圍的101內的每個101長度確定的可靠度對于每個頻帶求和所計算出的;以及(8)第12行聲明的penalties,存儲了在可靠度分析期間計算出的損失。類"TempoEstimator"包括以下私有函數成員(1 )第14行聲明的findPeak,其指出鄰域R內的最大峰值的時間點,如參考圖11所討論的;(2 )第15行聲明的computeThresholds,其計算存儲在私有數據成員thresholds中的閾值;(3)第16行聲明的computeFractionalTs,其計算從特定長度的101的起點的時間上的偏移,與用于計算損失所考慮的更高次諧波頻率相對應;(4)第17行聲明的nxtReliabilityAndPenalty,其針對特定101長度、相位和頻帶來計算下一可靠度和損失值。類"TempoEstimator"包括以下公有函數成員(1 )第22行聲明的setD,其使得多個起奏強度/時間函數可以被加載到類"TempoEstimator"的實例中;(2 )第23-24行聲明的setMax和setMin,其使得定義了在可靠度分析中考慮的101的范圍的最大和最小101長度可以被設置;(3) estimateTempo,其根據存儲在私有數據成員D中的起奏強度/時間函數來估計音樂速度;以及(4)構造器。
接下來,提供了類"TempoEstimator"的各種函數成員的實現。首先,提供了函數成員"findPeak"的實現
1 int TempoEstimator::findPeak (OnsetStrength& dt, int t, int R)
2 {
3 int max-0;
4 int nextT;
5 i n t i',
6 int start=t—R/2;7 int finish=t+R;
8
9 if(start〈0) start=0;
10 if (finish〉dt. getSize ()) finish=dt.getSize 0;
11
12 for(i=start; Kfinish; i++)
13 {
14 if (dt [i] >max)
15 {
16 max-dt[i];
17 nextT=i;
18 )
19 }
20 return next;
21 }
函數成員"f indPeak"接收時間值和鄰域大小作為參數t和R,并
且作為對起奏強度/時間函數dt的基準,在時間點t周圍的鄰域內在起
奏強度/時間函數dt中找到最大峰值,如參考圖11所討論的。函數成
員"findPeak"在第9-10行計算與限定了鄰域的橫軸點相對應的開始
時間和結束時間,隨后,在第12-19行的for循環中,在該鄰域中檢查每個Z^,)值以確定最大Z (t,A)值。在第20行返回與最大"("W相對應的
索引或時間值。
接下來,提供了函數成員"computeThresholds"的實現
1 void TempoEstimator: :computeThresholds ()
2 {
3 int i, j;
4 double sum;
6 for(i-O; i<numBands; i++)
7 {
8 sum=0. 0;
9 for(j=0; j<D [i]. getSize (); j++)
10 (
11 sum+=D [i] [ j];
12 J
13 thresholds[i]=int (sum/j);
14 )
15 )
該函數計算了針對每個起奏強度/時間函數的平均"("W值,并且將平均W值存儲為針對每個起奏強度/時間函數的閾值。
接下來,提供了函數成員"nxtReliabilityAndPenalty"的實現
1 void TempoEs t ima tor::nxtReliabilityAndPenalty
2 (int 101, int phase, int band, double & reliability,<formula>formula see original document page 19</formula>函數成員"nxtReliabilityAndPenalty"針對指定的101大小,或長度,指定的相位以及指定的頻帶來計算可靠度和損失。換言之,這子程序被調用來計算在二維私有數據成reliabilities中的每個值。在第6-7行聲明的局部變量valid和peak被用來在分析起奏強度/時間函數時對高于閾值的IOI和總的101的計數進行累加,來計算針對指定的101大小、相位和指定的頻帶的可靠度和損失。第8行聲明的局部變量t被設置成指定的相位。第10行聲明的局部變量R是鄰域的長度,從該鄰 域來選擇代表性"("W值,如參考圖ll在上面所討論的。
在第19-38行的while循環中,考慮了長度101的連續""'"值的 連續組。換言之,可以認為循環的每次迭代是分析沿繪制的起奏強度/ 時間函數的時間軸的下一個101。在第21行,計算下一個101的代表性 "(^)值的索引。在第22行局部變量peak被遞增來表示已經考慮了另 一個101。如果針對下一個IOI的代表性"("W值的幅度大于閾值,如第 23行所確定的,那么在第25行局部變量valid被遞增來表示檢測到了 另一有效的代表性"(。W值,并且在第26行該"",W值被添加到局部變 量reliability。如果針對下一個101的代表性"仏6)值不大于閾值,那 么局部變量reliability將被減去數值penalty。隨后,在第30-35行 的for循環中,根據對在當前考慮的IOI內的更高次節拍的檢測來計算 損失。該損失被計算成 一 系數乘以在 IOI內的由常數 numFract iona 1 Onsets 和P車歹寸 FractionalTs 指定的各次間 (inter-order )諧波峰值的珠,)值。最后,在第37行t以指定的IOI 長度7Y /被遞增,來索引下一個IOI來準備第19-38行的while循環的 隨后的迭代。通過在第39-41行上對局部變量valid和peak的內容的 乘積進行平方根運算,來對針對IOI長度、相位和頻帶的累加的可靠度 和損失進行歸一化。在替代實施例中,在第37行上nextT可以被遞增 101,并且通過調用第21行上的findPeak(D[band], nextT + IOI, R)
來找到下一個峰值。
接下來,提供了用于函數成員"computeFractionalTs"的實現
1 void TempoEsUmator: : computeFractionalTs (int 101)
2 {
3 int
4
5 for (i = 0; i < numFractionalOnsets;
6 {
7 fractionalTs[i] = int {IOI * fractional0nsets [i]);
8 }
9 }
該函數成員簡單地根據存儲在常數陣列"fractional0nsets"中的 各分數起奏計算從指定長度的101的起點的時間上的偏移。 最后,提供了用于函數變量"EstimateTempo"的實現
1 int TempoEstimator: : estimateTempo0
2 {3 int band;
4 int 101;
5 int 1012;
6 int phase;
7 double reliability = 0.0;
8 double penal ty = 0. 0;
9 int estimate = 0;
10 double ej
11
12 if (D== 0) return-1;
13 for (101 = minIOI; 101 < maxIOI; I0I++)
14 {
15 penalties [IOI] = 0. 0;
16 finalReliability[IOI]
17 for (band = 0; band <
18 (
19 reliabilities [band] [IOI] = 0. 0;
20 )
21 )
22 computeThresholds0;
23
24 for (band = 0; band < numBands; band++)
25 {
for (IOI = minIOI; IOI < maxIOI; IOI++)
=0. 0;
numBands; band++)
26
27 {
28
29
30
31
32
33
34
35
36
37
38
39
40 }
41 }
42
43 for (IOI = minIOI; IOI < maxIOI; I0I++)
44 {
45 reliability = 0, 0;
46 for (band = 0; band < numBands; band++)
47 {
48 IOI2 = IOI / 2;
49 if (IOI2 〉= minIOI)
50 reliabi1i ty +=
51 g[band] * (reliabi1ities[band][IOI]
computeFracticmalTs (IOI); for (phase = 0; phase < IOI -l; phase十+)
nxtReliabilityAndPenalty
(IOI, phase, band, reliability, penalty); if (reliabi1ities[band] [IOI] < reliability)
reliabi1ities [band] [IOI] = reliability; pena1ties[IOI] = penalty;
reliabilities [band] [IOI] —= 0.5 * pena11ies [101];<formula>formula see original document page 22</formula>
函數成員"estimateTempo"包括局部變量(1 )第3行聲明的band, 指定了要考慮的當前頻帶或者起奏強度/時間函數的迭代變量;(2)第 4行聲明的為當前考慮的IOI長度;(3 )第5行聲明的M",為 當前考慮的IOI長度的一半;(4)第6行聲明的phase,針對當前考慮 的IOI長度的當前考慮的相位;(5)第7行聲明的reliability,針對 當前考慮的頻帶、IOI長度和相位計算的可靠度;(6) penalty,針對 當前考慮的頻帶、IOI長度和相位計算的損失;(7)第9-IO行聲明的 esti腿te和e,用來計算最終的音樂速度估計。
首先,在第12行,檢查看是否已經將一組起奏強度/時間函數輸入 到類"TempoEstiinator"的當前實例。其次,在第13-21行,初始化在 音樂速度估計中使用的各種局部和私有數據成員。隨后,在第22行, 計算用于可靠度分析的閾值。在第24-41行的for循環中,針對每個頻 帶、每個考慮的IOI長度的每個相位來計算可靠度和損失。在第39行 在當前考慮的IOI長度和當前考慮的頻帶的全部相位上計算出的最大可 靠度和對應的損失被確定,并存儲為針對當前考慮的IOI長度和頻帶找 到的可靠度。接下來,在第43-56行的for循環中,通過跨各頻帶對101 長度的可靠度求和,來計算出每個IOI長度的最終可靠度,每一項都乘 上存儲在常數陣列"g"中的增益因子,從而比其他頻帶更多地加權某些頻帶。當與當前考慮的101的一半長度的ioi相對應的可靠度可用時, 在該計算中將當前考慮的101的可靠度與一半長度101的可靠度相加, 因為根據經驗發現特定101的可靠度的估計可能取決于針對該特定ioi
長度一半長度的101的可靠度的估計。在第55行,針對時間點計算出的 可靠度被存儲在數據成員finalReliability中。最后,在第59-"行 的for循環中,通過搜索數據成員finalReliability找到針對任意101 長度的總體上最大的計算出的可靠度。在第68-71行使用針對任意101 長度的總體上最大的計算出的可靠度來計算按照每分鐘的節拍的估計 音樂速度,該估計音樂速度在第71行返回。
盡管已經按照特定實施例描述了本發明,但是它并非要將本發明限 制于這些實施例。在本發明的實質范圍內的變型對本領域技術人員來說 是顯而易見的。例如,通過利用不同的模塊構成、數據結構、編程語言、 控制結構以及通過變化其他編程和軟件工程參數能設計出基本上不受 數量限制的本發明的替代實施例。為了在針對不同類型的音樂片段的各 種不同的環境下實現最優音樂速度估計,可以改變在上述實現中使用的 各種不同的經驗數值和方法。例如,可以考慮各種不同的分數起奏系數 和分數起奏的數量,用于根據更高次諧波頻率的存在來確定損失。可以 采用通過多種方法中的任意 一種利用表征這些方法的不同參數得到的 頻語圖。可以改變在分析期間可靠度被遞增、遞減以及由其來計算損失 的確切值。可以改變被采樣來產生頻鐠圖的音樂片段的部分的長度。通 過替代方法可以計算起奏長度,并且可使用任意數量的頻帶作為計算起 奏強度/時間函數數量的基礎。
為了說明的目的,前面的描述使用了特定的術語以提供對本發明的 全面的理解。然而,對于本領域技術人員來說顯而易見的是,為實施本 發明并非要求該特定細節。為了說明和描述的目的,給出了本發明的特 定實施例的上迷說明。它們并非意在窮盡本發明或將本發明限制于所公 開的精確的形式。根據上迷指教作出許多變型和改變明顯是有可能的。 為了更好的解釋本發明的原理及其實際應用示出并描述了這些實施例, 從而使得本領域其他技術人員能將本發明以及具有各種適合變型的各 種實施例利用到設想到的特定用途。本發明的范圍意在由所附權利要求 及其等同物所限定。
權利要求
1. 一種計算估計音樂片段的音樂速度的方法(圖8),該方法包括選擇音樂片段的一部分;針對音樂片段的所選擇的部分來計算(804)頻譜圖(502);針對一組對應的頻帶(704-707),將頻譜圖變換(806)成一組起奏強度/時間函數(716);通過對起奏間隔長度范圍內的每個起奏間隔長度(906-912)的可能相位進行分析,包括對與每個起奏間隔長度對應的更高頻率諧波進行分析,來分析該組起奏強度/時間函數,以確定最可靠的起奏間隔長度(808,8100),以及根據最可靠的起奏間隔長度來計算音樂速度估計(812)。
2. 如權利要求1所述的方法,其中針對一組對應的頻帶(704-707 ), 將頻語圖(502 )變換成一組起奏強度/時間函數(716)還包括將頻鐠圖(502 )變換成二維起奏強度矩陣(618);選擇一組頻帶;以及針對每個頻帶,計算起奏強度/時間函數。
3. 如權利要求2所述的方法,其中將頻譜圖(502 )變換成二維起 奏強度矩陣(618 )還包括針對頻語圖中由采樣時間t和頻率f索引的每個內部點值^"n, 計算針對采樣時間t和頻率f的起奏強度值^m, 將所計算出的起奏強度值^^,f)包括在以t和f為索引的二維 起奏強度矩陣單元中;其中針對對應的頻諳圖內部點值n,起奏強度值〃",n被計算為 d", /) =max/) , / pU—/)) —p/7", /)其中/7/7(t' /') = p(t + 1, /);其中,選擇一組頻帶(704-707 )還包括將頻譜圖中包括的頻率范 圍分割成多個頻帶;并且其中針對頻帶b來計算起奏強度/時間函數還包括針對每個采樣時間~,通過將二維起奏強度矩陣(618 )中t = ~ 并且f處在與頻帶b相關聯的頻率范圍內的起奏強度值〃("f)求和,來計算起奏強度值"U,, 6)。
4. 如權利要求l所述的方法,其中通過對在起奏間隔長度范圍內的每個起奏間隔長度的可能相 位進行分析,包括對每個起奏間隔長度的更高頻率諧波進行分析,來分析該組起奏強度/時間函數(716),以確定最可靠的起奏間隔長度 (906-912 )還包括針對與頻帶b對應的每個起奏強度/時間函數,對于起奏間隔長度范圍內的每個起奏間隔長度的每個可能的相位 計算可靠度,對針對每個起奏間隔長度計算出的可靠度在頻帶(704-707 )上求和,以得到針對每個起奏間隔長度的最終計算出的可靠度,并且選擇具有最大的最終計算出的可靠度的起奏間隔長度為最終的最 可靠的起奏間隔長度;并且其中,根據最可靠的起奏間隔長度來計算音樂速度估計還包括,利 用每個固定時間段收集的用于得到頻語圖(502 )的采樣點的固定數量, 以及利用每個采樣點所代表的時間間隔,從以采樣點為單位的最可靠的 起奏間隔長度來計算按照每分鐘的節拍的音樂速度。
5. 如權利要求4所述的方法,其中計算一特定相位下的一起奏間 隔長度(906-912 )的可靠度還包括初始化該起奏間隔長度的可靠度變量和損失變量; 從距起奏強度/時間函數(716)的原點移位了該相位的采樣時間開始,并且繼續到已經考慮了在起奏強度/時間函數內的采樣點的全部起奏間隔長度為止選擇采樣點的下 一 當前考慮的起奏間隔長度,對于采樣點的該選擇出的下 一起奏間隔長度,從起奏強度/時 間函數中選擇代表性"U,扮值,當選擇的代表性扮值大于閾值時,將可靠度變量遞增一數值,當在采樣點的該當前考慮的起奏間隔長度內檢測出可能的更 高次節拍頻率時,將損失變量遞增一數值,以及當選擇的代表性扮值大于閾值時;以及 根據在可靠度變量和損失變量中的數值來計算該起奏間隔長度的可靠度。
6. —種音樂速度估計系統,包括計算機系統,其能接收數字編碼的音頻信號;以及軟件程序,其通過下列步驟來估計數字編碼的音頻信號的音樂速度選擇音樂片段的一部分;針對音樂片段的所選擇部分來計算(804)頻譜圖(502 );針對一組對應的頻帶(704-707 ),將頻譜圖變換(806 )成一組起 奏強度/時間函數(716);通過對起奏間隔長度范圍內的每個起奏間隔長度的可能相位進行 分析,包括對與每個起奏間隔長度對應的更高頻率諧波進行分析,分析 該組起奏強度/時間函數,來確定最可靠的起奏間隔長度(808, 8100, 906-91 2 ),以及根據最可靠的起奏間隔長度來計算音樂速度估計(812)。
7. 如權利要求6所述的音樂速度估計系統,其中針對一組對應的 頻帶(704-707 ),將頻譜圖(502 )變換成一組起奏強度/時間函數("6 ) 還包括將頻語圖變換成二維起奏強度矩陣(618);選擇一組頻帶;以及針對每個頻帶,計算起奏強度/時間函數。
8. 如權利要求7所述的音樂速度估計系統,其中將頻譜圖(502 ) 變換成二維起奏強度矩陣(618)還包括針對頻語圖中由采樣時間t和頻率f索引的每個內部點值P"n, 計算針對采樣時間t和頻率f的起奏強度值"("f),并且 將所計算出的起奏強度值^"n包括在以t和f為索引的二維起奏強度矩陣單元中;其中針對對應的頻譜圖內部點值f),起奏強度值"",^被計算為CK,, /) ,X (pU, /) , /7/7"—/)) ,", /)其中/) = p(t + 1,/)而且/0 =畫- 2, /), p(t - 1, / + 1), p(t - 1, / ), p(t - 1, f - l)). 并a其中針對頻帶b來計算起奏強度/時間函數還包括針對每個采樣時間~,通過將在二維起奏強度矩陣中t =《并且f處在與頻帶b相關聯的頻率范圍內的起奏強度值〃",n求和,來計算起奏 強度值"U,, 6)。
9. 如權利要求6所述的音樂速度估計系統,其中通過對在起奏間 隔長度范圍內的每個起奏間隔長度的可能相位進行分析,包括對每個起 奏間隔長度的更高頻率諧波進行分析,來分析該組起奏強度/時間函數(716),以確定最可靠的起奏間隔長度(906-912 ),還包括 針對與頻帶b對應的每個起奏強度/時間函數,對于起奏間隔長度范圍內的每個起奏間隔長度的每個可能相位計算可靠度,對針對每個起奏間隔長度計算出的可靠度在頻帶(704-707 )上求 和,以針對每個起奏間隔長度得到最終計算出的可靠度;以及選擇具有最大的最終計算出的可靠度的起奏間隔長度為最終的最 可靠的起奏間隔長度。
10. 如權利要求9所述的音樂速度估計系統,其中計算一特定相位下的 一起奏間隔長度的可靠度還包括初始化該起奏間隔長度的可靠度變量和損失變量; 從距起奏強度/時間函數(716)的原點移位了該相位的采樣時間開 始,'并且繼續到已經考慮了在起奏強度/時間函數內的采樣點的全部的 起奏間隔長度(906 - 912 )為止選擇采樣點的下 一 當前考慮的起奏間隔長度, 對于采樣點的該選擇出的下 一起奏間隔長度,從起奏強度/時 間函數中,選擇代表性"(6)值,當選擇的代表性"U,扮值大于閾值時,將可靠度變量遞增一數值,當在采樣點的當前考慮的起奏間隔長度內檢測出可能的更高 次節拍頻率時,將損失變量遞增一數值,以及當選擇的代表性"(,,6)值大于閾值時;以及 根據在可靠度變量和損失變量中的數值來計算該起奏間隔長度的 可靠度。
全文摘要
本發明的各種方法和系統實施例涉及數字編碼的音樂片段的音樂速度的計算估計。在下文所述的本發明的有些實施例中,對音樂片段的一小部分加以分析來確定音樂片段的音樂速度。數字編碼的音樂片段采樣被計算地變換以產生對應于該采樣的功率頻譜,接著被變換來產生二維起奏強度矩陣(618)。二維起奏強度矩陣隨后被變換(806)成一組對應的頻帶(704-707)中的每個的起奏強度/時間函數(716)的組。隨后分析起奏強度/時間函數來求出最可靠的起奏間隔(808,8100),該最可靠的起奏間隔被變換成由分析(812)返回的估計的音樂速度。
文檔編號G10H1/40GK101512636SQ200780033733
公開日2009年8月19日 申請日期2007年9月11日 優先權日2006年9月11日
發明者R·薩馬達尼, S·維道森, T·張, Y·-Y·常 申請人:惠普開發有限公司
網友(you)詢問留(liu)言(yan) 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1