package jmslexamples.jsyn; // ScoreJSynDemo4 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.Brass; import com.softsynth.jmsl.jsyn.JSynMusicDevice; import com.softsynth.jmsl.score.*; import com.softsynth.jsyn.AppletFrame; /** * Score with a JSyn instrument orchestra * * @author Nick Didkovsky, copyright 2000 Nick Didkovsky */ public class JScoreJSynDemo extends java.applet.Applet { private Score score; private ScoreFrame scoreFrame; private Orchestra orch; public void init() { } public void start() { initJMSL(); initMusicDevices(); buildOrchestra(); buildScore(); buildScoreFrame(); } private void initMusicDevices() { JSynMusicDevice.instance().open(); } private void initJMSL() { JMSL.setIsApplet(true); JMSL.clock.setAdvance(0.1); JMSL.scheduler = new EventScheduler(); JMSL.scheduler.start(); } private void termJMSL() { JMSL.scheduler.stop(); JMSL.closeMusicDevices(); } private void buildScoreFrame() { int w = score.getLayoutWidth(); int h = score.getLayoutHeight(); scoreFrame = new ScoreFrame("JMSL: Score & JSyn Demo by Nick Didkovsky, copyright 2000 Nick Didkovsky"); scoreFrame.addScore(score); scoreFrame.setSize(w + 100, h + 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(); // set bass clef for tuba score.getMeasure(0).getStaff(3).setClef(Clef.BASS_CLEF); score.setOrchestra(orch); score.getScoreLayoutManager().setZoom(0.5); score.getControlPanel().setZoom(0.5); score.setCurrentStaffNumber(0); score.addNote(1, 60, 0.5, 0.8); score.addNote(1, 60, 0.5, 0.8); score.addNote(1, 60, 0.5, 0.8); score.addNote(1, 60, 0.5, 0.8); score.rewind(); score.setCurrentStaffNumber(1); score.addNote(1, 61, 0.5, 0.8); score.addNote(1, 61, 0.5, 0.8); score.addNote(1, 62, 0.5, 0.8); score.addNote(1, 62, 0.5, 0.8); } private void buildOrchestra() { // Set up an JSynOrchestra to hand to Score, starts JSyn engine if it // needs to */ orch = new Orchestra(); orch.addInstrument(new Brass(2, 5), "trumpet 1"); orch.addInstrument(new Brass(2, 5), "trumpet 2"); orch.addInstrument(new Brass(2, 2), "horn"); orch.addInstrument(new Brass(2, 3), "tuba"); } public ScoreFrame getScoreFrame() { return scoreFrame; } public void stop() { removeAll(); scoreFrame.setVisible(false); scoreFrame.dispose(); Score.deleteCanvas(); termJMSL(); } public void paint(Graphics g) { g.drawString("Your score has been opened in a Frame outside this browser", 20, 20); } /* Can be run as either an application or as an applet. */ public static void main(String args[]) { JScoreJSynDemo applet = new JScoreJSynDemo(); AppletFrame frame = new AppletFrame("Score JSyn Demo", applet); frame.setSize(500, 200); frame.show(); frame.test(); JMSL.setIsApplet(false); applet.getScoreFrame().addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { JMSL.closeMusicDevices(); System.exit(0); } }); } }