use crate::tests::sine::sine_wave_audio_data_multiple;
use crate::windows::{blackman_harris_4term, blackman_harris_7term, hamming_window, hann_window};
use crate::{samples_fft_to_spectrum, FrequencyLimit, SpectrumTotalScaleFunctionFactory};
use alloc::boxed::Box;
use alloc::vec::Vec;
use audio_visualizer::spectrum::staticc::plotters_png_file::spectrum_static_plotters_png_visualize;
use audio_visualizer::waveform::staticc::plotters_png_file::waveform_static_plotters_png_visualize;
use audio_visualizer::waveform::staticc::png_file::waveform_static_png_visualize;
use audio_visualizer::Channels;
#[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))
}