/* Author: Bill Manaris Email: manaris@cs.cofc.edu Class: CSCI 220 Assignment: HMWK # 6 Due Date: April 21, 2004 Task: This program demonstrates the three pattern transformers that come with JFugue. Input: None. Output: MIDI notes and events to the MIDI output device. Credits: Adapted from JFugue source, org\jfugue\examples\CrabCanon.java */ import org.jfugue.*; import org.jfugue.demo.*; public class DemoPatternTransformers { public static void main(String[] args) { Player player = new Player(); Pattern canon = new Pattern(); // Crab Canon Pattern theme = new Pattern("D4h E4h A4h Bb4h C#4h Rq A4q "+ "A4q Ab4h G4q G4q F#4h F4q F4q E4q Eb4q D4q "+ "C#4q A3q D4q G4q F4h E4h D4h F4h "+ "A4i G4i A4i D5i A4i F4i E4i F4i G4i A4i B4i C#5i "+ "D5i F4i G4i A4i Bb4i E4i F4i G4i A4i G4i F4i E4i "+ "F4i G4i A4i Bb4i C5i Bb4i A4i G4i A4i Bb4i C5i D5i "+ "Eb5i C5i Bb4i A4i B4i C#5i D5i E5i F5i D5i C#5i B4i "+ "C#5i D5i E5i F5i G5i E5i A4i E5i D5i E5i F5i G5i "+ "F5i E5i D5i C#5i D5q A4q F4q D4q"); // Reverse the theme ReversePatternTransformer rpt = new ReversePatternTransformer(); Pattern reverseTheme = rpt.transform(theme); // Slow down the theme DurationPatternTransformer dpt = new DurationPatternTransformer(); dpt.putVariable(DurationPatternTransformer.FACTOR, new Double(0.75)); Pattern diminutedTheme = dpt.transform(theme); // Move the theme up five steps (semitones) IntervalPatternTransformer ipt = new IntervalPatternTransformer(); ipt.putVariable(IntervalPatternTransformer.INTERVAL, new Integer(3)); Pattern upThreeStepsTheme = ipt.transform(theme); // Combine the four voices canon.add("V0 " + theme.getMusicString()); //System.out.println(theme.getMusicString()); // to see the original music string on the console canon.add("V1 " + reverseTheme.getMusicString()); //canon.add("V2 " + diminutedTheme.getMusicString()); //canon.add("V3 " + upThreeStepsTheme.getMusicString()); // Play the song! player.play(canon); //player.save(canon,"crab.mid"); // save a MIDI file to play later // Exit the program System.exit(0); } }