6

我正在使用基于 Python 的音频库 librosa 来分析音符开始事件的音乐音轨。有了这些信息,我将这些音轨分割成几个更小、非常短的片段/片段——所有这些都基于音符开始事件。

有了这些切片,我正在使用 librosa 内置的特征提取工具(如chromagramMFCC )对其进行分析。输出如下所示:

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)数据库中。切片后的音频数据将被释放。

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

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

我需要做什么来比较上述函数的相似性结果?

4

2 回答 2

0

排名是你描述的问题。

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

“加权和”的一般公式:

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 ...)

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

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

有关的:

于 2019-05-02T17:40:45.567 回答
0

Librosa 有一个segment_cross_similiarity函数可以用来做这个任务,你只需要决定你想要交叉检查哪些特征

于 2021-07-22T12:16:34.057 回答