我正在使用基于 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)数据库中。切片后的音频数据将被释放。
这些特征以数字方式描述了分析音频的“类型”/声音,是进行相似度计算的良好基础。
拥有所有这些信息(以及具有数百个分析轨道的大型数据库),我希望能够选择一个随机切片并将其与数据库中的所有其他切片进行比较,以找到与所选切片最相似的切片 - 基于提取的特征信息。
我需要做什么来比较上述函数的相似性结果?