use crate::{
ffi,
vec::{FVec, FVecMut},
Smpl,
};
pub fn unwrap_2pi(phase: Smpl) -> Smpl {
unsafe { ffi::aubio_unwrap2pi(phase) }
}
pub fn bin_to_midi(bin: Smpl, sample_rate: Smpl, fft_size: Smpl) -> Smpl {
unsafe { ffi::aubio_bintomidi(bin, sample_rate, fft_size) }
}
pub fn midi_to_bin(midi: Smpl, sample_rate: Smpl, fft_size: Smpl) -> Smpl {
unsafe { ffi::aubio_miditobin(midi, sample_rate, fft_size) }
}
pub fn bin_to_freq(bin: Smpl, sample_rate: Smpl, fft_size: Smpl) -> Smpl {
unsafe { ffi::aubio_bintofreq(bin, sample_rate, fft_size) }
}
pub use self::bin_to_freq as bin_to_hz;
#[inline]
pub fn freq_to_bin(freq: Smpl, sample_rate: Smpl, fft_size: Smpl) -> Smpl {
unsafe { ffi::aubio_freqtobin(freq, sample_rate, fft_size) }
}
pub use self::freq_to_bin as hz_to_bin;
#[inline]
pub fn hz_to_mel(freq: Smpl) -> Smpl {
unsafe { ffi::aubio_hztomel(freq) }
}
#[inline]
pub fn mel_to_hz(mel: Smpl) -> Smpl {
unsafe { ffi::aubio_meltohz(mel) }
}
#[inline]
pub fn hz_to_mel_htk(freq: Smpl) -> Smpl {
unsafe { ffi::aubio_hztomel_htk(freq) }
}
#[inline]
pub fn mel_to_hz_htk(mel: Smpl) -> Smpl {
unsafe { ffi::aubio_meltohz_htk(mel) }
}
#[inline]
pub fn freq_to_midi(freq: Smpl) -> Smpl {
unsafe { ffi::aubio_freqtomidi(freq) }
}
#[inline]
pub fn midi_to_freq(midi: Smpl) -> Smpl {
unsafe { ffi::aubio_miditofreq(midi) }
}
#[inline]
pub fn zero_crossing_rate<'i, I>(input: I) -> Smpl
where
I: Into<FVec<'i>>,
{
let input = input.into();
unsafe { ffi::aubio_zero_crossing_rate(input.as_ptr() as *mut _) }
}
#[inline]
pub fn level_lin<'i, I>(input: I) -> Smpl
where
I: Into<FVec<'i>>,
{
let input = input.into();
unsafe { ffi::aubio_level_lin(input.as_ptr()) }
}
#[inline]
pub fn db_spl<'i, I>(input: I) -> Smpl
where
I: Into<FVec<'i>>,
{
let input = input.into();
unsafe { ffi::aubio_db_spl(input.as_ptr()) }
}
#[inline]
pub fn silence_detection<'i, I>(input: I, threshold: Smpl) -> bool
where
I: Into<FVec<'i>>,
{
let input = input.into();
0 != unsafe { ffi::aubio_silence_detection(input.as_ptr(), threshold) }
}
#[inline]
pub fn level_detection<'i, I>(input: I, threshold: Smpl) -> Smpl
where
I: Into<FVec<'i>>,
{
let input = input.into();
unsafe { ffi::aubio_level_detection(input.as_ptr(), threshold) }
}
impl<'a> FVec<'a> {
#[inline]
pub fn clamp<'i, I>(input: I, absmax: Smpl)
where
I: Into<FVecMut<'i>>,
{
let mut input = input.into();
unsafe { ffi::fvec_clamp(input.as_mut_ptr(), absmax) };
}
}