Files
sherpa-onnx/kotlin-api-examples/test_online_speech_denoiser.kt
T
Fangjun Kuang 45fb4f5f0b Add online speech denoiser for GTCRN and examples (#3324)
This PR adds online (streaming) speech denoising support for GTCRN alongside existing DPDFNet support, and updates multi-language bindings/examples to expose and validate the new capability.
2026-03-17 11:56:56 +08:00

86 lines
2.4 KiB
Kotlin

package com.k2fsa.sherpa.onnx
// Please download test files in this script from
// https://github.com/k2-fsa/sherpa-onnx/releases/tag/speech-enhancement-models
fun main() {
testGtcrn()
testDpdfNet()
}
fun testGtcrn() {
val denoiser = createOnlineSpeechDenoiserGtcrn()
val waveData = WaveReader.readWaveFromFile("./inp_16k.wav")
val output = mutableListOf<Float>()
val frameShift = denoiser.frameShiftInSamples
var start = 0
while (start < waveData.samples.size) {
val end = minOf(start + frameShift, waveData.samples.size)
val chunk = waveData.samples.copyOfRange(start, end)
val denoised = denoiser.run(chunk, waveData.sampleRate)
output.addAll(denoised.samples.asList())
start = end
}
output.addAll(denoiser.flush().samples.asList())
DenoisedAudio(output.toFloatArray(), denoiser.sampleRate).save(
filename = "./enhanced-online-gtcrn.wav"
)
println("saved to ./enhanced-online-gtcrn.wav")
denoiser.release()
}
fun testDpdfNet() {
val denoiser = createOnlineSpeechDenoiserDpdfNet()
val waveData = WaveReader.readWaveFromFile("./inp_16k.wav")
val output = mutableListOf<Float>()
val frameShift = denoiser.frameShiftInSamples
var start = 0
while (start < waveData.samples.size) {
val end = minOf(start + frameShift, waveData.samples.size)
val chunk = waveData.samples.copyOfRange(start, end)
val denoised = denoiser.run(chunk, waveData.sampleRate)
output.addAll(denoised.samples.asList())
start = end
}
output.addAll(denoiser.flush().samples.asList())
DenoisedAudio(output.toFloatArray(), denoiser.sampleRate).save(
filename = "./enhanced-online-dpdfnet.wav"
)
println("saved to ./enhanced-online-dpdfnet.wav")
denoiser.release()
}
fun createOnlineSpeechDenoiserGtcrn(): OnlineSpeechDenoiser {
val config = OnlineSpeechDenoiserConfig(
model = OfflineSpeechDenoiserModelConfig(
gtcrn = OfflineSpeechDenoiserGtcrnModelConfig(
model = "./gtcrn_simple.onnx"
),
provider = "cpu",
numThreads = 1,
),
)
return OnlineSpeechDenoiser(config = config)
}
fun createOnlineSpeechDenoiserDpdfNet(): OnlineSpeechDenoiser {
val config = OnlineSpeechDenoiserConfig(
model = OfflineSpeechDenoiserModelConfig(
dpdfnet = OfflineSpeechDenoiserDpdfNetModelConfig(
model = "./dpdfnet_baseline.onnx"
),
provider = "cpu",
numThreads = 1,
),
)
return OnlineSpeechDenoiser(config = config)
}