diff --git a/sherpa-onnx/java-api/Makefile b/sherpa-onnx/java-api/Makefile index 85964083..c65548e9 100644 --- a/sherpa-onnx/java-api/Makefile +++ b/sherpa-onnx/java-api/Makefile @@ -6,7 +6,9 @@ out_jar := $(out_dir)/sherpa-onnx.jar package_dir := com/k2fsa/sherpa/onnx -java_files := WaveReader.java +java_files := LibraryLoader.java + +java_files += WaveReader.java java_files += WaveWriter.java java_files += EndpointRule.java java_files += EndpointConfig.java diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/AudioTagging.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/AudioTagging.java index 7d05cf7d..74b9ca2c 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/AudioTagging.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/AudioTagging.java @@ -3,13 +3,10 @@ package com.k2fsa.sherpa.onnx; public class AudioTagging { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public AudioTagging(AudioTaggingConfig config) { + LibraryLoader.maybeLoad(); ptr = newFromFile(config); } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/DenoisedAudio.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/DenoisedAudio.java index dcad1d5b..09e875cc 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/DenoisedAudio.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/DenoisedAudio.java @@ -3,14 +3,11 @@ package com.k2fsa.sherpa.onnx; public class DenoisedAudio { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private final float[] samples; private final int sampleRate; public DenoisedAudio(float[] samples, int sampleRate) { + LibraryLoader.maybeLoad(); this.samples = samples; this.sampleRate = sampleRate; } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/GeneratedAudio.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/GeneratedAudio.java index f342e7b8..f8e543d9 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/GeneratedAudio.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/GeneratedAudio.java @@ -3,14 +3,11 @@ package com.k2fsa.sherpa.onnx; public class GeneratedAudio { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private final float[] samples; private final int sampleRate; public GeneratedAudio(float[] samples, int sampleRate) { + LibraryLoader.maybeLoad(); this.samples = samples; this.sampleRate = sampleRate; } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/KeywordSpotter.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/KeywordSpotter.java index 3565c05e..c6038e9e 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/KeywordSpotter.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/KeywordSpotter.java @@ -3,13 +3,10 @@ package com.k2fsa.sherpa.onnx; public class KeywordSpotter { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public KeywordSpotter(KeywordSpotterConfig config) { + LibraryLoader.maybeLoad(); ptr = newFromFile(config); } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/LibraryLoader.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/LibraryLoader.java new file mode 100644 index 00000000..3b9e91da --- /dev/null +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/LibraryLoader.java @@ -0,0 +1,23 @@ +package com.k2fsa.sherpa.onnx; + +public class LibraryLoader { + private static volatile boolean autoLoadEnabled = true; + private static volatile boolean isLoaded = false; + + static synchronized void loadLibrary() { + if (!isLoaded) { + System.loadLibrary("sherpa-onnx-jni"); + isLoaded = true; + } + } + + public static void setAutoLoadEnabled(boolean enabled) { + autoLoadEnabled = enabled; + } + + static void maybeLoad() { + if (autoLoadEnabled) { + loadLibrary(); + } + } +} \ No newline at end of file diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflinePunctuation.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflinePunctuation.java index 95aa50c4..5597d86e 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflinePunctuation.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflinePunctuation.java @@ -3,13 +3,10 @@ package com.k2fsa.sherpa.onnx; public class OfflinePunctuation { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public OfflinePunctuation(OfflinePunctuationConfig config) { + LibraryLoader.maybeLoad(); ptr = newFromFile(config); } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineRecognizer.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineRecognizer.java index a89870ce..e500bbf7 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineRecognizer.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineRecognizer.java @@ -3,13 +3,10 @@ package com.k2fsa.sherpa.onnx; public class OfflineRecognizer { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public OfflineRecognizer(OfflineRecognizerConfig config) { + LibraryLoader.maybeLoad(); ptr = newFromFile(config); } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineSpeakerDiarization.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineSpeakerDiarization.java index b75cd09e..41dca34a 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineSpeakerDiarization.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineSpeakerDiarization.java @@ -3,13 +3,10 @@ package com.k2fsa.sherpa.onnx; public class OfflineSpeakerDiarization { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public OfflineSpeakerDiarization(OfflineSpeakerDiarizationConfig config) { + LibraryLoader.maybeLoad(); ptr = newFromFile(config); } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineSpeechDenoiser.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineSpeechDenoiser.java index 5eceaa6f..63e0e7db 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineSpeechDenoiser.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineSpeechDenoiser.java @@ -3,13 +3,10 @@ package com.k2fsa.sherpa.onnx; public class OfflineSpeechDenoiser { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public OfflineSpeechDenoiser(OfflineSpeechDenoiserConfig config) { + LibraryLoader.maybeLoad(); ptr = newFromFile(config); } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineStream.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineStream.java index 30c4131c..b24d3cae 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineStream.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineStream.java @@ -3,13 +3,10 @@ package com.k2fsa.sherpa.onnx; public class OfflineStream { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public OfflineStream() { + LibraryLoader.maybeLoad(); this.ptr = 0; } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineTts.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineTts.java index 8c8b294a..5c4a1dde 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineTts.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OfflineTts.java @@ -4,13 +4,10 @@ package com.k2fsa.sherpa.onnx; public class OfflineTts { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public OfflineTts(OfflineTtsConfig config) { + LibraryLoader.maybeLoad(); ptr = newFromFile(config); } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OnlinePunctuation.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OnlinePunctuation.java index 5950c365..4fbc713c 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OnlinePunctuation.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OnlinePunctuation.java @@ -3,13 +3,10 @@ package com.k2fsa.sherpa.onnx; public class OnlinePunctuation { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public OnlinePunctuation(OnlinePunctuationConfig config) { + LibraryLoader.maybeLoad(); ptr = newFromFile(config); } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OnlineRecognizer.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OnlineRecognizer.java index 206d46ba..3ac1b64f 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OnlineRecognizer.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OnlineRecognizer.java @@ -4,13 +4,10 @@ package com.k2fsa.sherpa.onnx; public class OnlineRecognizer { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public OnlineRecognizer(OnlineRecognizerConfig config) { + LibraryLoader.maybeLoad(); ptr = newFromFile(config); } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OnlineStream.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OnlineStream.java index 21a00826..a2c9f4f1 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OnlineStream.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/OnlineStream.java @@ -4,13 +4,10 @@ package com.k2fsa.sherpa.onnx; public class OnlineStream { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public OnlineStream() { + LibraryLoader.maybeLoad(); this.ptr = 0; } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/SpeakerEmbeddingExtractor.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/SpeakerEmbeddingExtractor.java index 5f872bdd..d2ff7ff9 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/SpeakerEmbeddingExtractor.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/SpeakerEmbeddingExtractor.java @@ -3,13 +3,10 @@ package com.k2fsa.sherpa.onnx; public class SpeakerEmbeddingExtractor { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public SpeakerEmbeddingExtractor(SpeakerEmbeddingExtractorConfig config) { + LibraryLoader.maybeLoad(); ptr = newFromFile(config); } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/SpeakerEmbeddingManager.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/SpeakerEmbeddingManager.java index f4af8d18..76ab97a3 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/SpeakerEmbeddingManager.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/SpeakerEmbeddingManager.java @@ -3,13 +3,10 @@ package com.k2fsa.sherpa.onnx; public class SpeakerEmbeddingManager { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public SpeakerEmbeddingManager(int dim) { + LibraryLoader.maybeLoad(); ptr = create(dim); } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/SpokenLanguageIdentification.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/SpokenLanguageIdentification.java index 337e3961..814d9ff4 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/SpokenLanguageIdentification.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/SpokenLanguageIdentification.java @@ -7,14 +7,11 @@ import java.util.Locale; import java.util.Map; public class SpokenLanguageIdentification { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private final Map localeMap; private long ptr = 0; public SpokenLanguageIdentification(SpokenLanguageIdentificationConfig config) { + LibraryLoader.maybeLoad(); ptr = newFromFile(config); String[] languages = Locale.getISOLanguages(); diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/Vad.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/Vad.java index b50c2566..468e8ac9 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/Vad.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/Vad.java @@ -3,13 +3,10 @@ package com.k2fsa.sherpa.onnx; public class Vad { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private long ptr = 0; public Vad(VadModelConfig config) { + LibraryLoader.maybeLoad(); ptr = newFromFile(config); } diff --git a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/WaveReader.java b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/WaveReader.java index daf2e33b..d7536ed4 100644 --- a/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/WaveReader.java +++ b/sherpa-onnx/java-api/src/com/k2fsa/sherpa/onnx/WaveReader.java @@ -3,16 +3,13 @@ package com.k2fsa.sherpa.onnx; public class WaveReader { - static { - System.loadLibrary("sherpa-onnx-jni"); - } - private final int sampleRate; private final float[] samples; // It supports only single channel, 16-bit wave file. // It will exit the program if the given file has a wrong format public WaveReader(String filename) { + LibraryLoader.maybeLoad(); Object[] arr = readWaveFromFile(filename); samples = (float[]) arr[0]; sampleRate = (int) arr[1];