3个不稳定版本
0.2.0 | 2021年11月8日 |
---|---|
0.1.1 | 2021年9月28日 |
0.1.0 | 2021年9月28日 |
#534 in 音频
85KB
997 行
irapt
IRAPT音高估计算法的实现。
提交错误报告
GitHub是项目的错误跟踪器。请在 搜索 类似的现有问题后再 提交新的问题。
许可证
在 AGPL-3.0 许可下。
lib.rs
:
irapt
是IRAPT音高估计算法的实现。
IRAPT是鲁棒音高跟踪算法(RAPT)的“瞬时”版本。
使用方法
目前,参数 对 Irapt
是技术性的,可能难以调整,但 Parameters::default
为普通人类语音提供了一套合理的默认值,在输入可以重采样到默认的 Parameters::sample_rate
时,计算效率较高。
输入必须以 VecDeque
的形式提供给 Irapt::process
,这将便于滑动分析窗口。可以通过每次调用计算由 process
从缓冲区中移除的样本数,以便跟踪估计每个音高的全局样本索引
use irapt::{Irapt, Parameters};
use std::collections::VecDeque;
use std::f64::consts::PI;
let parameters = Parameters::default();
let mut irapt = Irapt::new(parameters.clone()).expect("the default parameters should be valid");
let mut sample_buffer = (0..parameters.sample_rate as usize)
.map(|sample_index| f64::sin(sample_index as f64 / parameters.sample_rate * 2.0 * PI * 100.0))
.collect::<VecDeque<_>>();
let mut sample_index = 0;
while let (initial_sample_buffer_len, Some(output)) = (
sample_buffer.len(),
irapt.process(&mut sample_buffer),
) {
let estimated_pitch = output.pitch_estimates().final_estimate();
let estimated_pitch_index = (sample_index as isize + estimated_pitch.offset) as usize;
let estimated_pitch_time = estimated_pitch_index as f64 / parameters.sample_rate;
println!("estimated pitch at {:0.3}: {}Hz with energy {}",
estimated_pitch_time, estimated_pitch.frequency, estimated_pitch.energy);
sample_index += initial_sample_buffer_len - sample_buffer.len();
}
依赖关系
~3.5MB
~68K SLoC