#[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(()) }