From 87e70ae0e4c2bdaf493a38a70d49ee9b6450d2dd Mon Sep 17 00:00:00 2001 From: denny Date: Sat, 12 Dec 2015 11:30:39 -0500 Subject: [PATCH] Adding missing gain class --- src/dsp/gain/NonClippingGain.java | 65 +++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/dsp/gain/NonClippingGain.java diff --git a/src/dsp/gain/NonClippingGain.java b/src/dsp/gain/NonClippingGain.java new file mode 100644 index 00000000..ef1a7bcd --- /dev/null +++ b/src/dsp/gain/NonClippingGain.java @@ -0,0 +1,65 @@ +package dsp.gain; + +import sample.real.RealBuffer; + +public class NonClippingGain +{ + private float mGain; + private float mMaxValue; + + /** + * Applies a fixed gain value to the float samples. + * + * @param gain value + * @param maxValue max absolute value to prevent clipping ( 0.0 to 1.0 ) + */ + public NonClippingGain( float gain, float maxValue ) + { + mGain = gain; + mMaxValue = maxValue; + } + + /** + * Applies gain to the sample + */ + public float apply( float sample ) + { + float adjusted = sample * mGain; + + if( adjusted > mMaxValue ) + { + adjusted = mMaxValue; + } + if( adjusted < -mMaxValue ) + { + adjusted = -mMaxValue; + } + + return adjusted; + } + + /** + * Applies gain to the sample array + */ + public float[] apply( float[] samples ) + { + for( int x = 0; x < samples.length; x++ ) + { + samples[ x ] = apply( samples[ x ]); + } + + return samples; + } + + /** + * Applies gain to the real buffer + */ + public RealBuffer apply( RealBuffer buffer ) + { + float[] samples = buffer.getSamples(); + + apply( samples ); + + return buffer; + } +}