時間:2019年2月
版本:1.7.2html
miraudio不只支持傳入Floder,cell array,也支持傳入txt文件做爲參數。使用mirgetdata和get獲取結果。算法
載入音頻文件,重點是能夠把Matlab column vector經過指定採樣率轉化成音頻。
默認載入後轉化爲單聲道。windows
重要的是要指定幀間距和幀長。幀長能夠經過秒和採樣兩種方式。幀間距也能夠經過比例等多種形式。函數
提供多種Filter模型,還能夠指定本身的模型。
學習
能夠從音頻波形計算包絡,其顯示信號的全局外形。 它對於顯示信號的長期演變特別有用,而且特別適用於諸如音符之類的音樂事件的檢測。
有兩種策略,一種是基於Filter的,一種是Spectro的。還有不少相關的操做,諸如降採樣,半波整流等。spa
離散傅里葉變換。默認結果最小值0Hz,最大值爲採樣率的一半。
命令行
快速傅里葉變換要求長度爲power of 2,因此對audio waveform進行了zero-padding。也可使用'Mel'or'Bark'等參數對結果進行重構。code
諧波序列也可用於檢測基頻自己。 一個想法是查看頻譜表示,並嘗試自動檢測這些週期序列。 一個簡單的想法在於執行傅里葉變換自己的傅立葉變換,從而產生所謂的倒譜(Bogert等,1963)。orm
評估信號週期性的另外一種方法(不管是音頻波形,頻譜,包絡等)包括查看樣本之間的局部相關性。htm
計算連續Frame間的距離。
彷佛只能對三維數據的最後一維進行求和。也可使用'Mean'直接求均值。
標記頂點。
對audio waveform進行劃分。
Mirfdw使用濾波器相關窗口(FDW)計算頻譜子帶特徵。 與小波變換相似,FDW使用基於每一個子帶濾波器的中心頻率的單獨幀大小。結果默認是10個單獨的結果組成的cell。
對信號x的全局能量可使用root mean square(RMS)來表示。RMS-Frame和envelope結果很類似。
計算小於RMS均值的比例。基於RMS-Frame。默認幀長50ms,幀間距爲25ms。
處理音頻信號中對於節奏的估計
估計節奏的一種方法是基於變換的頻譜圖計算(FFT),經過聽覺建模,而後是每一個頻段的頻譜估計(Pampalk等,2002)。mirfluctuation就是Pampalk提出的模型。
默認參數爲23ms/frame,頻率80Hz。默認用的是Bark bands,可使用mirfluctuation(…, 'Mel')
替換爲Mel波段。
(下圖均爲左圖是Mel bands,右圖)s = mirspectrum(rag,'Frame',.023,'s',80,'Hz','Power','Terhardt','Mel','Mask','dB')
和s = mirspectrum(rag,'Frame',.023,'s',80,'Hz','Power','Terhardt','Bark','Mask','dB')
得到未經FFT的結果:
f = mirspectrum(s, 'AlongBands', 'Max', 10, 'MinRes', .01,'Window', 0, 'Resonance', 'Fluctuation', 'NormalLength')
進行FFT(FFT的參數爲.01Hz,使用mirfluctuation(..., 'MinRes', mr)
修改)。橫座標頻率,縱座標波段。橫座標默認是10Hz( mirfluctuation(..., 'Max', m)
修改最大值),縱座標25-bands(Bark bands應該是20啊?爲啥是25),使用Mel bands後縱座標爲40-bands。
mirfluctuation(..., 'Summary')
得到統計信息:
也可使用
mirsum(f)
生成,能夠應用到全部二維形式結果的統計。
修改默認參數:
>> mirfluctuation(rag, 'InnerFrame', 0.010, 30)
節奏頻譜,經過計算時滯函數的自類似性,類似矩陣,參考mirsimatrix。
Q:爲何橫座標只到4s?
肯定節拍的另外一種方式是首先基於檢測曲線的計算,示出對應於連續脈衝的連續能量脈衝串。 在檢測曲線上自動執行峯值拾取,以顯示事件的估計位置,例如音符,和絃等。峯值是經過mirpeaks標註的。
基於envelope(default)。包括Spectro(default)和Filter兩種主要形式,默認參數均與mirenvelope相同。
形狀和envelope也很相同,Filter幾乎一致,而Spectro只是振幅比例發生了明顯變化。
此外,還有分別基於mirflux、Emerge、mirpitch、mirnovelty的多種方法,結果分別以下:(不管哪一種探測曲線的計算方法,最後都會被轉化成envelope形式)
The 'Effort' method comes from Timbre Toolbox (Peeters et al., 2011). To get the same results as in Timbre Toolbox, use the following options: mirevents(r, 'Attack', 'Effort', 'Filter', 'CutOff', 5, 'Down', 0, 'Alpha', 3)
:
可使用獲得的結果進行波形的劃分,不一樣的model獲得的數值都是不一樣的,對波形的劃分也不一樣。添加Frame參數獲得一個劃分好的結果,默認參數幀長3s,幀間距0.3s。
兩個現成的模型,分別來自(Scheirer, 1998)和(Klapuri., 1999)。
Q:這麼多模型,哪一個效果最好?
統計每秒events的數量,依賴於選擇的events模型。
經過檢測事件檢測曲線的週期來估計節拍。
方法一:用於節奏估計的經典範例基於檢測一系列BPM中的週期性,而且分別選擇每一個幀的最大週期性得分。步驟:1.events,默認envelope;2.Frame,幀長3s,間距0.3s;3.週期性探測,分別爲Autocor模式、Spectrum模式、混合模式。
[t ac] = mirtempo(r, 'Frame')
Q:橫縱座標含義?
方法二:經過構建分層的度量結構(使用mirmetre)來跟蹤速度。 這使得可以找到連貫的測量級別,從而產生連續的節奏曲線。
經過檢測事件檢測曲線的週期性並跟蹤大量的度量級別,提供層次度量結構的詳細描述。
步驟:1.mirevents,默認Emerge且沒有事件檢測('Detect' set to 0);2.mirautocor,默認幀長5s,間距0.25s,最小值24bpm;3.peak picking
Q: 橫縱座標含義?上圖爲直接傳入miraudio參數。
使用get彷佛能獲得一些更有用的結果:
Q:lag的含義?
提供從使用mirmetre進行的度量分析得出的兩個描述,以及進一步選擇的主要度量級別。結果也是一個BPM的數。
估計節奏清晰度,表示由mirtempo函數估計的節拍強度。能夠選擇多種清晰度的計算方式,全部的結果都是基於temop算出的autocorrelation curve。默認的是MaxAutocor。除此之外,還有一些基於簡單的檢測曲線自己的方法。
還有兩種模式能夠選擇,模式1獲得的結果和默認結果不相同,模式2不知爲啥運行不出來。
在mirattacktime中提出的描述attack phase的一種簡單方法在於估計其時間持續時間。來源於mirevents的Attacks參數。能夠修改mirevents的參數。
The log attack time given by the Timbre Toolbox (Peeters et al., 2011) [a b] = mirattacktime(r, 'Filter', 'Attack', 'Effort', 'Log', 'Down', 0, 'CutOff',5)
(圖三爲取消log圖)
平均斜率,依然來源於events。兩種形式,分別是Diff和Gauss。
幅度。
描述decay phase,和attack phase類似。
每一個連續事件的持續時間(以s爲單位)
描述噪聲特徵noisiness,看它改變了幾回符號(穿過幾回X軸)。默認值只計算了從負到正的次數。
This ratio is fixed by default to .85 (following Tzanetakis and Cook, 2002), other have proposed .95 (Pohle, Pampalk and Widmer, 2005).
參數設置:MinRMS .005;'CutOff' specifies the frequency cut-off, in Hz. Default value: 1500 Hz. The value 1000 Hz has been proposed in (Laukka, Juslin and Bresin, 2005), and the value of 3000 Hz has been proposed in (Juslin, 2000).
The spectral distribution can be described by statistical moments: centroid, spread, skewness, kurtosis, flatness as well as by entropy.
MFCC描述了聲音的頻譜形狀。
在這裏,頻帶以對數方式定位(在Mel標度上),其比線性間隔的頻帶更接近地近似於人類聽覺系統的響應。 而且傅立葉變換被離散餘弦變換取代。 離散餘弦變換(DCT)是相似於離散傅里葉變換(DFT)的傅立葉相關變換,但僅使用實數。 它具備強大的「能量壓縮」特性:大多數信號信息每每集中在DCT的一些低頻份量中。 這就是爲何默認狀況下只返回前13個組件。
學習: https://www.cnblogs.com/BaroC...
Plomp和Levelt(1965)提出了一種估計每當正弦波在頻率上閉合時與搏動現象相關的感受不協調或粗糙度。經過計算光譜的峯值,並採用全部可能的峯值對之間的全部不一致的平均值,能夠得出總粗糙度的估計值(Sethares,1998)。
上圖爲'Sethares'(Sethares, 1998)。對於每對峯值,經過將兩個峯值幅度相乘,並經過將結果與在不和諧曲線上給出的相應因子相加來得到相應的基本粗糙度。下圖來自'Vassilakis',採用了更復雜的權重(Vassilakis, 2001, Eq. 6.23)。
頻譜的不規則性是頻譜的連續峯值的變化程度。默認Jensen。
提取音高,以連續音高曲線或離散音符事件的形式返回。默認返回的元素數量不肯定。分別對應着Autocor,AutocorSpectrum,Spectrum三種模式。(默認雙聲道)
預設模型:mirpitch(..., 'Tolonen')
沒跑出來
加上Frame後:
對於modality的估計,結果(-1,+1),越大越重要,越小越次要。指定Frame後可能更有用。默認的best是major和minor的最大值的差值,Sum是全部最大最小值對的差值的和。
從色度圖計算6維音調質心向量。 它對應於弦的投影沿着五個圓,三分之二和三分之一的圓(Harte和Sandler,2006)。
諧波變化檢測功能(HCDF)。可用於頻譜劃分。
類似性矩陣顯示來自輸入數據的全部可能的幀對之間的類似性。傳入的數據必須是Frame後的才能夠。
一種特定的結構描述涉及時間連續的時刻,每一個時刻都以特定的音樂特性爲特徵。 novelty曲線表示由峯值指示的連續狀態之間存在轉變的機率,以及由峯值高度指示的它們的相對重要性。由aimatrix得來
方法一:基於Gaussian checkerboard kernel的方法,此方法取決於內核的大小。
方法二:(Lartillot,Cereghetti,Eliard和Grandjean,2013)介紹了一種更簡單但更強大的通用方法,可自動檢測任何大小的同質段。默認使用此方法。
以幀爲基礎返回統計特徵。不會用。
結果彷佛也不是很可靠。
產生直方圖。X軸等間隔。彷佛有點用。要看好產生的數據到底是哪一個數據得出的。
返回曲線的形心,默認計算得的是頻譜形心。不一樣音頻的頻譜質心差距仍是很大的。只接受兩種類型的輸入,若是是原始音頻文件則輸出頻譜質心;若是是Extract後的peaks文件,則分別計算頻譜質心。其餘類型的輸入還不知道怎麼用。
返回標準差std。能夠傳入多種數據,彷佛比上邊的函數效果好。其他參考上函數。
偏斜係數,衡量數據是否對稱分佈的係數。
返回數據的平坦度。
相對香農熵
使用
mirfeatures(..., 'Stat')
後結果還需驗證。
miremotion只有1.3版本能用。
mirclassify能夠傳入Floder。
mircluster聚類算法
mirdist用於計算兩段音頻的距離。同一音頻不一樣質量的dist仍是很小的。
mirquery查詢
mirgetdata 返回到的是多是沒有X軸的數據
mirexport 導出到文件
mirtemporary默認關閉,能夠把floder的結果導入到一個臨時文件。mirwaitbar(0)
toggles off the display by MIRtoolbox of waitbar windows. mirverbose(0)
關閉控制檯輸出~~
使用miraudio('Floder')時會把全部的waveform都存到內存中,會有內存溢出的危險。而直接使用mirkey('Floder')這種操做,會把逐一進行操做,只存出結果。
大文件也會被切分進行計算,最後合併結果。也沒有必要使用miraudio進行存儲waveform。
因此,不須要連續操做時,使用直接的命令行更有效。
mireval能夠用來FLOWCHART DESIGN的操做,運行封裝好的結果。
而對於COMPLEX FLOWCHART DESIGN,則須要使用mirstruct進行建立一個結構。結構中的tmp中的變量中的變量不會生成最後的運算結果,其餘變量會產生最後的運算結果,使用'Design'來代替文件名。最後使用mireval生成結果。