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 音频
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