From 2db41393dcdc5772829e5a86a6df9c0ad895b92c Mon Sep 17 00:00:00 2001 From: Denny Sheirer Date: Sun, 15 Nov 2026 02:15:33 -0500 Subject: [PATCH] #2654 NXDN Audio Removes Additive Non-Clipping Gain and uses JMBE AGC only (#2655) Co-authored-by: denny --- .../audio/codec/mbe/AmbeAudioModule.java | 4 +- .../dsheirer/dsp/gain/NonClippingGain.java | 51 ------------------- .../decode/nxdn/audio/NXDNAudioModule.java | 6 +-- .../decode/p25/audio/P25P1AudioModule.java | 1 - 4 files changed, 3 insertions(+), 59 deletions(-) delete mode 100644 src/main/java/io/github/dsheirer/dsp/gain/NonClippingGain.java diff --git a/src/main/java/io/github/dsheirer/audio/codec/mbe/AmbeAudioModule.java b/src/main/java/io/github/dsheirer/audio/codec/mbe/AmbeAudioModule.java index 43cd7098..fc2e9f82 100644 --- a/src/main/java/io/github/dsheirer/audio/codec/mbe/AmbeAudioModule.java +++ b/src/main/java/io/github/dsheirer/audio/codec/mbe/AmbeAudioModule.java @@ -41,11 +41,11 @@ public abstract class AmbeAudioModule extends JmbeAudioModule { if(getAudioCodec() != null) { - mLog.info("AMBE CODEC successfully loaded - P25-2/DMR/NXDN audio will be available"); + mLog.info("AMBE CODEC successfully loaded - P25-2/DMR/NXDN audio can be processed"); } else { - mLog.warn("AMBE CODEC not loaded - P25-2/DMR/NXDN audio will NOT be available"); + mLog.warn("AMBE CODEC not loaded - P25-2/DMR/NXDN audio will NOT be processed"); } sLibraryStatusLogged = true; diff --git a/src/main/java/io/github/dsheirer/dsp/gain/NonClippingGain.java b/src/main/java/io/github/dsheirer/dsp/gain/NonClippingGain.java deleted file mode 100644 index 612e284f..00000000 --- a/src/main/java/io/github/dsheirer/dsp/gain/NonClippingGain.java +++ /dev/null @@ -1,51 +0,0 @@ -package io.github.dsheirer.dsp.gain; - -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; - } -} diff --git a/src/main/java/io/github/dsheirer/module/decode/nxdn/audio/NXDNAudioModule.java b/src/main/java/io/github/dsheirer/module/decode/nxdn/audio/NXDNAudioModule.java index ae61a9d1..e419eee8 100644 --- a/src/main/java/io/github/dsheirer/module/decode/nxdn/audio/NXDNAudioModule.java +++ b/src/main/java/io/github/dsheirer/module/decode/nxdn/audio/NXDNAudioModule.java @@ -22,7 +22,6 @@ import io.github.dsheirer.alias.AliasList; import io.github.dsheirer.audio.codec.mbe.AmbeAudioModule; import io.github.dsheirer.audio.squelch.SquelchState; import io.github.dsheirer.audio.squelch.SquelchStateEvent; -import io.github.dsheirer.dsp.gain.NonClippingGain; import io.github.dsheirer.message.IMessage; import io.github.dsheirer.module.decode.nxdn.layer3.call.Audio; import io.github.dsheirer.module.decode.nxdn.layer3.call.Disconnect; @@ -41,7 +40,6 @@ import java.util.List; public class NXDNAudioModule extends AmbeAudioModule { private final SquelchStateListener mSquelchStateListener = new SquelchStateListener(); - private final NonClippingGain mGain = new NonClippingGain(5.0f, 0.95f); private final List