/* * Created by Nick on Jan 3, 2005 * */ package jmsltutorial; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; import javax.swing.JFrame; import javax.swing.JLabel; import com.didkovsky.portview.swing.ViewFactorySwing; import com.softsynth.jmsl.Composable; import com.softsynth.jmsl.JMSL; import com.softsynth.jmsl.JMSLMixerContainer; import com.softsynth.jmsl.MusicShape; import com.softsynth.jmsl.Playable; import com.softsynth.jmsl.midi.MidiIOFactory; import com.softsynth.jmsl.midi.MidiInstrument; /** * Just play a MusicShape with a Midi instrument. * After a few repeats, the MusicShape self-modifies its pitch data by scrambling dimension 1. * * @author Nick Didkovsky, (c) 2004 All rights reserved, Email: * nick@didkovsky.com * */ public class ShapeToot02 extends JFrame { JMSLMixerContainer mixer; MidiInstrument instrument; MusicShape musicShape; public void go() { initJavaSoundMidi(); buildMixer(); buildInstrument(); buildSong(); launchSong(); } private void initJavaSoundMidi() { try { JMSL.midi = new MidiIOFactory().getMidiIO(MidiIOFactory.MidiIO_JAVASOUND); JMSL.midi.open(); } catch (IOException e2) { e2.printStackTrace(); } } private void buildMixer() { mixer = new JMSLMixerContainer(); mixer.start(); } /** create a Midi instrument that sends on channel 1 and uses program change */ private void buildInstrument() { instrument = new MidiInstrument(1); // midi channel 1 instrument.setProgram(10); // midi program change mixer.addInstrument(instrument); } void buildSong() { musicShape = new MusicShape(instrument.getDimensionNameSpace()); musicShape.setInstrument(instrument); musicShape.add(0.5, 60, 64, 1.5); musicShape.add(0.5, 62, 64, 1.5); musicShape.add(0.5, 64, 64, 1.5); musicShape.add(0.5, 66, 64, 1.5); musicShape.add(0.5, 68, 64, 1.5); musicShape.setRepeats(1000); musicShape.addRepeatPlayable(new Playable() { @Override public double play(double time, Composable parent) throws InterruptedException { MusicShape s = (MusicShape) parent; if (s.getRepeatCount() > 2) { s.scramble(0, s.size() - 1, 1); } return time; } }); } private void launchSong() { musicShape.launch(JMSL.now()); } public static void main(String[] args) { ShapeToot02 toot = new ShapeToot02(); toot.setTitle("Play a MusicShape using JavaSound MIDI"); toot.setSize(400, 200); toot.setVisible(true); toot.go(); toot.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } }