/* * Created by Nick on Jan 3, 2005 * */ package jmslexamples.simple; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JLabel; import com.didkovsky.portview.swing.ViewFactorySwing; import com.softsynth.jmsl.EventScheduler; import com.softsynth.jmsl.Instrument; import com.softsynth.jmsl.JMSL; import com.softsynth.jmsl.JMSLMixerContainer; import com.softsynth.jmsl.MusicShape; import com.softsynth.jmsl.ParallelCollection; import com.softsynth.jmsl.jsyn2.JSynMusicDevice; import com.softsynth.jmsl.jsyn2.JSynUnitVoiceInstrument; import com.softsynth.jmsl.util.Tunable; import com.softsynth.jmsl.util.TuningET; /** * Use a ParallelCollection to play four independent voices. Also shows how to * make new equal tempered tunings * * @author Nick Didkovsky, (c) 2004 All rights reserved, Email: * nick@didkovsky.com * */ public class JSynQuartet extends JFrame { JMSLMixerContainer mixer; Instrument instrument1; Instrument instrument2; Instrument instrument3; Instrument instrument4; ParallelCollection quartet; public void start() { initJMSL(); initMusicDevices(); buildMixer(); buildInstruments(); setTunings(); buildQuartet(); launchQuartet(); } private void initJMSL() { JMSL.scheduler = new EventScheduler(); JMSL.scheduler.start(); JMSL.clock.setAdvance(0.1); JMSL.setViewFactory(new ViewFactorySwing()); } private void initMusicDevices() { JSynMusicDevice.instance().open(); } private void buildMixer() { mixer = new JMSLMixerContainer(); mixer.start(); } private void buildInstruments() { instrument1 = new JSynUnitVoiceInstrument(8, com.softsynth.jmsl.jsyn2.unitvoices.FMVoice.class.getName()); mixer.addInstrument(instrument1, 0.0, 0.4); instrument2 = new JSynUnitVoiceInstrument(8, com.softsynth.jmsl.jsyn2.unitvoices.FMVoice.class.getName()); mixer.addInstrument(instrument2, 0.4, 0.4); instrument3 = new JSynUnitVoiceInstrument(8, com.softsynth.jmsl.jsyn2.unitvoices.FMVoice.class.getName()); mixer.addInstrument(instrument3, 0.6, 0.4); instrument4 = new JSynUnitVoiceInstrument(8, com.softsynth.jmsl.jsyn2.unitvoices.FMVoice.class.getName()); mixer.addInstrument(instrument4, 1.0, 0.4); add(mixer.getPanAmpControlPanel()); } private void setTunings() { ((Tunable) instrument1).setTuning(new TuningET(10)); ((Tunable) instrument2).setTuning(new TuningET(10)); ((Tunable) instrument3).setTuning(new TuningET(10)); ((Tunable) instrument4).setTuning(new TuningET(10)); } private void buildQuartet() { MusicShape s1 = new MusicShape(4); s1.setInstrument(instrument1); s1.add(1.0, 60, 0.6, 1.5); s1.add(1.0, 62, 0.6, 1.25); s1.add(1.0, 65, 0.6, 1.2); s1.setRepeats(4); MusicShape s2 = new MusicShape(4); s2.setInstrument(instrument2); s2.add(1.3333, 50, 0.6, 1.5); s2.add(1.3333, 52, 0.6, 1.25); s2.add(1.3333, 55, 0.6, 1.2); s2.setRepeats(3); MusicShape s3 = new MusicShape(4); s3.setInstrument(instrument3); s3.add(1.75, 40, 0.6, 1.5); s3.add(1.75, 43, 0.6, 1.25); s3.add(2.5, 45, 0.6, 2.2); s3.setRepeats(2); MusicShape s4 = new MusicShape(4); s4.setInstrument(instrument4); s4.add(4.0, 30, 0.6, 4.5); s4.add(4.0, 34, 0.6, 4.5); s4.add(4.0, 35, 0.6, 4.5); s4.setRepeats(1); quartet = new ParallelCollection(); quartet.add(s1); quartet.add(s2); quartet.add(s3); quartet.add(s4); quartet.setRepeats(10); } private void launchQuartet() { quartet.launch(JMSL.now()); } public void stop() { quartet.finishAll(); try { quartet.waitForDone(); } catch (InterruptedException e) { e.printStackTrace(); } JMSL.scheduler.stop(); JMSL.closeMusicDevices(); } public static void main(String[] args) { JSynQuartet demo = new JSynQuartet(); demo.add(new JLabel("There is no GUI for this example", JLabel.CENTER)); demo.setSize(800, 200); demo.setVisible(true); demo.start(); demo.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { demo.stop(); System.exit(0); } }); } }