usfx 0.1.5

Realtime procedurally generated sound effects
Documentation
use criterion::{criterion_group, criterion_main, Criterion};
use usfx::*;

fn criterion_benchmark(c: &mut Criterion) {
    // All wavetypes have the same generate function
    c.bench_function("generate", |b| {
        let mut buffer = [0.0; 2000];

        let mut sample = Sample::default();
        sample.osc_type(OscillatorType::Sine);

        let mut mixer = Mixer::new(2000);
        mixer.play(sample);

        b.iter(|| {
            mixer.generate(&mut buffer);
        });
    });

    c.bench_function("sine wave setup", |b| {
        let mut mixer = Mixer::new(2000);

        let mut sample = Sample::default();
        sample.osc_type(OscillatorType::Sine);

        let mut freq = 1;
        b.iter(|| {
            sample.osc_frequency(freq);

            mixer.play(sample);

            freq += 1;
        });
    });
    c.bench_function("saw wave setup", |b| {
        let mut mixer = Mixer::new(2000);

        let mut sample = Sample::default();
        sample.osc_type(OscillatorType::Saw);

        let mut freq = 1;
        b.iter(|| {
            sample.osc_frequency(freq);

            mixer.play(sample);

            freq += 1;
        });
    });
    c.bench_function("square wave setup", |b| {
        let mut mixer = Mixer::new(2000);

        let mut sample = Sample::default();
        sample.osc_type(OscillatorType::Square);

        let mut freq = 1;
        b.iter(|| {
            sample.osc_frequency(freq);

            mixer.play(sample);

            freq += 1;
        });
    });
    c.bench_function("triangle wave setup", |b| {
        let mut mixer = Mixer::new(2000);

        let mut sample = Sample::default();
        sample.osc_type(OscillatorType::Triangle);

        let mut freq = 1;
        b.iter(|| {
            sample.osc_frequency(freq);

            mixer.play(sample);

            freq += 1;
        });
    });
    c.bench_function("noise wave setup", |b| {
        let mut mixer = Mixer::new(2000);

        let mut sample = Sample::default();
        sample.osc_type(OscillatorType::Noise);

        let mut freq = 1;
        b.iter(|| {
            sample.osc_frequency(freq);

            mixer.play(sample);

            freq += 1;
        });
    });
}

criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);