diff --git a/Cargo.toml b/Cargo.toml index fd8be068..a8d03f95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -62,6 +62,10 @@ harness = false name = "conversions" harness = false +[[bench]] +name = "resampler" +harness = false + [[example]] name = "music_m4a" required-features = ["symphonia-isomp4", "symphonia-aac"] diff --git a/benches/resampler.rs b/benches/resampler.rs new file mode 100644 index 00000000..22ddbf15 --- /dev/null +++ b/benches/resampler.rs @@ -0,0 +1,42 @@ +use divan::Bencher; +use rodio::source::UniformSourceIterator; + +mod shared; +use rodio::Source; +use shared::TestSource; + +fn main() { + divan::main(); +} + +#[divan::bench] +fn no_resampling(bencher: Bencher) { + bencher + .with_inputs(|| { + let source = TestSource::::music_wav(); + (source.channels(), source.sample_rate(), source) + }) + .bench_values(|(channels, sample_rate, source)| { + UniformSourceIterator::<_, i16>::new(source, channels, sample_rate) + .for_each(divan::black_box_drop) + }) +} + +// taken from: https://github.com/audiojs/sample-rate/readme.md commit: be31b67 +const COMMON_SAMPLE_RATES: [u32; 12] = [ + 8_000, 11_025, 16_000, 22_050, 44_100, 48_000, 88_200, 96_000, 176_400, 192_000, 352_800, + 384_000, +]; + +#[divan::bench(args = COMMON_SAMPLE_RATES)] +fn resample_to(bencher: Bencher, target_sample_rate: u32) { + bencher + .with_inputs(|| { + let source = TestSource::::music_wav(); + (source.channels(), source) + }) + .bench_values(|(channels, source)| { + UniformSourceIterator::<_, i16>::new(source, channels, target_sample_rate) + .for_each(divan::black_box_drop) + }) +}