From e954df3f896bd18494cd27d77b26bbb2005de8a7 Mon Sep 17 00:00:00 2001 From: JSDurand Date: Wed, 24 Aug 2022 23:54:13 +0800 Subject: First commit Now the project is in a somewhat complete state, ready for future enhancements. --- tests/sine.rs | 175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 tests/sine.rs (limited to 'tests/sine.rs') diff --git a/tests/sine.rs b/tests/sine.rs new file mode 100644 index 0000000..89f866b --- /dev/null +++ b/tests/sine.rs @@ -0,0 +1,175 @@ +#[allow(unused_imports)] +use rumu::{ + instruments::{Instrument, PianoStackoverflow, PianoVideo, PianoWOver, Sinus, Tangent, Violin}, + output::{Output, PlainOutput}, + sheet::Sheet, + Hertz, Samples, Semitones, Wave, BPM, +}; + +#[cfg(feature = "ffmpeg")] +#[allow(unused_imports)] +use rumu::output::ffmpeg_output::{AACOutput, MP3Output, OpusOutput}; + +#[test] +fn test_sine() -> Result<(), Box> { + let tones = [-9, -7, -5, -4, -2, 0, 2, 3, 2, 0, -2, -4, -5, -7, -9]; + let mut sine_instrument: Sinus = Default::default(); + + let rate: Samples = Default::default(); + + let wave: Vec<_> = tones + .into_iter() + .map(|tone| { + sine_instrument + .play(tone as f64, rate, 100f64, 1f64, 1f64) + .to_vec() + }) + .collect(); + + let wave = Wave::new(wave.into_iter().flatten().collect()); + + let plain_output = PlainOutput::default(); + + plain_output.save(wave, rate, "test.bin")?; + + Ok(()) +} + +#[test] +fn test_tangent() -> Result<(), Box> { + let tones = [-9, -7, -5, -4, -2, 0, 2, 3, 2, 0, -2, -4, -5, -7, -9]; + let mut tangent_instrument: Tangent = Default::default(); + + let rate: Samples = Default::default(); + + let wave: Vec<_> = tones + .into_iter() + .map(|tone| { + tangent_instrument + .play(tone as f64, rate, 100f64, 1f64, 1f64) + .to_vec() + }) + .collect(); + + let wave = Wave::new(wave.into_iter().flatten().collect()); + + let plain_output = PlainOutput::default(); + + plain_output.save(wave, rate, "test.bin")?; + + Ok(()) +} + +#[test] +fn test_piano_wover() -> Result<(), Box> { + let tones = [-9, -7, -5, -4, -2, 0, 2, 3, 2, 0, -2, -4, -5, -7, -9]; + let mut tangent_instrument: PianoWOver = Default::default(); + + let rate: Samples = Default::default(); + + let wave: Vec<_> = tones + .into_iter() + .map(|tone| { + tangent_instrument + .play(tone as f64, rate, 100f64, 1f64, 2f64) + .to_vec() + }) + .collect(); + + let wave = Wave::new(wave.into_iter().flatten().collect()); + + let plain_output = PlainOutput::default(); + + plain_output.save(wave, rate, "test.bin")?; + + Ok(()) +} + +#[test] +#[cfg(feature = "ffmpeg")] +fn test_ffmpeg_piano_video() -> Result<(), Box> { + let tones = [-9, -7, -5, -4, -2, 0, 2, 3, 2, 0, -2, -4, -5, -7, -9]; + let mut piano_wover_instrument: PianoVideo = Default::default(); + + let rate: Samples = 48000f64.into(); + + let wave = tones.into_iter().map(|tone| { + piano_wover_instrument + .play(tone as f64, rate, 120f64, 1f64, 2f64) + .to_vec() + }); + + let wave = Wave::new(wave.flatten().collect()); + + let opus_output = OpusOutput::default(); + + opus_output.save(wave, rate, "test.opus")?; + + Ok(()) +} + +#[test] +#[cfg(feature = "ffmpeg")] +fn test_ffmpeg_piano_stackoverflow() -> Result<(), Box> { + let tones = [-9, -7, -5, -4, -2, 0, 2, 3, 2, 0, -2, -4, -5, -7, -9]; + let mut piano_wover_instrument: PianoStackoverflow = Default::default(); + + let rate: Samples = 48000f64.into(); + + let wave = tones.into_iter().map(|tone| { + piano_wover_instrument + .play(tone as f64, rate, 120f64, 1f64, 1f64) + .to_vec() + }); + + let wave = Wave::new(wave.flatten().collect()); + + let opus_output = OpusOutput::default(); + + opus_output.save(wave, rate, "test.opus")?; + + Ok(()) +} + +#[test] +#[cfg(feature = "ffmpeg")] +fn test_ffmpeg_violin() -> Result<(), Box> { + let tones = [-9, -7, -5, -4, -2, 0, 2, 3, 2, 0, -2, -4, -5, -7, -9]; + let mut piano_wover_instrument: Violin = Default::default(); + + let rate: Samples = 48000f64.into(); + + let wave = tones.into_iter().map(|tone| { + piano_wover_instrument + .play(tone as f64, rate, 180f64, 1f64, 0.5f64) + .to_vec() + }); + + let wave = Wave::new(wave.flatten().collect()); + + let opus_output = OpusOutput::default(); + + opus_output.save(wave, rate, "test.opus")?; + + Ok(()) +} + +#[test] +#[cfg(feature = "ffmpeg")] +fn test_ffmpeg_piano_from_sheet() -> Result<(), Box> { + let source = std::fs::read_to_string("songs/Ievan Polkka.rumu")?; + + let mut sheet: Sheet = source.parse()?; + + println!("sheet = {sheet:?}"); + + let wave: Wave = (&mut sheet).into(); + + let rate = Samples::default(); + + let opus_output = OpusOutput::default(); + + opus_output.save(wave, rate, "test.opus")?; + + Ok(()) +} -- cgit v1.2.3-18-g5258