Add WebAssembly (WASM) for speech enhancement GTCRN models (#2002)
This commit is contained in:
@@ -84,6 +84,7 @@ set(exported_functions
|
||||
#
|
||||
SherpaOnnxFileExists
|
||||
SherpaOnnxReadWave
|
||||
SherpaOnnxReadWaveFromBinaryData
|
||||
SherpaOnnxFreeWave
|
||||
SherpaOnnxWriteWave
|
||||
)
|
||||
|
||||
@@ -12,6 +12,36 @@ function readWave(filename, Module) {
|
||||
Module._free(pFilename);
|
||||
|
||||
|
||||
const samplesPtr = Module.HEAP32[w / 4] / 4;
|
||||
const sampleRate = Module.HEAP32[w / 4 + 1];
|
||||
const numSamples = Module.HEAP32[w / 4 + 2];
|
||||
|
||||
const samples = new Float32Array(numSamples);
|
||||
for (let i = 0; i < numSamples; i++) {
|
||||
samples[i] = Module.HEAPF32[samplesPtr + i];
|
||||
}
|
||||
|
||||
Module._SherpaOnnxFreeWave(w);
|
||||
|
||||
return {samples: samples, sampleRate: sampleRate};
|
||||
}
|
||||
|
||||
function readWaveFromBinaryData(uint8Array) {
|
||||
const numBytes = uint8Array.length * uint8Array.BYTES_PER_ELEMENT;
|
||||
const pointer = this.Module._malloc(numBytes);
|
||||
|
||||
const dataOnHeap = new Uint8Array(Module.HEAPU8.buffer, pointer, numBytes);
|
||||
dataOnHeap.set(uint8Array);
|
||||
|
||||
const w = this.Module._SherpaOnnxReadWaveFromBinaryData(
|
||||
dataOnHeap.byteOffset, numBytes);
|
||||
if (w == 0) {
|
||||
console.log('Failed to read wave from binary data');
|
||||
return null;
|
||||
}
|
||||
|
||||
this.Module._free(pointer);
|
||||
|
||||
const samplesPtr = Module.HEAP32[w / 4] / 4;
|
||||
const sampleRate = Module.HEAP32[w / 4 + 1];
|
||||
const numSamples = Module.HEAP32[w / 4 + 2];
|
||||
@@ -53,5 +83,6 @@ if (typeof process == 'object' && typeof process.versions == 'object' &&
|
||||
module.exports = {
|
||||
readWave,
|
||||
writeWave,
|
||||
readWaveFromBinaryData,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user