/** * MJToot12.java * * A subclass of MusicJob that generates double[] data every repeat(), and hands * it to its Instrument for interpretation * * @author Nick Didkovsky, 2004-11-28 */ /* * (C) 1997 Phil Burk and Nick Didkovsky, All Rights Reserved JMSL is based upon * HMSL (C) Phil Burk, Larry Polansky and David Rosenboom. */ package jmsltutorial; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import com.softsynth.jmsl.DefaultMusicClock; import com.softsynth.jmsl.InstrumentAdapter; import com.softsynth.jmsl.JMSL; import com.softsynth.jmsl.JMSLRandom; import com.softsynth.jmsl.MusicJob; public class MJToot12 { InstrumentPlayingMusicJob instrumentPlayingMusicJob; public void build() { JMSLRandom.randomize(); // initialize a new MusicJob. Its delay between repeats is set by its // Instrument's play() method instrumentPlayingMusicJob = new InstrumentPlayingMusicJob(); // set its repeat count instrumentPlayingMusicJob.setRepeats(50); instrumentPlayingMusicJob.setTimeStretch(1); } public void start() { instrumentPlayingMusicJob.launch(JMSL.now()); } public static void main(String[] args) { System.out.println( "This MusicJob example generates new data every time it repeat()'s, and calls its Instrument to play it."); System.out.println("The Instrument simply prints the data in this demo."); MJToot12 mjToot12 = new MJToot12(); mjToot12.build(); mjToot12.start(); JFrame jf = new JFrame("Close to quit"); jf.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); jf.setSize(200, 150); jf.setVisible(true); jf.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } } class InstrumentPlayingMusicJob extends MusicJob { InstrumentPlayingMusicJob() { setInstrument(new CustomPrintingInstrument()); } public double repeat(double playTime) { JMSL.out.println( "MusicJob.repeat(), playTime = " + playTime + ", repeat " + getRepeatCount() + "/" + getRepeats() + ", getTimeStretch()=" + getTimeStretch()); double[] data = new double[3]; data[0] = 2.0; // duration data[1] = JMSLRandom.choose(); // something else data[2] = JMSLRandom.gaussSD(5, 3); // something else again return getInstrument().play(playTime, getTimeStretch(), data); } } class CustomPrintingInstrument extends InstrumentAdapter { public double play(double playTime, double timeStretch, double[] data) { double duration = data[0]; JMSL.out.println("CustomPrintingInstrument.play(), playTime=" + playTime); JMSL.out.println("Data:"); for (int i = 0; i < data.length; i++) { JMSL.out.println(i + ", " + data[i]); } JMSL.out.println(""); return playTime + duration * timeStretch; } }