#2482 JMBE Library version 2.0 (#2483)

Co-authored-by: denny <dennis.sheirer@gmail.com>
This commit is contained in:
Denny Sheirer
2026-10-09 10:51:29 -04:00
committed by GitHub
parent a9120ed65e
commit c05328cd1e
8 changed files with 230 additions and 56 deletions

View File

@@ -35,9 +35,11 @@ import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import jmbe.iface.IAudioCodec;
import jmbe.iface.IAudioCodecLibrary;
import jmbe.iface.IAudioCodecV2;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -47,7 +49,7 @@ import org.slf4j.LoggerFactory;
public abstract class JmbeAudioModule extends AbstractAudioModule implements Listener<IMessage>, IMessageListener,
ISquelchStateListener
{
private static final Logger mLog = LoggerFactory.getLogger(JmbeAudioModule.class);
private static final Logger LOG = LoggerFactory.getLogger(JmbeAudioModule.class);
private static final String JMBE_AUDIO_LIBRARY = "JMBE";
private static final List<String> mLibraryLoadStatusLogged = new ArrayList<>();
private IAudioCodec mAudioCodec;
@@ -62,6 +64,37 @@ public abstract class JmbeAudioModule extends AbstractAudioModule implements Lis
loadConverter();
}
/**
* List of features supported by the JMBE audio library. Note: features are only supported in Version 2.0+
* @return list of features or an empty list if the current library version doesn't support features.
*/
public List<String> getFeatures()
{
if(mAudioCodec instanceof IAudioCodecV2 v2)
{
return v2.getFeatures();
}
return Collections.emptyList();
}
/**
* Sets the JMBE feature
* @param name of the feature
* @param value for the feature
*/
public void setFeature(String name, Object value)
{
if(mAudioCodec instanceof IAudioCodecV2 v2)
{
v2.setFeature(name, value);
}
else
{
LOG.info("Feature [" + name + "] is not supported by the current JMBE audio codec library version");
}
}
@Override
protected void closeAudioSegment()
{
@@ -135,7 +168,7 @@ public abstract class JmbeAudioModule extends AbstractAudioModule implements Lis
{
if(!mLibraryLoadStatusLogged.contains(JMBE_AUDIO_LIBRARY))
{
mLog.info("Loading JMBE library from [" + path + "]");
LOG.info("Loading JMBE library from [" + path + "]");
}
try
@@ -149,7 +182,7 @@ public abstract class JmbeAudioModule extends AbstractAudioModule implements Lis
{
if(!mLibraryLoadStatusLogged.contains(JMBE_AUDIO_LIBRARY + getCodecName()))
{
mLog.error("Couldn't load JMBE audio conversion library - " + iae.getMessage());
LOG.error("Couldn't load JMBE audio conversion library - " + iae.getMessage());
mLibraryLoadStatusLogged.add(JMBE_AUDIO_LIBRARY + getCodecName());
}
}
@@ -157,7 +190,7 @@ public abstract class JmbeAudioModule extends AbstractAudioModule implements Lis
{
if(!mLibraryLoadStatusLogged.contains(JMBE_AUDIO_LIBRARY))
{
mLog.error("Couldn't load JMBE audio conversion library from path [" + path + "]");
LOG.error("Couldn't load JMBE audio conversion library from path [" + path + "]");
mLibraryLoadStatusLogged.add(JMBE_AUDIO_LIBRARY);
}
}
@@ -165,7 +198,7 @@ public abstract class JmbeAudioModule extends AbstractAudioModule implements Lis
{
if(!mLibraryLoadStatusLogged.contains(JMBE_AUDIO_LIBRARY))
{
mLog.error("Couldn't load JMBE audio conversion library - class not found");
LOG.error("Couldn't load JMBE audio conversion library - class not found");
mLibraryLoadStatusLogged.add(JMBE_AUDIO_LIBRARY);
}
}
@@ -187,7 +220,7 @@ public abstract class JmbeAudioModule extends AbstractAudioModule implements Lis
if(!mLibraryLoadStatusLogged.contains(JMBE_AUDIO_LIBRARY))
{
mLog.info("JMBE audio conversion library loaded: " + library.getVersion());
LOG.info("JMBE audio conversion library loaded: " + library.getVersion());
mLibraryLoadStatusLogged.add(JMBE_AUDIO_LIBRARY);
}
}
@@ -195,7 +228,7 @@ public abstract class JmbeAudioModule extends AbstractAudioModule implements Lis
{
if(!mLibraryLoadStatusLogged.contains(JMBE_AUDIO_LIBRARY))
{
mLog.warn("JMBE library version 1.0.0 or higher is required - found: " + library.getVersion());
LOG.warn("JMBE library version 1.0.0 or higher is required - found: " + library.getVersion());
mLibraryLoadStatusLogged.add(JMBE_AUDIO_LIBRARY);
}
}
@@ -204,7 +237,7 @@ public abstract class JmbeAudioModule extends AbstractAudioModule implements Lis
{
if(!mLibraryLoadStatusLogged.contains(JMBE_AUDIO_LIBRARY))
{
mLog.info("JMBE audio conversion library NOT FOUND");
LOG.info("JMBE audio conversion library NOT FOUND");
mLibraryLoadStatusLogged.add(JMBE_AUDIO_LIBRARY);
}
}
@@ -213,7 +246,7 @@ public abstract class JmbeAudioModule extends AbstractAudioModule implements Lis
{
if(!mLibraryLoadStatusLogged.contains(JMBE_AUDIO_LIBRARY))
{
mLog.error("Couldn't load JMBE audio conversion library - invocation target exception", ite);
LOG.error("Couldn't load JMBE audio conversion library - invocation target exception", ite);
mLibraryLoadStatusLogged.add(JMBE_AUDIO_LIBRARY);
}
}
@@ -221,7 +254,7 @@ public abstract class JmbeAudioModule extends AbstractAudioModule implements Lis
{
if(!mLibraryLoadStatusLogged.contains(JMBE_AUDIO_LIBRARY))
{
mLog.error("Couldn't load JMBE audio conversion library - instantiation exception", e1);
LOG.error("Couldn't load JMBE audio conversion library - instantiation exception", e1);
mLibraryLoadStatusLogged.add(JMBE_AUDIO_LIBRARY);
}
}
@@ -229,7 +262,7 @@ public abstract class JmbeAudioModule extends AbstractAudioModule implements Lis
{
if(!mLibraryLoadStatusLogged.contains(JMBE_AUDIO_LIBRARY))
{
mLog.error("Couldn't load JMBE audio conversion library - security restrictions");
LOG.error("Couldn't load JMBE audio conversion library - security restrictions");
mLibraryLoadStatusLogged.add(JMBE_AUDIO_LIBRARY);
}
}
@@ -237,7 +270,7 @@ public abstract class JmbeAudioModule extends AbstractAudioModule implements Lis
{
if(!mLibraryLoadStatusLogged.contains(JMBE_AUDIO_LIBRARY))
{
mLog.error("Couldn't load JMBE audio conversion library - no such method exception");
LOG.error("Couldn't load JMBE audio conversion library - no such method exception");
mLibraryLoadStatusLogged.add(JMBE_AUDIO_LIBRARY);
}
}
@@ -246,7 +279,7 @@ public abstract class JmbeAudioModule extends AbstractAudioModule implements Lis
{
if(!mLibraryLoadStatusLogged.contains(JMBE_AUDIO_LIBRARY))
{
mLog.warn("JMBE audio library path is NOT SET in your User Preferences.");
LOG.warn("JMBE audio library path is NOT SET in your User Preferences.");
mLibraryLoadStatusLogged.add(JMBE_AUDIO_LIBRARY);
}
}