/** * 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.TextArea; import com.softsynth.jmsl.*; public class MJToot12 extends java.applet.Applet { InstrumentPlayingMusicJob instrumentPlayingMusicJob; TextArea myTextArea; /* * Build our InstrumentPlayingMusicJob when applet initializes, send JMSL's * STDOut to a TextArea */ public void init() { JMSLRandom.randomize(); // initialize the TextArea with 20 rows, 50 columns myTextArea = new TextArea(20, 50); // Add the TextArea to the applet's layout add(myTextArea); // Hand this TextArea to a new TextAreaSTDOut, and use it for JMSL.out JMSL.setSTDOut(new TextAreaSTDOut(myTextArea)); // 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); } /* When applet starts up, launch it */ public void start() { JMSL.clock = new DefaultMusicClock(); instrumentPlayingMusicJob.launch(JMSL.now()); } /* Shut down the Job when applet stops */ public void stop() { instrumentPlayingMusicJob.finish(); } } class InstrumentPlayingMusicJob extends MusicJob { InstrumentPlayingMusicJob() { setInstrument(new CustomPrintingInstrument()); } public double repeat(double playTime) { JMSL.out.println("MusicJob.repeat(), playTime = " + playTime + ", repeat " + getRepeatCount() + "/" + getRepeats()); double[] data = new double[3]; data[0] = 2.0; // duration data[1] = JMSLRandom.choose(); // something else data[2] = JMSLRandom.gauss(5, 3); // something else again return getInstrument().play(playTime, 1, 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; } }