#search #audio #similarity #audio-samples #local #machine #perform

nightly bin+lib audio-similarity-search

在本地机器上执行音频文件的相似度搜索

1 个不稳定版本

0.1.0 2024 年 6 月 28 日

#21 in #audio-samples

GPL-3.0 许可协议

35KB
425

Rust 中的音频相似度搜索

该仓库包含一个 Rust CLI,可用于在本地存储的音频文件之间执行相似度搜索。

构建

要构建,请运行

  • cargo build 以调试模式构建
  • cargo build --release 以发布模式构建

这将创建一个名为 similarity-search 的可执行文件,位于 target/releasetarget/debug 目录中。

运行

CLI 支持三种模式:构建、列出样本和搜索。

构建

要为您的本地音频样本构建新的数据库,请运行

./similarity-searchbuild\Path\to\my_audio_samples

这将递归遍历 my_audio_samples 以及所有子目录,以构建相似度搜索数据库。

列出

要查看数据库中的样本列表及其对应的 ID,请运行

./similarity-searchlist-samples

要查询数据库以找到相似的样本,请运行

./similarity-search find sample_id num_results 其中 sample_id 是一个整数,表示您想找到相似声音的输入样本。

详细信息

特征提取

特征提取阶段遍历 CLI 在 build 期间传递给资产目录中找到的所有 wav 和 mp3 文件。每个音频文件被解码,降采样到 22050 Hz,并转换为单声道。然后,结果音频缓冲区被分成 2048 个样本的块,然后传递给 aubio 执行 FFT,然后进行 MFCC 以将缓冲区提炼成 13 维的 MFCC 向量。对于每个文件,每个块的 MFCC 被平均,从而得到一个 13 元素的特征向量。此特征提取过程高度并行化。它使用线程池将每个文件的特征提取分配到机器上的所有物理核心。

特征提取完成后,将{FileId, FilePath}的哈希表保存到磁盘。查询数据库时,我们需要将此映射加载到内存中,以便将数据库ID与音频文件路径关联起来。使用serde-rs JSON库序列化和反序列化映射。

数据库创建和查询

使用arroy数据库存储特征向量和执行相似性搜索。此项目是Spotify的annoy C++/Python库的Rust端口,用于快速近似最近邻搜索。Arroy与它不同,它由高性能、内存映射数据库LMDB支持。arroy/LMDB负责索引创建和ANN搜索的所有细节。

依赖项

~13–49MB
~774K SLoC