package com.jsyn.examples;
import java.awt.BorderLayout;
import java.util.ArrayList;
import javax.swing.JApplet;
import javax.swing.JLabel;
import com.jsyn.JSyn;
import com.jsyn.Synthesizer;
import com.jsyn.scope.AudioScope;
import com.jsyn.swing.JAppletFrame;
import com.jsyn.unitgen.Add;
import com.jsyn.unitgen.LineOut;
import com.jsyn.unitgen.SawtoothOscillatorBL;
import com.jsyn.unitgen.SineOscillator;
import com.jsyn.unitgen.TriangleOscillator;
import com.jsyn.unitgen.UnitOscillator;
/**
* Display waveforms using the AudioScope.
* The frequency of the oscillators is modulated by an LFO.
* @author Phil Burk (C) 2010 Mobileer Inc
*
*/
public class ShowWaves extends JApplet
{
private static final long serialVersionUID = -8315903842197137926L;
private Synthesizer synth;
private UnitOscillator lfo;
private Add adder;
private ArrayList<UnitOscillator> oscillators = new ArrayList<UnitOscillator>();
private LineOut lineOut;
private AudioScope scope;
/* Can be run as either an application or as an applet. */
public static void main( String args[] )
{
ShowWaves applet = new ShowWaves();
JAppletFrame frame = new JAppletFrame( "ShowWaves", applet );
frame.setSize( 640, 300 );
frame.setVisible( true );
frame.test();
}
private void setupGUI()
{
setLayout( new BorderLayout() );
add( BorderLayout.NORTH, new JLabel("ShowWaves in an AudioScope Mod001") );
scope = new AudioScope(synth);
for( UnitOscillator osc : oscillators)
{
scope.addProbe( osc.output );
}
scope.setTriggerMode( AudioScope.TriggerMode.NORMAL );
scope.start();
// Turn on the gain and trigger control GUI.
scope.getView().setControlsVisible(true);
add( BorderLayout.CENTER, scope.getView() );
validate();
}
public void start()
{
synth = JSyn.createSynthesizer();
// Add an LFO.
synth.add( lfo = new SineOscillator() );
synth.add( adder = new Add() );
// Add an output so we can hear the oscillators.
synth.add( lineOut = new LineOut() );
lfo.frequency.set( 0.1 );
lfo.amplitude.set( 200.0 );
adder.inputB.set( 400.0 );
lfo.output.connect( adder.inputA );
oscillators.add( new SawtoothOscillatorBL() );
oscillators.add( new SineOscillator() );
oscillators.add( new TriangleOscillator() );
for( UnitOscillator osc : oscillators)
{
synth.add( osc);
adder.output.connect( osc.frequency );
osc.output.connect( 0, lineOut.input, 0 );
osc.amplitude.set( 0.2 );
}
// Start synthesizer using default stereo output at 44100 Hz.
synth.start();
// Start lineOut so it can pull data from other units.
lineOut.start();
setupGUI();
// We only need to start the LineOut. It will pull data from the
// oscillator.
lineOut.start();
}
public void stop()
{
scope.stop();
synth.stop();
}
}