@sapphi-red/gtcrn-wasm
v0.0.3
Published
WebAssembly (SIMD) build of GTCRN speech enhancement, PCM in/out
Downloads
483
Maintainers
Readme
@sapphi-red/gtcrn-wasm
WebAssembly (SIMD) build of GTCRN streaming speech enhancement, with a PCM-in/PCM-out TypeScript wrapper.
- 16 kHz mono by default: 256-sample frames (16 ms)
- Optional 48 kHz mono support: 768-sample frames, resampled to the 16 kHz model rate in wasm
- The neural network runs entirely in wasm, compiled from the official ONNX model via onnx2c, with STFT/iSTFT (pffft) inside the wasm too
- Runs in browsers and workers (including AudioWorklet)
Usage
import { GtcrnProcessor, loadGtcrnModule } from '@sapphi-red/gtcrn-wasm'
const module = await loadGtcrnModule({
wasmBinary: await fetch(new URL('@sapphi-red/gtcrn-wasm/gtcrn.wasm', import.meta.url)).then((r) =>
r.arrayBuffer(),
),
})
const processor = new GtcrnProcessor(module)
// for each 256-sample Float32Array frame @ 16 kHz:
const denoised = processor.process(frame) // Float32Array(256)
// when done:
processor.destroy()In browsers and workers, the loader resolves gtcrn.wasm relative to the JavaScript module, so wasmBinary can be omitted when both files are served together. Pass wasmBinary explicitly when a bundler relocates the asset or when loading from Node.
For 48 kHz audio, opt into the host-rate resampler. Pass 768 samples per call; the model still runs at 16 kHz internally and the result is upsampled back to 768 samples.
const processor = new GtcrnProcessor(module, { sampleRate: 48000 })
const denoised = processor.process(frame768) // Float32Array(768)See internal-docs/building.md for the build pipeline and source-build instructions.
License
MIT. Bundled model weights derive from GTCRN (MIT); the FFT is pffft (FFTPACK/UCAR license). The corresponding notices are included as license comments in the package build.
