Skip to content

Commit 6d5e18d

Browse files
committed
Add separate speech probability method
1 parent a066c7f commit 6d5e18d

3 files changed

Lines changed: 43 additions & 3 deletions

File tree

native/src/rnnoise.c

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,9 @@ JNIEXPORT jshortArray JNICALL Java_de_maxhenkel_rnnoise4j_Denoiser_denoise0(
143143
return pcm_output;
144144
}
145145

146-
JNIEXPORT jfloat JNICALL Java_de_maxhenkel_rnnoise4j_Denoiser_denoiseInPlace0(
146+
jfloat denoiseInPlace(
147147
JNIEnv *env,
148-
jobject obj,
148+
bool denoise,
149149
const jlong denoiser_pointer,
150150
const jshortArray input
151151
) {
@@ -200,7 +200,9 @@ JNIEXPORT jfloat JNICALL Java_de_maxhenkel_rnnoise4j_Denoiser_denoiseInPlace0(
200200
if (speech_probability > total_speech_probability) {
201201
total_speech_probability = speech_probability;
202202
}
203-
(*env)->SetShortArrayRegion(env, input, i * frame_size, frame_size, output_pcm_buffer);
203+
if (denoise) {
204+
(*env)->SetShortArrayRegion(env, input, i * frame_size, frame_size, output_pcm_buffer);
205+
}
204206
}
205207

206208
free(input_pcm_buffer);
@@ -211,6 +213,24 @@ JNIEXPORT jfloat JNICALL Java_de_maxhenkel_rnnoise4j_Denoiser_denoiseInPlace0(
211213
return total_speech_probability;
212214
}
213215

216+
JNIEXPORT jfloat JNICALL Java_de_maxhenkel_rnnoise4j_Denoiser_denoiseInPlace0(
217+
JNIEnv *env,
218+
jobject obj,
219+
const jlong denoiser_pointer,
220+
const jshortArray input
221+
) {
222+
return denoiseInPlace(env, true, denoiser_pointer, input);
223+
}
224+
225+
JNIEXPORT jfloat JNICALL Java_de_maxhenkel_rnnoise4j_Denoiser_getSpeechProbability0(
226+
JNIEnv *env,
227+
jobject obj,
228+
const jlong denoiser_pointer,
229+
const jshortArray input
230+
) {
231+
return denoiseInPlace(env, false, denoiser_pointer, input);
232+
}
233+
214234
JNIEXPORT void JNICALL Java_de_maxhenkel_rnnoise4j_Denoiser_destroyDenoiser0(
215235
JNIEnv *env,
216236
jobject obj,

src/main/java/de/maxhenkel/rnnoise4j/Denoiser.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,21 @@ public float denoiseInPlace(short[] input) {
8888
}
8989
}
9090

91+
private native float getSpeechProbability0(long denoiserPointer, short[] input);
92+
93+
/**
94+
* Does the same as {@link #denoiseInPlace(short[])} but does not modify the input.
95+
* Used for getting the probability of speech without denoising.
96+
*
97+
* @param input the input pcm samples
98+
* @return the probability of speech (0-1)
99+
*/
100+
public float getSpeechProbability(short[] input) {
101+
synchronized (this) {
102+
return getSpeechProbability0(pointer, input);
103+
}
104+
}
105+
91106
private native void destroyDenoiser0(long denoiserPointer);
92107

93108
/**

src/test/java/de/maxhenkel/rnnoise4j/DenoiserTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ void speechProbability() throws IOException, UnknownPlatformException {
4848
float probability = denoiser.denoiseInPlace(buffer);
4949
assertEquals(0F, probability);
5050
}
51+
try (Denoiser denoiser = new Denoiser()) {
52+
short[] buffer = new short[denoiser.getFrameSize()];
53+
float probability = denoiser.getSpeechProbability(buffer);
54+
assertEquals(0F, probability);
55+
}
5156
}
5257

5358
@Test

0 commit comments

Comments
 (0)