/* * Created by Nick on Jan 3, 2005 * */ package jmslexamples.simple; import com.softsynth.jmsl.*; import com.softsynth.jmsl.jsyn.JSynInsFromClassName; import com.softsynth.jmsl.jsyn.JSynMusicDevice; /** * Use a MusicJob to turn an Instrument on() for five seconds, then shut it off(). Turn it on in * MusicJob.start(). Turn it off in MusicJob.stop(). Cause the delay with musicJob's startPause. * * @author Nick Didkovsky, (c) 2004 All rights reserved, Email: didkovn@mail.rockefeller.edu * */ public class InstrumentOnOff extends java.applet.Applet { JMSLMixerContainer mixer; Instrument instrument; MusicJob myMusicJob; public void init() { JMSL.setIsApplet(true); } public void start() { synchronized (JMSL.class) { initJMSL(); initMusicDevices(); buildMixer(); buildInstrument(); buildMusicJob(); launchMusicJob(); } } private void initJMSL() { JMSL.scheduler = new EventScheduler(); JMSL.scheduler.start(); JMSL.clock.setAdvance(0.1); } private void initMusicDevices() { JSynMusicDevice.instance().open(); } private void buildMixer() { mixer = new JMSLMixerContainer(); mixer.start(); } private void buildInstrument() { instrument = new JSynInsFromClassName(8, com.softsynth.jsyn.circuits.FilteredSawtoothBL.class.getName()); mixer.addInstrument(instrument); } protected void buildMusicJob() { myMusicJob = new MusicJob() { public double start(double playTime) { JMSL.out.println("MusicJob.start() is calling instrument.on() "); if (getInstrument() != null) { double[] data = MusicShape.getDefaultArray(getInstrument().getDimensionNameSpace()); getInstrument().on(playTime, 1.0, data); } return playTime; } public double stop(double playTime) { JMSL.out.println("MusicJob.stop() is calling instrument.off() "); if (getInstrument() != null) { double[] data = MusicShape.getDefaultArray(getInstrument().getDimensionNameSpace()); getInstrument().off(playTime, 1.0, data); } return playTime; } }; myMusicJob.setStartPause(5); myMusicJob.setInstrument(instrument); } private void launchMusicJob() { myMusicJob.launch(JMSL.now()); } public void stop() { synchronized (JMSL.class) { myMusicJob.finishAll(); try { myMusicJob.waitForDone(); } catch (InterruptedException e) { e.printStackTrace(); } JMSL.scheduler.stop(); JMSL.closeMusicDevices(); } } }