Add Java API for speech enhancement GTCRN models (#2009)
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
// Copyright 2025 Xiaomi Corporation
|
||||
|
||||
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) {
|
||||
this.samples = samples;
|
||||
this.sampleRate = sampleRate;
|
||||
}
|
||||
|
||||
public int getSampleRate() {
|
||||
return sampleRate;
|
||||
}
|
||||
|
||||
public float[] getSamples() {
|
||||
return samples;
|
||||
}
|
||||
|
||||
// return true if saved successfully.
|
||||
public boolean save(String filename) {
|
||||
return saveImpl(filename, samples, sampleRate);
|
||||
}
|
||||
|
||||
private native boolean saveImpl(String filename, float[] samples, int sampleRate);
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
// Copyright 2025 Xiaomi Corporation
|
||||
|
||||
package com.k2fsa.sherpa.onnx;
|
||||
|
||||
public class OfflineSpeechDenoiser {
|
||||
static {
|
||||
System.loadLibrary("sherpa-onnx-jni");
|
||||
}
|
||||
|
||||
private long ptr = 0;
|
||||
|
||||
public OfflineSpeechDenoiser(OfflineSpeechDenoiserConfig config) {
|
||||
ptr = newFromFile(config);
|
||||
}
|
||||
|
||||
public int getSampleRate() {
|
||||
return getSampleRate(ptr);
|
||||
}
|
||||
|
||||
public DenoisedAudio run(float[] samples, int sampleRate) {
|
||||
return run(ptr, samples, sampleRate);
|
||||
}
|
||||
|
||||
protected void finalize() throws Throwable {
|
||||
release();
|
||||
}
|
||||
|
||||
public void release() {
|
||||
if (this.ptr == 0) {
|
||||
return;
|
||||
}
|
||||
delete(this.ptr);
|
||||
this.ptr = 0;
|
||||
}
|
||||
|
||||
private native void delete(long ptr);
|
||||
|
||||
private native int getSampleRate(long ptr);
|
||||
|
||||
private native DenoisedAudio run(long ptr, float[] samples, int sampleRate);
|
||||
|
||||
private native long newFromFile(OfflineSpeechDenoiserConfig config);
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
// Copyright 2025 Xiaomi Corporation
|
||||
package com.k2fsa.sherpa.onnx;
|
||||
|
||||
public class OfflineSpeechDenoiserConfig {
|
||||
private final OfflineSpeechDenoiserModelConfig model;
|
||||
|
||||
private OfflineSpeechDenoiserConfig(OfflineSpeechDenoiserConfig.Builder builder) {
|
||||
this.model = builder.model;
|
||||
}
|
||||
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private OfflineSpeechDenoiserModelConfig model = OfflineSpeechDenoiserModelConfig.builder().build();
|
||||
|
||||
public OfflineSpeechDenoiserConfig build() {
|
||||
return new OfflineSpeechDenoiserConfig(this);
|
||||
}
|
||||
|
||||
public Builder setModel(OfflineSpeechDenoiserModelConfig model) {
|
||||
this.model = model;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
// Copyright 2025 Xiaomi Corporation
|
||||
package com.k2fsa.sherpa.onnx;
|
||||
|
||||
public class OfflineSpeechDenoiserGtcrnModelConfig {
|
||||
private final String model;
|
||||
|
||||
private OfflineSpeechDenoiserGtcrnModelConfig(Builder builder) {
|
||||
this.model = builder.model;
|
||||
}
|
||||
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
public String getModel() {
|
||||
return model;
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private String model = "";
|
||||
|
||||
public OfflineSpeechDenoiserGtcrnModelConfig build() {
|
||||
return new OfflineSpeechDenoiserGtcrnModelConfig(this);
|
||||
}
|
||||
|
||||
public Builder setModel(String model) {
|
||||
this.model = model;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
// Copyright 2025 Xiaomi Corporation
|
||||
package com.k2fsa.sherpa.onnx;
|
||||
|
||||
public class OfflineSpeechDenoiserModelConfig {
|
||||
private final OfflineSpeechDenoiserGtcrnModelConfig gtcrn;
|
||||
private final int numThreads;
|
||||
private final boolean debug;
|
||||
private final String provider;
|
||||
|
||||
private OfflineSpeechDenoiserModelConfig(Builder builder) {
|
||||
this.gtcrn = builder.gtcrn;
|
||||
this.numThreads = builder.numThreads;
|
||||
this.debug = builder.debug;
|
||||
this.provider = builder.provider;
|
||||
}
|
||||
|
||||
public static Builder builder() {
|
||||
return new Builder();
|
||||
}
|
||||
|
||||
public static class Builder {
|
||||
private OfflineSpeechDenoiserGtcrnModelConfig gtcrn = OfflineSpeechDenoiserGtcrnModelConfig.builder().build();
|
||||
private int numThreads = 1;
|
||||
private boolean debug = true;
|
||||
private String provider = "cpu";
|
||||
|
||||
public OfflineSpeechDenoiserModelConfig build() {
|
||||
return new OfflineSpeechDenoiserModelConfig(this);
|
||||
}
|
||||
|
||||
public Builder setGtcrn(OfflineSpeechDenoiserGtcrnModelConfig gtcrn) {
|
||||
this.gtcrn = gtcrn;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setNumThreads(int numThreads) {
|
||||
this.numThreads = numThreads;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setDebug(boolean debug) {
|
||||
this.debug = debug;
|
||||
return this;
|
||||
}
|
||||
|
||||
public Builder setProvider(String provider) {
|
||||
this.provider = provider;
|
||||
return this;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user