如何在 Python 中比较音频的相似性?

Sim*_*per 5 python audio librosa

我正在使用基于 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]])
Run Code Online (Sandbox Code Playgroud)

正如我们所看到的,这些函数输出了一个矩阵,其中包含有关提取特征的信息。所有这些信息(特征、切片开始和结束、文件名)都将存储到(sqlite)数据库中。切片的音频数据将被释放。

这些特征以数字方式描述了分析音频的“类型”/声音,是进行相似性计算的良好基础。

拥有所有这些信息(以及包含数百条分析轨迹的大型数据库),我希望能够随机选择一个切片并将其与数据库中的所有其他切片进行比较,以找到与所选切片最相似的切片 - 基于提取的特征信息。

我需要做什么来比较上面列出的函数的相似度结果?

Mil*_*kus 1

排名是你描述的问题。

你必须找到一个“好的公式”
来将“所有维度”简化为一个维度
——>相似性、邻近性、接近性、排名。

“加权和”的一般公式:

rank(o, x)  =  w_1*(x_1 - o_1)^e_1  +  w_2*(x_2 - o_2)^e_2  +  ...
Run Code Online (Sandbox Code Playgroud)

原点 (o_1 o_2 ...) = 你的针,你选择的一个切片
和点 (x_1 x_2 ...) = 你的干草堆,所有其他切片
以及权重 (w_1 w_2 ...)
和指数(e_1 e_2 ...)

权重和指数是“微调”公式的简单方法。
如果你的维度是正交的,那么指数就是 2 --> 笛卡尔几何。
但在“现实世界”的数据分析中,维度始终是相关的=不是正交的,
您将需要猜测参数
(并将相似的维度分组为更复杂的被加数),
以获得可接受的结果。

另一种选择是“机器学习”的大锤,
但是你必须训练自己的模型,
并且还必须找到一种对文件进行排名的方法。

有关的: