/* * Created on Nov 25, 2014 by Nick * */ package jmslexamples.jsyn2; import java.awt.BorderLayout; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import com.didkovsky.portview.swing.ViewFactorySwing; import com.softsynth.jmsl.*; import com.softsynth.jmsl.jsyn2.JSynMusicDevice; import com.softsynth.jmsl.jsyn2.JSynUnitVoiceInstrument; import com.softsynth.jmsl.jsyn2.instruments.LineInInstrument; import com.softsynth.jmsl.jsyn2.unitvoices.SimpleDelay; import com.softsynth.jmsl.view.MusicShapeEditor; /** * Send a LineIn wrapped up in an Instrument to the input of an Instrument that * controls a polyphonic delay. Play the delay instrument with a MusicShape. * Display MusicShape in an editor. * * @author Nick Didkovsky, (c) 2014 Nick Didkovsky, nick@didkovsky.com * */ public class LineInInstrumentExample { JMSLMixerContainer mixer; LineInInstrument lineInInstrument; JSynUnitVoiceInstrument simpleDelayInstrument; MusicShape delayMusicShape; public void build() { initJMSL(); initMusicDevices(); buildMixer(); buildInstruments(); buildMusicShape(); } private void initJMSL() { JMSL.setViewFactory(new ViewFactorySwing()); JMSL.scheduler = new EventScheduler(); JMSL.scheduler.start(); JMSL.clock.setAdvance(0.2); } private void initMusicDevices() { JSynMusicDevice dev = JSynMusicDevice.instance(); dev.setNumInputChannels(2); // for LineIn dev.open(); } private void buildMixer() { mixer = new JMSLMixerContainer(); mixer.start(); } private void buildInstruments() { lineInInstrument = new LineInInstrument(); simpleDelayInstrument = new JSynUnitVoiceInstrument(8, SimpleDelay.class.getName()); mixer.addInstrument(lineInInstrument); mixer.addInstrument(simpleDelayInstrument); simpleDelayInstrument.addSignalSource(lineInInstrument.getOutput()); mixer.panAmpChange(0, 0, 0.2); mixer.panAmpChange(1, 0, 0.2); mixer.panAmpChange(2, 1.0, 0.5); } private void buildMusicShape() { delayMusicShape = new MusicShape(simpleDelayInstrument.getDimensionNameSpace()); delayMusicShape.setInstrument(simpleDelayInstrument); delayMusicShape.setRepeats(1000); delayMusicShape.prefab(); delayMusicShape.print(); } public void close() { JMSL.scheduler.stop(); JMSL.closeMusicDevices(); } public void launch() { delayMusicShape.launch(JMSL.now()); } public static void main(String[] args) { final LineInInstrumentExample example = new LineInInstrumentExample(); example.build(); example.launch(); MusicShapeEditor se = new MusicShapeEditor(); se.addMusicShape(example.delayMusicShape); JFrame jf = new JFrame("LineIn example"); jf.setLayout(new BorderLayout()); jf.add(BorderLayout.NORTH, se.getComponent()); jf.add(BorderLayout.SOUTH, example.mixer.getPanAmpControlPanel()); jf.pack(); jf.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { example.close(); System.exit(0); } }); jf.setVisible(true); } }