2个不稳定版本

0.2.0 2020年7月27日
0.1.0 2020年7月21日

#808 in 音频

MIT许可证

8KB
133

Yin:Rust的频率估计

Yin提供了一种基于以下文章估计信号基频的功能:

[1] De Cheveigné, A., & Kawahara, H. (2002). YIN, a fundamental frequency estimator for speech and music. The Journal of the Acoustical Society of America, 111(4), 1917-1930.

论文链接

安装

将以下内容添加到您的Cargo.toml

yin = "0.1.0"

用法

        // Configure params for our estimator, see docs for details
        let estimator = Yin::init(0.1, 10.0, 30.0, 80);
        let mut example = vec![];
        let mut prev_value = -1.0;
        // Periodic over every 4 values of i, giving us a frequency of: 80 / 4 == 20
        for i in 0..80 {
            if i % 2 != 0 {
                example.push(0.0);
            } else {
                prev_value *= -1.0;
                example.push(prev_value);
            }
        }
        let freq = estimator.estimate_freq(&example);
        assert_eq!(freq, 20.0);

基准测试

在编写本文时,我没有花费太多时间优化此实现,将在需要时查看提高速度的方法。以下是当前基准测试时间列表:

44100hz sample rate, 100hz frequency, 160hz search range: [ 2.4157 ms 2.4244 ms 2.4330 ms ]

基准测试使用criterion进行,可以通过克隆仓库并使用cargo bench运行

无运行时依赖