#音高 #检测 #声音 #频率

无std 音高检测

一组用于确定音频样本音高的算法

3个版本 (破坏性更新)

0.3.0 2022年6月30日
0.2.0 2020年11月13日
0.1.0 2019年3月17日

音频 中排名第290

Download history 76/week @ 2024-03-13 68/week @ 2024-03-20 82/week @ 2024-03-27 101/week @ 2024-04-03 72/week @ 2024-04-10 190/week @ 2024-04-17 176/week @ 2024-04-24 53/week @ 2024-05-01 63/week @ 2024-05-08 118/week @ 2024-05-15 244/week @ 2024-05-22 83/week @ 2024-05-29 68/week @ 2024-06-05 61/week @ 2024-06-12 114/week @ 2024-06-19 46/week @ 2024-06-26

每月下载量301

MIT/Apache

1MB
668 代码行

workflow status crates.io

pitch_detection

使用方法

use pitch_detection::detector::mcleod::McLeodDetector;
use pitch_detection::detector::PitchDetector;

fn main() {
    const SAMPLE_RATE: usize = 44100;
    const SIZE: usize = 1024;
    const PADDING: usize = SIZE / 2;
    const POWER_THRESHOLD: f64 = 5.0;
    const CLARITY_THRESHOLD: f64 = 0.7;

    // Signal coming from some source (microphone, generated, etc...)
    let dt = 1.0 / SAMPLE_RATE as f64;
    let freq = 300.0;
    let signal: Vec<f64> = (0..SIZE)
        .map(|x| (2.0 * std::f64::consts::PI * x as f64 * dt * freq).sin())
        .collect();

    let mut detector = McLeodDetector::new(SIZE, PADDING);

    let pitch = detector
        .get_pitch(&signal, SAMPLE_RATE, POWER_THRESHOLD, CLARITY_THRESHOLD)
        .unwrap();

    println!("Frequency: {}, Clarity: {}", pitch.frequency, pitch.clarity);
}

实时演示

演示页面 源代码

文档

在文档中可以使用LaTeX公式。这通过在rust-latex-doc-minimal-example中概述的方法启用。要构建文档,使用

cargo doc --no-deps

需要使用--no-deps标志,因为包含特殊头文件来自动处理文档中的数学。此头文件使用相对路径指定,因此如果cargo尝试为依赖项生成文档,则会产生错误。

依赖项

~3MB
~57K SLoC