3个不稳定版本
0.3.1 | 2022年6月3日 |
---|---|
0.3.0 | 2022年4月18日 |
0.1.0 | 2022年3月25日 |
#388 in 音频
60KB
1.5K SLoC
pitch-detector
用Rust编写的频率和音符检测库。
使用方法
最常见的使用情况是检测信号的基频。
use pitch_detector::{
pitch::{hanned_fft::HannedFftDetector, PitchDetector},
};
let sample_rate = 44100.
let signal: Vec<f64> = ...;
let mut detector = HannedFftDetector::default();
let freq: f64 = detector.detect_pitch(&signal, sample_rate)?;
另一种常见使用情况是检测信号的基音。这种情况与第一种类似,但信号的基音映射到一个包含失真频率的频率范围。这种情况在调音应用中很常见,用户仍然想知道正在演奏哪个音符,即使它不在调上。`detect_note`的返回类型包括从音符名称偏移的音分、调音频率和其他有用信息。
use pitch_detector::{
pitch::{hanned_fft::HannedFftDetector, PitchDetector},
note::{detect_note},
};
let sample_rate = 44100.
let signal: Vec<f64> = ...;
let mut detector = HannedFftDetector::default();
let note = detect_note(
&signal,
&mut detector,
sample_rate,
)?;
assert_eq!(note.note_name, NoteName::A);
最后一种使用情况是带有提示的音符检测。到目前为止,前面的使用情况都是关于检测基频或音符。在这种情况下,我们向检测器提供提示,以便它可以检测到一个可能不是基音的频率。当信号中有多个频率(这很常见)时,这很有用,但你又想知道信号中是否包含特定的音符,以及这个特定音符的调准程度。
let sample_rate = 44100.
let mixed_signal: Vec<f64> = ... // mixed_signal contains multiple overlapping frequencies
let note = detector
.detect_note_with_hint(
NoteName::A,
&mixed_signal,
sample_rate,
)?;
assert_eq!(note.note_name, NoteName::A);
请查看示例目录以获取更多信息。
测试
运行cargo pitch
来运行所有功能的测试,并使用cargo benchmark
别名以运行带有正确设置的功能的基准测试。
许可
在MIT许可下授权。
依赖
~5–9MB
~145K SLoC