Add JavaScript API (wasm) for speech enhancement GTCRN models (#2007)

This commit is contained in:
Fangjun Kuang
2025-03-15 17:41:23 +08:00
committed by GitHub
parent d320fdf65e
commit c972554ad1
11 changed files with 96 additions and 18 deletions

View File

@@ -49,6 +49,7 @@ set(exported_functions
SherpaOnnxDestroyKeywordSpotter
SherpaOnnxGetKeywordResult
SherpaOnnxIsKeywordStreamReady
SherpaOnnxResetKeywordStream
# VAD
SherpaOnnxCreateCircularBuffer
SherpaOnnxDestroyCircularBuffer
@@ -87,6 +88,12 @@ set(exported_functions
SherpaOnnxReadWaveFromBinaryData
SherpaOnnxFreeWave
SherpaOnnxWriteWave
# speech enhancement
SherpaOnnxCreateOfflineSpeechDenoiser
SherpaOnnxDestroyDenoisedAudio
SherpaOnnxDestroyOfflineSpeechDenoiser
SherpaOnnxOfflineSpeechDenoiserGetSampleRate
SherpaOnnxOfflineSpeechDenoiserRun
)
@@ -122,6 +129,7 @@ install(
${CMAKE_SOURCE_DIR}/wasm/kws/sherpa-onnx-kws.js
${CMAKE_SOURCE_DIR}/wasm/vad/sherpa-onnx-vad.js
${CMAKE_SOURCE_DIR}/wasm/speaker-diarization/sherpa-onnx-speaker-diarization.js
${CMAKE_SOURCE_DIR}/wasm/speech-enhancement/sherpa-onnx-speech-enhancement.js
${CMAKE_SOURCE_DIR}/wasm/nodejs/sherpa-onnx-wave.js
"$<TARGET_FILE_DIR:sherpa-onnx-wasm-nodejs>/sherpa-onnx-wasm-nodejs.js"
"$<TARGET_FILE_DIR:sherpa-onnx-wasm-nodejs>/sherpa-onnx-wasm-nodejs.wasm"

View File

@@ -26,21 +26,21 @@ function readWave(filename, Module) {
return {samples: samples, sampleRate: sampleRate};
}
function readWaveFromBinaryData(uint8Array) {
function readWaveFromBinaryData(uint8Array, Module) {
const numBytes = uint8Array.length * uint8Array.BYTES_PER_ELEMENT;
const pointer = this.Module._malloc(numBytes);
const pointer = Module._malloc(numBytes);
const dataOnHeap = new Uint8Array(Module.HEAPU8.buffer, pointer, numBytes);
dataOnHeap.set(uint8Array);
const w = this.Module._SherpaOnnxReadWaveFromBinaryData(
dataOnHeap.byteOffset, numBytes);
const w =
Module._SherpaOnnxReadWaveFromBinaryData(dataOnHeap.byteOffset, numBytes);
if (w == 0) {
console.log('Failed to read wave from binary data');
return null;
}
this.Module._free(pointer);
Module._free(pointer);
const samplesPtr = Module.HEAP32[w / 4] / 4;
const sampleRate = Module.HEAP32[w / 4 + 1];