Add node-addon-api for VAD (#864)

This commit is contained in:
Fangjun Kuang
2024-05-11 20:58:23 +08:00
committed by GitHub
parent 677bc1da3e
commit eee5d8a15c
15 changed files with 914 additions and 10 deletions

View File

@@ -1,8 +1,12 @@
const addon = require('./addon.js')
const streaming_asr = require('./streaming-asr.js');
const vad = require('./vad.js');
module.exports = {
OnlineRecognizer: streaming_asr.OnlineRecognizer,
readWave: addon.readWave,
writeWave: addon.writeWave,
Display: streaming_asr.Display,
Vad: vad.Vad,
CircularBuffer: vad.CircularBuffer,
}

View File

@@ -15,10 +15,11 @@ class OnlineStream {
this.handle = handle;
}
// obj is {samples: samples, sampleRate: sampleRate}
// samples is a float32 array containing samples in the range [-1, 1]
acceptWaveform(samples, sampleRate) {
addon.acceptWaveformOnline(
this.handle, {samples: samples, sampleRate: sampleRate})
// sampleRate is a number
acceptWaveform(obj) {
addon.acceptWaveformOnline(this.handle, obj)
}
inputFinished() {

View File

@@ -0,0 +1,88 @@
const addon = require('./addon.js');
class CircularBuffer {
constructor(capacity) {
this.handle = addon.createCircularBuffer(capacity);
}
// samples is a float32 array
push(samples) {
addon.circularBufferPush(this.handle, samples);
}
// return a float32 array
get(startIndex, n) {
return addon.circularBufferGet(this.handle, startIndex, n);
}
pop(n) {
return addon.circularBufferPop(this.handle, n);
}
size() {
return addon.circularBufferSize(this.handle);
}
head() {
return addon.circularBufferHead(this.handle);
}
reset() {
return addon.circularBufferReset(this.handle);
}
}
class Vad {
/*
config = {
sileroVad: {
model: "./silero_vad.onnx",
threshold: 0.5,
}
}
*/
constructor(config, bufferSizeInSeconds) {
this.handle =
addon.createVoiceActivityDetector(config, bufferSizeInSeconds);
this.config = config;
}
acceptWaveform(samples) {
addon.voiceActivityDetectorAcceptWaveform(this.handle, samples)
}
isEmpty() {
return addon.voiceActivityDetectorIsEmpty(this.handle)
}
isDetected() {
return addon.voiceActivityDetectorIsDetected(this.handle)
}
pop() {
addon.voiceActivityDetectorPop(this.handle)
}
clear() {
addon.VoiceActivityDetectorClearWrapper(this.handle)
}
/*
{
samples: a 1-d float32 array,
start: a int32
}
*/
front() {
return addon.voiceActivityDetectorFront(this.handle)
}
reset() {
return addon.VoiceActivityDetectorResetWrapper(this.handle)
}
}
module.exports = {
Vad,
CircularBuffer,
}