1 个不稳定版本
0.1.0 | 2024 年 6 月 28 日 |
---|
#21 in #audio-samples
35KB
425 行
Rust 中的音频相似度搜索
该仓库包含一个 Rust CLI,可用于在本地存储的音频文件之间执行相似度搜索。
构建
要构建,请运行
cargo build
以调试模式构建cargo build --release
以发布模式构建
这将创建一个名为 similarity-search
的可执行文件,位于 target/release
或 target/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