use crate::tests::sine::sine_wave_audio_data_multiple;
use alloc::vec::Vec;
use crate::{samples_fft_to_spectrum, FrequencyLimit, SpectrumTotalScaleFunctionFactory};
use audio_visualizer::spectrum::staticc::plotters_png_file::spectrum_static_plotters_png_visualize;
use crate::windows::{hann_window, hamming_window, blackman_harris_4term, blackman_harris_7term};
use audio_visualizer::waveform::staticc::plotters_png_file::waveform_static_plotters_png_visualize;
use audio_visualizer::Channels;
use audio_visualizer::waveform::staticc::png_file::waveform_static_png_visualize;
use alloc::boxed::Box;
#[allow(dead_code)]
const TEST_SAMPLES_DIR: &str = "test/samples";
#[allow(dead_code)]
const TEST_OUT_DIR: &str = "test/out";
mod sine;
#[test]
fn test_spectrum_and_visualize_sine_waves_50_1000_3777hz() {
let sine_audio = sine_wave_audio_data_multiple(
&[3777.0],
44100,
1000
);
waveform_static_plotters_png_visualize(
&sine_audio, Channels::Mono,
TEST_OUT_DIR,
"test_spectrum_and_visualize_sine_waves_50_1000_3777hz--WAVEFORM.png"
);
let sine_audio = sine_audio.into_iter()
.map(|x| x as f32)
.collect::<Vec<f32>>();
let window = &sine_audio[0..2048];
let no_window = &window[..];
let hamming_window = hamming_window(no_window);
let hann_window = hann_window(no_window);
let spectrum_no_window = samples_fft_to_spectrum(
&no_window,
44100,
FrequencyLimit::Max(4000.0),
None,
Some(get_scale_to_one_fn_factory()),
);
let spectrum_hann_window = samples_fft_to_spectrum(
&hann_window,
44100,
FrequencyLimit::Max(4000.0),
None,
Some(get_scale_to_one_fn_factory()),
);
let spectrum_hamming_window = samples_fft_to_spectrum(
&hamming_window,
44100,
FrequencyLimit::Max(4000.0),
None,
Some(get_scale_to_one_fn_factory()),
);
spectrum_static_plotters_png_visualize(
&spectrum_no_window.to_map(None),
TEST_OUT_DIR,
"test_spectrum_and_visualize_sine_waves_50_1000_3777hz--no-window.png",
false,
);
spectrum_static_plotters_png_visualize(
&spectrum_hamming_window.to_map(None),
TEST_OUT_DIR,
"test_spectrum_and_visualize_sine_waves_50_1000_3777hz--hamming-window.png",
false,
);
spectrum_static_plotters_png_visualize(
&spectrum_hann_window.to_map(None),
TEST_OUT_DIR,
"test_spectrum_and_visualize_sine_waves_50_1000_3777hz--hann-window.png",
false,
);
}
fn get_scale_to_one_fn_factory() -> SpectrumTotalScaleFunctionFactory{
Box::new(
move |_min: f32, max: f32, _average: f32, _median: f32| {
Box::new(
move |x| x/max
)
}
)
}