It's like meyda, but for Rust.
This project is heavily WIP and it's not wise to use it in production yet.
The plan is to initially provide a set of pure functions which operate on 64-bit float vectors, each vector being a frame of audio.
Later on, meyda-rs
should support file loading, configuration, overlapping frames, etc. to approach the API of Meyda.
This example creates a 1024-sample frame of white noise, and calculates its features.
extern crate meyda;
extern crate rand;
use rand::Rng;
fn main() {
const BUFFER_SIZE: usize = 1024;
const SAMPLE_RATE: f64 = 44100.0;
// create a vector of white noise
let mut generator = rand::thread_rng();
let signal: Vec<f64> = vec![0; BUFFER_SIZE]
.iter()
.map(|&_sample| generator.gen_range(-1_f64..1_f64))
.collect();
// compute features
let rms = meyda::get_rms(&signal);
let energy = meyda::get_energy(&signal);
let zcr = meyda::get_zcr(&signal);
// let power_spectrum = meyda::get_power_spectrum(&signal);
let spectral_centroid = meyda::get_spectral_centroid(&signal);
let spectral_flatness = meyda::get_spectral_flatness(&signal);
let spectral_kurtosis = meyda::get_spectral_kurtosis(&signal);
let spectral_rolloff = meyda::get_spectral_rolloff(&signal, SAMPLE_RATE, Some(0.95));
let bark_loudness = meyda::get_bark_loudness(&signal, SAMPLE_RATE);
println!("RMS is {} \n energy is {:?}, zcr is {:?},\n spectral centroid is {},\n spectral flatness is {},\n spectral kurtosis is {},\n spectral rolloff is {},\n Bark loudness is {:?}", rms, energy, zcr, spectral_centroid, spectral_flatness, spectral_kurtosis,
spectral_rolloff, bark_loudness);
}
Contributions are always welcome. The library should be test-driven and all new features should have accompanying tests.
Tests can be run with cargo test
– each extractor function should have a test module in the same file, and should make use of meyda/gauge, which is submodule'd in /src/utils
. The deserialized gauge data is provided by utils::test
as a vector of TestDataSet
structures.