package jmslexamples.jsyn; import java.awt.Graphics; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import com.softsynth.jmsl.EventScheduler; import com.softsynth.jmsl.JMSL; import com.softsynth.jmsl.jsyn.JSynMusicDevice; import com.softsynth.jmsl.jsyn.SynthNoteAllPortsInstrument; import com.softsynth.jmsl.score.*; import com.softsynth.jsyn.AppletFrame; import com.softsynth.jsyn.Synth; /** * Score with a SynthNoteAllPortsInstrument orchestra
* * Double click on a note to edit its timbre
* This instrument takes a SynthNote class name and max voices in its * constructor, and will make each input port editable * * * * @author Nick Didkovsky, copyright 2000 Nick Didkovsky */ public class PolyTimbralScoreDemo extends java.applet.Applet { Score score; ScoreFrame scoreFrame; Orchestra orch; public void init() { } public void start() { initMusicDevices(); initJMSL(); buildOrchestra(); buildScore(); buildScoreFrame(); } private void buildScoreFrame() { scoreFrame = new ScoreFrame("PolyTimbral JMSL Score JSyn Demo by Nick Didkovsky, copyright 2000 Nick Didkovsky"); scoreFrame.addScore(score); // force netscape to size window ok scoreFrame.setSize(score.getLayoutWidth() + 100, score.getLayoutHeight() + 100); scoreFrame.setVisible(true); } private void buildScore() { int w = 1000; int h = 700; int numStaves = 4; score = new Score(numStaves, w, h, "JMSL Score JSyn Demo by Nick Didkovsky, copyright 2000 Nick Didkovsky"); score.addMeasure(); score.setOrchestra(orch); score.getScoreLayoutManager().setZoom(0.5); score.getControlPanel().setZoom(0.5); } private void buildOrchestra() { orch = new Orchestra(); String synthNoteName = com.softsynth.jsyn.circuits.FilteredSawtoothBL.class.getName(); orch.addInstrument(new SynthNoteAllPortsInstrument(8, synthNoteName), "Bob"); orch.addInstrument(new SynthNoteAllPortsInstrument(8, synthNoteName), "Fran"); orch.addInstrument(new SynthNoteAllPortsInstrument(8, synthNoteName), "Jimbo"); orch.addInstrument(new SynthNoteAllPortsInstrument(8, synthNoteName), "Toots"); orch.getJMSLMixerContainer().panAmpChange(2, 0.1, 0.9); } private void initJMSL() { JMSL.clock.setAdvance(0.1); JMSL.clock.setAdvance(1.0); JMSL.scheduler = new EventScheduler(); JMSL.scheduler.start(); JMSL.setIsApplet(true); } private void termJMSL() { JMSL.scheduler.stop(); JMSL.closeMusicDevices(); } private void initMusicDevices() { JSynMusicDevice.instance().open(); } public ScoreFrame getScoreFrame() { return scoreFrame; } public void stop() { removeAll(); scoreFrame.setVisible(false); scoreFrame.dispose(); Synth.stopEngine(); } public void paint(Graphics g) { g.drawString("Your score has been opened in a Frame outside this browser", 20, 20); g.drawString("Add notes, double click on a note and change its timbre", 20, 50); } /* Can be run as either an application or as an applet. */ public static void main(String args[]) { PolyTimbralScoreDemo applet = new PolyTimbralScoreDemo(); AppletFrame frame = new AppletFrame("PolyTimbralScoreDemo", applet); frame.setSize(500, 200); frame.show(); /* * Begin test after frame opened so that DirectSound will use Java * window. */ frame.test(); JMSL.setIsApplet(false); applet.getScoreFrame().addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { JMSL.closeMusicDevices(); System.exit(0); } }); } }