#[macro_use]
extern crate std;
use audio_visualizer::waveform::staticc::png_file::waveform_static_png_visualize;
use lowpass_filter::simple::sp::apply_lpf_i16_sp;
use minimp3::{Decoder as Mp3Decoder, Error as Mp3Error, Frame as Mp3Frame};
use std::fs::File;
use std::path::PathBuf;
use std::time::Instant;
use audio_visualizer::{ChannelInterleavement, Channels};
fn main() {
let mut path = PathBuf::new();
path.push("test/samples");
path.push("sample_1.mp3");
let mut decoder = Mp3Decoder::new(File::open(path).unwrap());
let mut lrlr_mp3_samples = vec![];
loop {
match decoder.next_frame() {
Ok(Mp3Frame {
data: samples_of_frame,
..
}) => {
for sample in samples_of_frame {
lrlr_mp3_samples.push(sample);
}
}
Err(Mp3Error::Eof) => break,
Err(e) => panic!("{:?}", e),
}
}
waveform_static_png_visualize(
&lrlr_mp3_samples,
Channels::Stereo(ChannelInterleavement::LRLR),
"test/out",
"sample_1_waveform.png",
);
let (mut left, mut right) = Channels::Stereo(ChannelInterleavement::LRLR)
.stereo_interleavement()
.to_channel_data(&lrlr_mp3_samples);
let now = Instant::now();
apply_lpf_i16_sp(&mut left, 44100, 120);
let then = now.elapsed();
println!(
"took {}us to apply low pass filter for left channel ({}) samples",
then.as_micros(),
left.len()
);
apply_lpf_i16_sp(&mut right, 44100, 120);
waveform_static_png_visualize(
&left,
Channels::Mono,
"test/out",
"sample_1_waveform_lowpassed_left.png",
);
waveform_static_png_visualize(
&right,
Channels::Mono,
"test/out",
"sample_1_waveform_lowpassed_right.png",
);
}