package ddf.minim.ugens; import ddf.minim.UGen; /** * A UGen which simply returns the reciprocal value of it's input. * Because this UGen is intended for use with control signals, * rather than audio signals, it behaves as a mono UGen, regardless * of whether or not it has been configured with more than one channel. * This means that the output of Reciprocal will always be the reciprocal * of the first (and usually only) channel of the denominator input copied * to all output channels, similar to Constant. * * @related UGen * * @author nodog * */ public class Reciprocal extends UGen { /** * denominator is the default audio input */ public UGenInput denominator; /** * Constructs a Reciprocal with a denominator of 1. */ public Reciprocal() { this( 1.0f ); } /** * Constructs a Reciprocal with the given denominator value. * * @param fixedDenominator * the denominator value if the input is never connected */ public Reciprocal(float fixedDenominator) { super(); // audio = new UGenInput(InputType.AUDIO); // for this UGen, denominator is the main input and can be audio denominator = new UGenInput( InputType.AUDIO ); denominator.setLastValue( fixedDenominator ); } /** * Used to change the fixedDenominator value after instantiation * * @param fixedDenominator * the denominator value if the input is never connected */ public void setReciprocal(float fixedDenominator) { denominator.setLastValue( fixedDenominator ); } @Override protected void uGenerate(float[] channels) { for ( int i = 0; i < channels.length; i++ ) { channels[i] = 1.0f / denominator.getLastValue(); } } }