package com.jsyn.examples; import java.awt.BorderLayout; import javax.swing.JApplet; import com.jsyn.JSyn; import com.jsyn.Synthesizer; import com.jsyn.scope.AudioScope; import com.jsyn.swing.JAppletFrame; import com.jsyn.swing.SoundTweaker; import com.jsyn.unitgen.LineOut; import com.jsyn.unitgen.UnitSource; /** * Listen to a circuit while tweaking it knobs. Show output in a scope. * * @author Phil Burk (C) 2012 Mobileer Inc * */ public class CircuitTester extends JApplet { private static final long serialVersionUID = -2704222221111608377L; private Synthesizer synth; private LineOut lineOut; private SoundTweaker tweaker; private UnitSource unitSource; private AudioScope scope; public void init() { setLayout( new BorderLayout() ); synth = JSyn.createSynthesizer(); synth.add( lineOut = new LineOut() ); unitSource = createUnitSource(); synth.add( unitSource.getUnitGenerator() ); // Connect the source to both left and right speakers. unitSource.getOutput().connect( 0, lineOut.input, 0 ); unitSource.getOutput().connect( 0, lineOut.input, 1 ); tweaker = new SoundTweaker( synth, unitSource.getUnitGenerator().getClass().getName(), unitSource ); add( tweaker, BorderLayout.CENTER ); // Use a scope to see the output. scope = new AudioScope( synth ); scope.addProbe( unitSource.getOutput() ); scope.setTriggerMode( AudioScope.TriggerMode.NORMAL ); scope.getView().setControlsVisible( false ); add( BorderLayout.SOUTH, scope.getView() ); validate(); } /** * Override this to test your own circuits. * @return */ public UnitSource createUnitSource() { return new WindCircuit(); } public void start() { // Start synthesizer using default stereo output at 44100 Hz. synth.start(); // Start the LineOut. It will pull data from the other units. lineOut.start(); scope.start(); } public void stop() { scope.stop(); synth.stop(); } /* Can be run as either an application or as an applet. */ public static void main( String args[] ) { CircuitTester applet = new CircuitTester(); JAppletFrame frame = new JAppletFrame( "JSyn Circuit Tester", applet ); frame.setSize( 600, 600 ); frame.setVisible( true ); frame.test(); } }