package jmsltestsuite; import java.awt.GridLayout; import java.util.Vector; import com.didkovsky.portview.PVFrame; import com.didkovsky.portview.awt.ViewFactoryAWT; import com.didkovsky.portview.swing.ViewFactorySwing; import com.softsynth.jmsl.*; import com.softsynth.jmsl.score.Score; import com.softsynth.jmsl.score.transcribe.*; import com.softsynth.jmsl.util.TimeSignature; import com.softsynth.jmsl.view.PVFrameAdapter; /** * Displays scores in your own gui * * Generate and transcribe 5 MusicShapes. Open up an awt.Frame and display the scored transcription * of each as five separate Scores displayed in the same Frame * * @author Nick Didkovsky, March 21, 2002, (c) 2002 Nick Didkovsky, all rights reserved */ public class MultipleScoresDemo1 { /** simulates grabbing a MusicShape live */ public MusicShape captureMusicShape() { MusicShape s = new MusicShape(4); double totalDur = 0; while (totalDur < 8) { s.add(totalDur, JMSLRandom.choose(60, 72), JMSLRandom.choose(), JMSLRandom.choose(0.25, 1.5)); totalDur += JMSLRandom.choose(0.25, 1.8); } return s; } /** Transcribe a MusicShape and return a new Score */ public Score transcribe(MusicShape s) throws ElementMissedException, SearchPathListExpansionException { Score score = new Score(1, 1024, 200); // set up canvas listeners, set canvas size, etc score.ownCanvas(); score.addMeasure(); // prime the pump Transcriber transcriber = new Transcriber(); Vector v = new Vector(); v.addElement(new TimeSignature(4, 4)); transcriber.setTempoTimeSignatures(v); transcriber.setScore(score); transcriber.setSourceMusicShape(s); score.setCurrentStaffNumber(0); score.rewind(); transcriber.transcribe(); return score; } public static void main(String args[]) { boolean useSwing = false; if (useSwing) { JMSL.setViewFactory(new ViewFactorySwing()); } else { JMSL.setViewFactory(new ViewFactoryAWT()); } JMSLRandom.randomize(); PVFrame f = new PVFrameAdapter("Just some frame"); f.setSize(1100, 800); f.setFrameLayout(new GridLayout(0, 1)); f.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } }); PVFrame f2 = new PVFrameAdapter("Some other frame"); f2.setFrameLayout(new GridLayout(0, 1, 10, 10)); // critical!!! Each new Score must own its own ScoreCanvas for rendering Score.useSharedCanvas(false); // Generally useful transcription setup. Looks for triplets, // quintuplets, etc // You can customize this and allow/disallow misc tuplets BeatDivisionSchemeList.defaultSetup(); MultipleScoresDemo1 test = new MultipleScoresDemo1(); try { // simulate capturing 5 MusicShapes. Transcribe and add to layout for (int i = 0; i < 5; i++) { // "capture" a MusicShape MusicShape capturedMusicShape = test.captureMusicShape(); // Transcribe it Score score = test.transcribe(capturedMusicShape); // add its rendering canvas to our frame f.add(score.getScoreCanvas().getComponent()); f2.add(score.getControlPanel().getComponent()); } f.validate(); f2.pack(); f.setVisible(true); f2.setVisible(true); } catch (ElementMissedException e) { e.printStackTrace(); System.out.println("ERROR: " + e); System.exit(0); } catch (SearchPathListExpansionException e) { e.printStackTrace(); System.out.println("ERROR: " + e); System.exit(0); } } }