[英]Compare similarity between two audio signals (singing recordings) in Python
[英]How to compare audio on similarity in Python?
我正在使用基於 Python 的音頻庫 librosa 來分析音符開始事件的音樂音軌。 有了這些信息,我將這些音軌分割成幾個更小、非常短的片段/片段——所有這些都基於音符開始事件。
有了這些切片,我正在使用 librosa 內置的特征提取工具(如chromagram或MFCC )對其進行分析。 輸出如下所示:
librosa.feature.chroma_stft(y=y, sr=sr)
array([[ 0.974, 0.881, ..., 0.925, 1. ],
[ 1. , 0.841, ..., 0.882, 0.878],
...,
[ 0.658, 0.985, ..., 0.878, 0.764],
[ 0.969, 0.92 , ..., 0.974, 0.915]])
librosa.feature.mfcc(y=y, sr=sr)
array([[ -5.229e+02, -4.944e+02, ..., -5.229e+02, -5.229e+02],
[ 7.105e-15, 3.787e+01, ..., -7.105e-15, -7.105e-15],
...,
[ 1.066e-14, -7.500e+00, ..., 1.421e-14, 1.421e-14],
[ 3.109e-14, -5.058e+00, ..., 2.931e-14, 2.931e-14]])
正如我們所看到的,這些函數輸出了一個矩陣,該矩陣保存了有關提取特征的信息。 所有這些信息(特征、切片開始和結束、文件名)都將存儲到(sqlite)數據庫中。 切片后的音頻數據將被釋放。
這些特征以數字方式描述了分析音頻的“類型”/聲音,是進行相似度計算的良好基礎。
擁有所有這些信息(以及具有數百個分析軌道的大型數據庫),我希望能夠選擇一個隨機切片並將其與數據庫中的所有其他切片進行比較,以找到與所選切片最相似的切片 - 基於提取的特征信息。
我需要做什么來比較上述函數的相似性結果?
排名是你描述的問題。
你必須找到一個“好的公式”
將“所有維度”縮減為一維
--> 相似度、接近度、接近度、排名。
“加權和”的一般公式:
rank(o, x) = w_1*(x_1 - o_1)^e_1 + w_2*(x_2 - o_2)^e_2 + ...
原點 (o_1 o_2 ...) = 你的針,你挑的那一片
和點 (x_1 x_2 ...) = 你的干草堆,所有其他切片
和權重(w_1 w_2 ...)
和指數(e_1 e_2 ...)
權重和指數是“微調”公式的簡單方法。
如果您的尺寸是正交的,則指數只是兩個-->笛卡爾幾何。
但在“現實世界”數據分析中,維度總是相關的 = 不是正交的,
你需要猜測參數
(並將相似的維度分組為更復雜的加法),
以獲得可接受的結果。
另一種選擇是“機器學習”的大錘,
但是你必須訓練自己的模型,
而且您還必須找到一種方法來對您的文件進行排名。
有關的:
Librosa 有一個segment_cross_similiarity函數可以用來做這個任務,你只需要決定你想要交叉檢查哪些特征
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.