package com.jsyn.examples;
import com.jsyn.ports.UnitInputPort;
import com.jsyn.ports.UnitOutputPort;
import com.jsyn.unitgen.*;
/**
* Wind Sound Create a wind-like sound by feeding white noise "shshshshsh"
* through a randomly varying state filter to make a "whooowhoosh" sound. The
* cuttoff frequency of the low pass filter is controlled by a RedNoise unit
* which creates a slowly varying random control signal.
*
* @author (C) 1997 Phil Burk, SoftSynth.com, All Rights Reserved
*/
public class WindCircuit extends Circuit implements UnitSource
{
/* Declare units that will be part of the circuit. */
WhiteNoise myNoise;
FilterStateVariable myFilter;
RedNoise myLFO;
MultiplyAdd myScalar;
/* Declare ports. */
public UnitInputPort noiseAmp;
public UnitInputPort modRate;
public UnitInputPort modDepth;
public UnitInputPort cutoff;
public UnitInputPort resonance;
public UnitInputPort amplitude;
public UnitOutputPort output;
public WindCircuit()
{
/*
* Create various unit generators and add them to circuit.
*/
add( myNoise = new WhiteNoise() );
add( myFilter = new FilterStateVariable() );
add( myLFO = new RedNoise() );
add( myScalar = new MultiplyAdd() );
/* Make ports on internal units appear as ports on circuit. */
/* Optionally give some circuit ports more meaningful names. */
addPort( noiseAmp = myNoise.amplitude, "NoiseAmp" );
addPort( modRate = myLFO.frequency, "ModRate" );
addPort( modDepth = myScalar.inputB, "ModDepth" );
addPort( cutoff = myScalar.inputC, "Cutoff" );
addPort( resonance = myFilter.resonance );
addPort( amplitude = myFilter.amplitude );
addPort( output = myFilter.output );
/* Connect SynthUnits to make control signal path. */
myLFO.output.connect( myScalar.inputA );
myScalar.output.connect( myFilter.frequency );
/* Connect SynthUnits to make audio signal path. */
myNoise.output.connect( myFilter.input );
/* Set ports to useful values and ranges. */
noiseAmp.setup( 0.0, 0.3, 0.4 );
modRate.setup( 0.0, 1.0, 10.0 );
modDepth.setup( 0.0, 300.0, 1000.0 );
cutoff.setup( 0.0, 600.0, 1000.0 );
resonance.setup( 0.0, 0.066, 0.2 );
amplitude.setup( 0.0, 0.9, 0.999 );
}
public UnitOutputPort getOutput()
{
return output;
}
}