/* * Created on Oct 5, 2003 * */ package jmslexamples.jsyn; import java.awt.Frame; import java.awt.GridLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import com.softsynth.jmsl.*; import com.softsynth.jmsl.jsyn.JSynInsFromClassName; import com.softsynth.jmsl.jsyn.JSynMusicDevice; import com.softsynth.jmsl.view.PVFrameAdapter; import com.softsynth.jmsl.view.PanAmpPanel; /** * Simple example of using JSyn SynthNote to play in JMSL. * * Create a JMSL Instrument that allocates and plays JSyn SynthNotes. Pass in * the SynthNote class name, play with a MusicShape * * @author Nick Didkovsky, email: didkovn@mail.rockefeller.edu, (c) 2003 Nick * Didkovsky, all rights reserved. * */ public class SimpleSynthNoteSupport extends PVFrameAdapter { JSynInsFromClassName ins; JMSLMixerContainer mixer; MusicShape musicShape; public SimpleSynthNoteSupport() { super("SimpleSynthNoteSupport"); setFrameLayout(new GridLayout(1, 0, 10, 10)); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { JMSL.closeMusicDevices(); System.exit(0); } }); initJMSL(); initMusicDevices(); buildInstruments(); buildMixer(); buildComposition(); buildGUI(); musicShape.launch(JMSL.now() + 1); } private void buildComposition() { musicShape = new MusicShape(ins.getDimensionNameSpace()); musicShape.add(0.25, 60, 0.5, 0.5); musicShape.add(0.25, 62, 0.5, 0.5); musicShape.add(0.25, 63, 0.5, 0.5); musicShape.add(0.25, 65, 0.5, 0.5); musicShape.add(0.25, 67, 0.5, 0.5); // scramble some subrange every repeat musicShape.addRepeatPlayable(new Playable() { public double play(double time, Composable parent) throws InterruptedException { MusicShape s = (MusicShape) parent; int fromIndex = JMSLRandom.choose(s.size()); int toIndex = JMSLRandom.choose(s.size()); if (fromIndex > toIndex) { int temp = fromIndex; fromIndex = toIndex; toIndex = temp; } s.scramble(fromIndex, toIndex, 1); return time; } }); musicShape.setRepeats(15); musicShape.setInstrument(ins); } private void buildGUI() { for (int i = 0; i < mixer.getNumFaders(); i++) { PanAmpPanel p = new PanAmpPanel(0.5, 0.5, mixer); p.setFaderName(mixer.getInstrument(i).getName()); add(p.getComponent()); } add(mixer.getGUIComponent()); pack(); setVisible(true); } private void buildMixer() { mixer = new JMSLMixerContainer(); mixer.addInstrument(ins); mixer.start(); } private void buildInstruments() { ins = new JSynInsFromClassName(8, com.softsynth.jmsl.jsyn.circuits.BrassSynthNote.class.getName()); } private void initMusicDevices() { JSynMusicDevice.instance().edit((Frame) this.getComponent()); JSynMusicDevice.instance().open(); } private void initJMSL() { JMSLRandom.randomize(); JMSL.clock.setAdvance(0.1); } public static void main(String[] args) { SimpleSynthNoteSupport ssns = new SimpleSynthNoteSupport(); } }