package com.jsyn.examples;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JPanel;
import com.jsyn.JSyn;
import com.jsyn.Synthesizer;
import com.jsyn.scope.AudioScope;
import com.jsyn.swing.JAppletFrame;
import com.jsyn.swing.PortControllerFactory;
import com.jsyn.unitgen.LineOut;
/**
* Generate the waveform shown on the Google home page on 2/22/12.
*
* @author Phil Burk (C) 2010 Mobileer Inc
*
*/
public class SeeGoogleWave extends JApplet
{
private static final long serialVersionUID = -831590388347137926L;
private Synthesizer synth;
private GoogleWaveOscillator googleWaveUnit;
private LineOut lineOut;
private AudioScope scope;
/* Can be run as either an application or as an applet. */
public static void main( String args[] )
{
SeeGoogleWave applet = new SeeGoogleWave();
JAppletFrame frame = new JAppletFrame( "Google Wave", applet );
frame.setSize( 640, 500 );
frame.setVisible( true );
frame.test();
frame.validate();
}
private void setupGUI()
{
setLayout( new BorderLayout() );
add( BorderLayout.NORTH, new JLabel(
"GoogleWave - elliptical segments" ) );
scope = new AudioScope( synth );
scope.addProbe( googleWaveUnit.output );
scope.setTriggerMode( AudioScope.TriggerMode.NORMAL );
scope.getView().setShowControls( false );
scope.start();
add( BorderLayout.CENTER, scope.getView() );
JPanel southPanel = new JPanel();
southPanel.setLayout( new GridLayout( 0, 1 ) );
add( BorderLayout.SOUTH, southPanel );
southPanel.add( PortControllerFactory
.createExponentialPortSlider( googleWaveUnit.frequency ) );
southPanel.add( PortControllerFactory
.createExponentialPortSlider( googleWaveUnit.variance ) );
southPanel.add( PortControllerFactory
.createExponentialPortSlider( googleWaveUnit.amplitude ) );
validate();
}
public void start()
{
synth = JSyn.createSynthesizer();
synth.add( googleWaveUnit = new GoogleWaveOscillator() );
googleWaveUnit.amplitude.setup( 0.02, 0.5, 1.0 );
googleWaveUnit.variance.setup( 0.0, 0.0, 1.0 );
googleWaveUnit.frequency.setup( 40.0, 200.0, 1000.0 );
// Add an output so we can hear it.
synth.add( lineOut = new LineOut() );
googleWaveUnit.output.connect( 0, lineOut.input, 0 );
googleWaveUnit.output.connect( 0, lineOut.input, 1 );
setupGUI();
// Start synthesizer using default stereo output at 44100 Hz.
synth.start();
// Start lineOut so it can pull data from other units.
lineOut.start();
// We only need to start the LineOut. It will pull data from the
// oscillator.
lineOut.start();
}
public void stop()
{
scope.stop();
synth.stop();
}
}