#bcf #detection #bacf #acf #auto-correlation

pitch

快速准确地确定声音样本的音高和音量

4个版本

使用旧的Rust 2015

0.1.3 2018年6月16日
0.1.2 2018年6月14日
0.1.1 2018年6月12日
0.1.0 2018年6月12日

#677 in 音频

BSL-1.0许可证

9KB
115

"pitch" by Plop Grizzly

快速准确地确定声音样本的音高和音量。

此Crate使用由Joel de Guzman发明的位流自相关函数(BCF)来确定声音样本的音高。

特性

  • 使用位流自相关(BCF)确定音频波的音高

贡献

1.0版本路线图(未来特性)

  • 尝试使用BACF,BCF的更新版本,它使用峰值而不是零交叉。评估速度与准确性的利弊。方法差异描述在这里

变更日志

0.1

  • 初始发布。

lib.rs:

快速准确地确定声音样本的音高和音量。

此Crate使用由Joel de Guzman发明的位流自相关函数(BCF)来确定声音样本的音高。

如何使用

实际上非常简单。只需写下

let (hz, amplitude) = pitch::detect(&samples)

samples 是一个f32的固定大小数组。我使用2,048作为数组长度。数组的长度应该是你想要捕捉的最低音符周期的两倍(因为数学和一些理论)。所以2,048给了我们每个周期1,024个样本的音符,在48,000Hz下大约是47Hz(48,000Hz / 1,024样本)。作为参考,人类能听到的最低正弦波是20Hz(比一个八度低一点)。

示例

示例代码可以在test.rs中找到。我使用的音频文件是我用长号演奏A1、A2、A3和A4音符,并在A4音符上用Audacity生成正弦波、锯齿波和方波(确保设置为48,000Hz采样率)。以下是我的示例输出(注意:我事先没有调整长号,因为这个程序是一个调音器,可能与其他调音器给出不同的结果)

A1: 55.422962 Hz, 0.7379681 Vl
A2: 107.865166 Hz, 0.43305764 Vl
A3: 215.78847 Hz, 0.69536424 Vl
A4: 436.30658 Hz, 0.117435224 Vl
SINE_A4: 439.99805 Hz, 0.8001343 Vl
SAW_A4: 439.99167 Hz, 0.8001343 Vl
SQUARE_A4: 434.3891 Hz, 0.80022585 Vl

无运行时依赖