4个版本
0.2.0 | 2024年2月2日 |
---|---|
0.1.3 | 2023年3月12日 |
0.1.2 | 2023年3月4日 |
0.1.1 | 2022年7月23日 |
0.1.0 |
|
#170 在 音频
1,174 每月下载次数
在 4 个包中使用 (通过 czkawka_core)
490KB
2K SLoC
rusty-chromaprint
这是chromaprint的一个正在进行的端口
Chromaprint是为AcoustID项目开发的音频指纹库。它旨在识别几乎相同的音频,并且生成的指纹尽可能紧凑以实现这一点。它不是一个通用的音频指纹解决方案。它以搜索性能为代价,牺牲了精确性和鲁棒性。目标用例包括完整的音频文件识别、重复音频文件检测和长音频流监控。
用法
要计算音频流的指纹,只需创建一个新的Fingerprinter
实例,并向它提供所有音频样本
use rusty_chromaprint::{Configuration, Fingerprinter};
fn main() {
// Use a preset configuration. This must be always the same for the audio fingerprints
// that are going to be compared against each other.
let mut printer = Fingerprinter::new(&Configuration::preset_test2());
// Sampling rate is set to 44100 and stream has 2 audio channels. It is expected that samples
// are interleaved: in this case left channel samples are placed at even indices
// and right channel - at odd ones.
printer.start(44100, 2).unwrap();
// Process a few samples...
printer.consume(&[-100, -100, -50, -50, 1000, 1000]);
// ... and add some more...
printer.consume(&more_samples);
// Make sure that all the sample are processed.
printer.finish();
// Get the fingerprint.
let fingerprint = printer.fingerprint();
println!("fingerprint = {:08x?}", &fingerprint);
}
要查看一个完整的示例,请查看此存储库中的compare
,它使用Symphonia解码各种音频格式。它比较两个文件并打印出它们的共同部分
cargo run --release --bin compare -- audio1.mp3 audio2.wav
# | File 1 | File 2 | Duration | Score
-----+--------------------------+--------------------------+------------+---------
1 | 0:00:04.83 -- 0:00:19.44 | 0:00:00.00 -- 0:00:14.61 | 0:00:14.61 | 0.69
有关比较音频指纹的更多详细信息,请参阅文档。
依赖项
~3.5MB
~63K SLoC