/* * Created on Jan 3, 2005 * */ package jmslexamples.simple; import java.awt.BorderLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JLabel; import com.softsynth.jmsl.Composable; import com.softsynth.jmsl.EventScheduler; import com.softsynth.jmsl.Instrument; import com.softsynth.jmsl.JMSL; import com.softsynth.jmsl.JMSLMixerContainer; import com.softsynth.jmsl.MusicJob; import com.softsynth.jmsl.MusicShape; import com.softsynth.jmsl.PlayLurker; import com.softsynth.jmsl.Playable; import com.softsynth.jmsl.jsyn2.JSynMusicDevice; import com.softsynth.jmsl.jsyn2.JSynUnitVoiceInstrument; import com.softsynth.jmsl.view.MusicShapeEditor; /** * Play a MusicShape repeatedly with a JSyn instrument, each repeat scramble the * order of its elements * * Display the MusicShape in the MusicShapeEditor * * @author Nick Didkovsky, nick@didkovsky.com * */ public class MusicShapeEditorExample extends JFrame { JMSLMixerContainer mixer; Instrument instrument; MusicShape myMusicShape; MusicShapeEditor shapeEditor; public void start() { initJMSL(); initMusicDevices(); buildMixer(); buildInstrument(); buildMusicShape(); buildLayout(); launchMusicShape(); } private void buildLayout() { shapeEditor = new MusicShapeEditor(); shapeEditor.addMusicShape(myMusicShape); setLayout(new BorderLayout()); add(BorderLayout.NORTH, shapeEditor.getComponent()); } 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() { String unitVoiceClassName = com.softsynth.jmsl.jsyn2.unitvoices.SmoothFilteredSawtoothBL.class.getName(); int polyphony = 8; instrument = new JSynUnitVoiceInstrument(polyphony, unitVoiceClassName); mixer.addInstrument(instrument); } void buildMusicShape() { myMusicShape = new MusicShape(instrument.getDimensionNameSpace()); myMusicShape.setInstrument(instrument); myMusicShape.prefab(17); // 17 random elements myMusicShape.setRepeats(400); myMusicShape.addRepeatPlayable(new Playable() { public double play(double time, Composable parent) throws InterruptedException { MusicShape s = (MusicShape) parent; // -1 means scramble whole elements instead of along a single dimension s.scramble(0, s.size() - 1, -1); shapeEditor.refresh(); return time; } }); } private void launchMusicShape() { myMusicShape.launch(JMSL.now()); } public void stop() { myMusicShape.finishAll(); try { myMusicShape.waitForDone(); } catch (InterruptedException e) { e.printStackTrace(); } JMSL.scheduler.stop(); JMSL.closeMusicDevices(); } public static void main(String[] args) { MusicShapeEditorExample demo = new MusicShapeEditorExample(); demo.start(); demo.setVisible(true); demo.pack(); demo.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { demo.stop(); System.exit(0); } }); } }