summaryrefslogtreecommitdiff
path: root/tests/sine.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/sine.rs')
-rw-r--r--tests/sine.rs175
1 files changed, 175 insertions, 0 deletions
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<dyn std::error::Error>> {
+ 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<dyn std::error::Error>> {
+ 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<dyn std::error::Error>> {
+ 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<dyn std::error::Error>> {
+ 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<dyn std::error::Error>> {
+ 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<dyn std::error::Error>> {
+ 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<dyn std::error::Error>> {
+ 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(())
+}