osense-vad 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +403 -0
- package/dist/common/asset-path.d.ts +2 -0
- package/dist/common/asset-path.d.ts.map +1 -0
- package/dist/common/asset-path.js +17 -0
- package/dist/common/asset-path.js.map +1 -0
- package/dist/common/default-model-fetcher.d.ts +2 -0
- package/dist/common/default-model-fetcher.d.ts.map +1 -0
- package/dist/common/default-model-fetcher.js +8 -0
- package/dist/common/default-model-fetcher.js.map +1 -0
- package/dist/common/frame-processor.d.ts +86 -0
- package/dist/common/frame-processor.d.ts.map +1 -0
- package/dist/common/frame-processor.js +180 -0
- package/dist/common/frame-processor.js.map +1 -0
- package/dist/common/index.d.ts +13 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +53 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/logging.d.ts +8 -0
- package/dist/common/logging.d.ts.map +1 -0
- package/dist/common/logging.js +16 -0
- package/dist/common/logging.js.map +1 -0
- package/dist/common/messages.d.ts +10 -0
- package/dist/common/messages.d.ts.map +1 -0
- package/dist/common/messages.js +14 -0
- package/dist/common/messages.js.map +1 -0
- package/dist/common/models/common.d.ts +14 -0
- package/dist/common/models/common.d.ts.map +1 -0
- package/dist/common/models/common.js +3 -0
- package/dist/common/models/common.js.map +1 -0
- package/dist/common/models/index.d.ts +9 -0
- package/dist/common/models/index.d.ts.map +1 -0
- package/dist/common/models/index.js +11 -0
- package/dist/common/models/index.js.map +1 -0
- package/dist/common/models/legacy.d.ts +14 -0
- package/dist/common/models/legacy.d.ts.map +1 -0
- package/dist/common/models/legacy.js +52 -0
- package/dist/common/models/legacy.js.map +1 -0
- package/dist/common/models/v5.d.ts +13 -0
- package/dist/common/models/v5.d.ts.map +1 -0
- package/dist/common/models/v5.js +45 -0
- package/dist/common/models/v5.js.map +1 -0
- package/dist/common/models/v6.d.ts +22 -0
- package/dist/common/models/v6.d.ts.map +1 -0
- package/dist/common/models/v6.js +54 -0
- package/dist/common/models/v6.js.map +1 -0
- package/dist/common/non-real-time-vad.d.ts +23 -0
- package/dist/common/non-real-time-vad.d.ts.map +1 -0
- package/dist/common/non-real-time-vad.js +127 -0
- package/dist/common/non-real-time-vad.js.map +1 -0
- package/dist/common/resampler.d.ts +16 -0
- package/dist/common/resampler.d.ts.map +1 -0
- package/dist/common/resampler.js +63 -0
- package/dist/common/resampler.js.map +1 -0
- package/dist/common/utils.d.ts +8 -0
- package/dist/common/utils.d.ts.map +1 -0
- package/dist/common/utils.js +118 -0
- package/dist/common/utils.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +74 -0
- package/dist/index.js.map +1 -0
- package/dist/real-time-vad.d.ts +63 -0
- package/dist/real-time-vad.d.ts.map +1 -0
- package/dist/real-time-vad.js +171 -0
- package/dist/real-time-vad.js.map +1 -0
- package/dist/silero_vad_legacy.onnx +0 -0
- package/dist/silero_vad_v5.onnx +0 -0
- package/package.json +66 -0
- package/silero_vad_legacy.onnx +0 -0
- package/silero_vad_v5.onnx +0 -0
- package/silero_vad_v6.onnx +0 -0
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
Some of this code, together with the default options found in index.ts,
|
|
4
|
+
were taken (or took inspiration) from https://github.com/snakers4/silero-vad
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.FrameProcessor = exports.defaultV6FrameProcessorOptions = exports.defaultV5FrameProcessorOptions = exports.defaultLegacyFrameProcessorOptions = void 0;
|
|
8
|
+
exports.validateOptions = validateOptions;
|
|
9
|
+
const logging_1 = require("./logging");
|
|
10
|
+
const messages_1 = require("./messages");
|
|
11
|
+
const RECOMMENDED_FRAME_SAMPLES = [512, 1024, 1536];
|
|
12
|
+
exports.defaultLegacyFrameProcessorOptions = {
|
|
13
|
+
positiveSpeechThreshold: 0.5,
|
|
14
|
+
negativeSpeechThreshold: 0.5 - 0.15,
|
|
15
|
+
preSpeechPadFrames: 1,
|
|
16
|
+
redemptionFrames: 8,
|
|
17
|
+
frameSamples: 1536,
|
|
18
|
+
minSpeechFrames: 3,
|
|
19
|
+
submitUserSpeechOnPause: false,
|
|
20
|
+
};
|
|
21
|
+
exports.defaultV5FrameProcessorOptions = {
|
|
22
|
+
positiveSpeechThreshold: 0.5,
|
|
23
|
+
negativeSpeechThreshold: 0.5 - 0.15,
|
|
24
|
+
preSpeechPadFrames: 3,
|
|
25
|
+
redemptionFrames: 24,
|
|
26
|
+
frameSamples: 512,
|
|
27
|
+
minSpeechFrames: 9,
|
|
28
|
+
submitUserSpeechOnPause: false,
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Default options for Silero VAD v6.2
|
|
32
|
+
* Optimized for telephony and lower quality audio
|
|
33
|
+
*/
|
|
34
|
+
exports.defaultV6FrameProcessorOptions = {
|
|
35
|
+
positiveSpeechThreshold: 0.5,
|
|
36
|
+
negativeSpeechThreshold: 0.5 - 0.15,
|
|
37
|
+
preSpeechPadFrames: 3,
|
|
38
|
+
redemptionFrames: 24,
|
|
39
|
+
frameSamples: 512,
|
|
40
|
+
minSpeechFrames: 9,
|
|
41
|
+
submitUserSpeechOnPause: false,
|
|
42
|
+
};
|
|
43
|
+
function validateOptions(options) {
|
|
44
|
+
if (!RECOMMENDED_FRAME_SAMPLES.includes(options.frameSamples)) {
|
|
45
|
+
logging_1.log.warn("You are using an unusual frame size");
|
|
46
|
+
}
|
|
47
|
+
if (options.positiveSpeechThreshold < 0 ||
|
|
48
|
+
options.positiveSpeechThreshold > 1) {
|
|
49
|
+
logging_1.log.error("positiveSpeechThreshold should be a number between 0 and 1");
|
|
50
|
+
}
|
|
51
|
+
if (options.negativeSpeechThreshold < 0 ||
|
|
52
|
+
options.negativeSpeechThreshold > options.positiveSpeechThreshold) {
|
|
53
|
+
logging_1.log.error("negativeSpeechThreshold should be between 0 and positiveSpeechThreshold");
|
|
54
|
+
}
|
|
55
|
+
if (options.preSpeechPadFrames < 0) {
|
|
56
|
+
logging_1.log.error("preSpeechPadFrames should be positive");
|
|
57
|
+
}
|
|
58
|
+
if (options.redemptionFrames < 0) {
|
|
59
|
+
logging_1.log.error("redemptionFrames should be positive");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
const concatArrays = (arrays) => {
|
|
63
|
+
const sizes = arrays.reduce((out, next) => {
|
|
64
|
+
out.push(out.at(-1) + next.length);
|
|
65
|
+
return out;
|
|
66
|
+
}, [0]);
|
|
67
|
+
const outArray = new Float32Array(sizes.at(-1));
|
|
68
|
+
arrays.forEach((arr, index) => {
|
|
69
|
+
const place = sizes[index];
|
|
70
|
+
outArray.set(arr, place);
|
|
71
|
+
});
|
|
72
|
+
return outArray;
|
|
73
|
+
};
|
|
74
|
+
class FrameProcessor {
|
|
75
|
+
constructor(modelProcessFunc, modelResetFunc, options) {
|
|
76
|
+
this.modelProcessFunc = modelProcessFunc;
|
|
77
|
+
this.modelResetFunc = modelResetFunc;
|
|
78
|
+
this.options = options;
|
|
79
|
+
this.speaking = false;
|
|
80
|
+
this.redemptionCounter = 0;
|
|
81
|
+
this.speechFrameCount = 0;
|
|
82
|
+
this.active = false;
|
|
83
|
+
this.speechRealStartFired = false;
|
|
84
|
+
this.reset = () => {
|
|
85
|
+
this.speaking = false;
|
|
86
|
+
this.speechRealStartFired = false;
|
|
87
|
+
this.audioBuffer = [];
|
|
88
|
+
this.modelResetFunc();
|
|
89
|
+
this.redemptionCounter = 0;
|
|
90
|
+
this.speechFrameCount = 0;
|
|
91
|
+
};
|
|
92
|
+
this.pause = (handleEvent) => {
|
|
93
|
+
this.active = false;
|
|
94
|
+
if (this.options.submitUserSpeechOnPause) {
|
|
95
|
+
this.endSegment(handleEvent);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
this.reset();
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
this.resume = () => {
|
|
102
|
+
this.active = true;
|
|
103
|
+
};
|
|
104
|
+
this.endSegment = (handleEvent) => {
|
|
105
|
+
const audioBuffer = this.audioBuffer;
|
|
106
|
+
this.audioBuffer = [];
|
|
107
|
+
const speaking = this.speaking;
|
|
108
|
+
this.reset();
|
|
109
|
+
if (speaking) {
|
|
110
|
+
const speechFrameCount = audioBuffer.reduce((acc, item) => {
|
|
111
|
+
return item.isSpeech ? acc + 1 : acc;
|
|
112
|
+
}, 0);
|
|
113
|
+
if (speechFrameCount >= this.options.minSpeechFrames) {
|
|
114
|
+
const audio = concatArrays(audioBuffer.map((item) => item.frame));
|
|
115
|
+
handleEvent({ msg: messages_1.Message.SpeechEnd, audio });
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
handleEvent({ msg: messages_1.Message.VADMisfire });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return {};
|
|
122
|
+
};
|
|
123
|
+
this.process = async (frame, handleEvent) => {
|
|
124
|
+
if (!this.active) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const probs = await this.modelProcessFunc(frame);
|
|
128
|
+
const isSpeech = probs.isSpeech >= this.options.positiveSpeechThreshold;
|
|
129
|
+
handleEvent({ probs, msg: messages_1.Message.FrameProcessed, frame });
|
|
130
|
+
this.audioBuffer.push({
|
|
131
|
+
frame,
|
|
132
|
+
isSpeech,
|
|
133
|
+
});
|
|
134
|
+
if (isSpeech) {
|
|
135
|
+
this.speechFrameCount++;
|
|
136
|
+
this.redemptionCounter = 0;
|
|
137
|
+
}
|
|
138
|
+
if (isSpeech && !this.speaking) {
|
|
139
|
+
this.speaking = true;
|
|
140
|
+
handleEvent({ msg: messages_1.Message.SpeechStart });
|
|
141
|
+
}
|
|
142
|
+
if (this.speaking &&
|
|
143
|
+
this.speechFrameCount === this.options.minSpeechFrames &&
|
|
144
|
+
!this.speechRealStartFired) {
|
|
145
|
+
this.speechRealStartFired = true;
|
|
146
|
+
handleEvent({ msg: messages_1.Message.SpeechRealStart });
|
|
147
|
+
}
|
|
148
|
+
if (probs.isSpeech < this.options.negativeSpeechThreshold &&
|
|
149
|
+
this.speaking &&
|
|
150
|
+
++this.redemptionCounter >= this.options.redemptionFrames) {
|
|
151
|
+
this.redemptionCounter = 0;
|
|
152
|
+
this.speechFrameCount = 0;
|
|
153
|
+
this.speaking = false;
|
|
154
|
+
this.speechRealStartFired = false;
|
|
155
|
+
const audioBuffer = this.audioBuffer;
|
|
156
|
+
this.audioBuffer = [];
|
|
157
|
+
const speechFrameCount = audioBuffer.reduce((acc, item) => {
|
|
158
|
+
return item.isSpeech ? acc + 1 : acc;
|
|
159
|
+
}, 0);
|
|
160
|
+
if (speechFrameCount >= this.options.minSpeechFrames) {
|
|
161
|
+
const audio = concatArrays(audioBuffer.map((item) => item.frame));
|
|
162
|
+
handleEvent({ msg: messages_1.Message.SpeechEnd, audio });
|
|
163
|
+
}
|
|
164
|
+
else {
|
|
165
|
+
handleEvent({ msg: messages_1.Message.VADMisfire });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
if (!this.speaking) {
|
|
169
|
+
while (this.audioBuffer.length > this.options.preSpeechPadFrames) {
|
|
170
|
+
this.audioBuffer.shift();
|
|
171
|
+
}
|
|
172
|
+
this.speechFrameCount = 0;
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
this.audioBuffer = [];
|
|
176
|
+
this.reset();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
exports.FrameProcessor = FrameProcessor;
|
|
180
|
+
//# sourceMappingURL=frame-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame-processor.js","sourceRoot":"","sources":["../../src/common/frame-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as _utils from "./utils";
|
|
2
|
+
export declare const utils: {
|
|
3
|
+
minFramesForTargetMS: typeof _utils.minFramesForTargetMS;
|
|
4
|
+
arrayBufferToBase64: typeof _utils.arrayBufferToBase64;
|
|
5
|
+
encodeWAV: typeof _utils.encodeWAV;
|
|
6
|
+
};
|
|
7
|
+
export * from "./frame-processor";
|
|
8
|
+
export * from "./logging";
|
|
9
|
+
export * from "./messages";
|
|
10
|
+
export * from "./resampler";
|
|
11
|
+
export type { OrtOptions, OrtConfigurer, OrtModule, ModelFetcher, SpeechProbabilities, Model, ModelFactory } from "./models";
|
|
12
|
+
export { SileroLegacy, SileroV5 } from "./models";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAClC,eAAO,MAAM,KAAK;;;;CAIjB,CAAC;AAEF,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAG5B,YAAY,EACV,UAAU,EACV,aAAa,EACb,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,KAAK,EACL,YAAY,EACb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
36
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.SileroV5 = exports.SileroLegacy = exports.utils = void 0;
|
|
40
|
+
const _utils = __importStar(require("./utils"));
|
|
41
|
+
exports.utils = {
|
|
42
|
+
minFramesForTargetMS: _utils.minFramesForTargetMS,
|
|
43
|
+
arrayBufferToBase64: _utils.arrayBufferToBase64,
|
|
44
|
+
encodeWAV: _utils.encodeWAV,
|
|
45
|
+
};
|
|
46
|
+
__exportStar(require("./frame-processor"), exports);
|
|
47
|
+
__exportStar(require("./logging"), exports);
|
|
48
|
+
__exportStar(require("./messages"), exports);
|
|
49
|
+
__exportStar(require("./resampler"), exports);
|
|
50
|
+
var models_1 = require("./models");
|
|
51
|
+
Object.defineProperty(exports, "SileroLegacy", { enumerable: true, get: function () { return models_1.SileroLegacy; } });
|
|
52
|
+
Object.defineProperty(exports, "SileroV5", { enumerable: true, get: function () { return models_1.SileroV5; } });
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AACrB,QAAA,KAAK,GAAG;IACnB,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;IACjD,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;IAC/C,SAAS,EAAE,MAAM,CAAC,SAAS;CAC5B,CAAC;AAEF,oDAAkC;AAClC,4CAA0B;AAC1B,6CAA2B;AAC3B,8CAA4B;AAY5B,mCAAkD;AAAzC,sGAAA,YAAY,OAAA;AAAE,kGAAA,QAAQ,OAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const LOG_PREFIX = "[VAD]";
|
|
2
|
+
declare const levels: readonly ["error", "debug", "warn"];
|
|
3
|
+
type Level = (typeof levels)[number];
|
|
4
|
+
type LogFn = (...args: any) => void;
|
|
5
|
+
type Logger = Record<Level, LogFn>;
|
|
6
|
+
export declare const log: Logger;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=logging.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/common/logging.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,UAAU,CAAC;AAElC,QAAA,MAAM,MAAM,qCAAsC,CAAC;AACnD,KAAK,KAAK,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AACrC,KAAK,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;AACpC,KAAK,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAanC,eAAO,MAAM,GAAG,EAAW,MAAM,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.log = exports.LOG_PREFIX = void 0;
|
|
4
|
+
exports.LOG_PREFIX = "[VAD]";
|
|
5
|
+
const levels = ["error", "debug", "warn"];
|
|
6
|
+
function getLog(level) {
|
|
7
|
+
return (...args) => {
|
|
8
|
+
console[level](exports.LOG_PREFIX, ...args);
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
const _log = levels.reduce((acc, level) => {
|
|
12
|
+
acc[level] = getLog(level);
|
|
13
|
+
return acc;
|
|
14
|
+
}, {});
|
|
15
|
+
exports.log = _log;
|
|
16
|
+
//# sourceMappingURL=logging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/common/logging.ts"],"names":[],"mappings":";;;AAAa,QAAA,UAAU,GAAG,OAAO,CAAC;AAElC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAU,CAAC;AAKnD,SAAS,MAAM,CAAC,KAAY;IAC1B,OAAO,CAAC,GAAG,IAAS,EAAE,EAAE;QACtB,OAAO,CAAC,KAAK,CAAC,CAAC,kBAAU,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAkB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;IACzD,GAAG,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC,EAAE,EAAE,CAAC,CAAC;AAEM,QAAA,GAAG,GAAG,IAAc,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare enum Message {
|
|
2
|
+
AudioFrame = "AUDIO_FRAME",
|
|
3
|
+
SpeechStart = "SPEECH_START",
|
|
4
|
+
VADMisfire = "VAD_MISFIRE",
|
|
5
|
+
SpeechEnd = "SPEECH_END",
|
|
6
|
+
SpeechStop = "SPEECH_STOP",
|
|
7
|
+
SpeechRealStart = "SPEECH_REAL_START",
|
|
8
|
+
FrameProcessed = "FRAME_PROCESSED"
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/common/messages.ts"],"names":[],"mappings":"AAAA,oBAAY,OAAO;IACjB,UAAU,gBAAgB;IAC1B,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;IAC1B,SAAS,eAAe;IACxB,UAAU,gBAAgB;IAC1B,eAAe,sBAAsB;IACrC,cAAc,oBAAoB;CACnC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Message = void 0;
|
|
4
|
+
var Message;
|
|
5
|
+
(function (Message) {
|
|
6
|
+
Message["AudioFrame"] = "AUDIO_FRAME";
|
|
7
|
+
Message["SpeechStart"] = "SPEECH_START";
|
|
8
|
+
Message["VADMisfire"] = "VAD_MISFIRE";
|
|
9
|
+
Message["SpeechEnd"] = "SPEECH_END";
|
|
10
|
+
Message["SpeechStop"] = "SPEECH_STOP";
|
|
11
|
+
Message["SpeechRealStart"] = "SPEECH_REAL_START";
|
|
12
|
+
Message["FrameProcessed"] = "FRAME_PROCESSED";
|
|
13
|
+
})(Message || (exports.Message = Message = {}));
|
|
14
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/common/messages.ts"],"names":[],"mappings":";;;AAAA,IAAY,OAQX;AARD,WAAY,OAAO;IACjB,qCAA0B,CAAA;IAC1B,uCAA4B,CAAA;IAC5B,qCAA0B,CAAA;IAC1B,mCAAwB,CAAA;IACxB,qCAA0B,CAAA;IAC1B,gDAAqC,CAAA;IACrC,6CAAkC,CAAA;AACpC,CAAC,EARW,OAAO,uBAAP,OAAO,QAQlB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type * as ort from "onnxruntime-node";
|
|
2
|
+
export type ModelFetcher = () => Promise<ArrayBuffer>;
|
|
3
|
+
export interface SpeechProbabilities {
|
|
4
|
+
notSpeech: number;
|
|
5
|
+
isSpeech: number;
|
|
6
|
+
}
|
|
7
|
+
export type OrtConfigurer = (ortInstance: typeof ort) => any;
|
|
8
|
+
export type OrtModule = typeof ort;
|
|
9
|
+
export type ModelFactory = (ortInstance: typeof ort, modelFetcher: ModelFetcher) => Promise<Model>;
|
|
10
|
+
export interface Model {
|
|
11
|
+
reset_state: () => void;
|
|
12
|
+
process: (arr: Float32Array) => Promise<SpeechProbabilities>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/common/models/common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;AAEtD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,OAAO,GAAG,KAAK,GAAG,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,CAAC;AAEnC,MAAM,MAAM,YAAY,GAAG,CACzB,WAAW,EAAE,OAAO,GAAG,EACvB,YAAY,EAAE,YAAY,KACvB,OAAO,CAAC,KAAK,CAAC,CAAC;AAEpB,MAAM,WAAW,KAAK;IACpB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAC9D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../../src/common/models/common.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { OrtConfigurer } from "./common";
|
|
2
|
+
export type { ModelFetcher, SpeechProbabilities, OrtConfigurer, OrtModule, ModelFactory, Model } from "./common";
|
|
3
|
+
export { SileroLegacy } from "./legacy";
|
|
4
|
+
export { SileroV5 } from "./v5";
|
|
5
|
+
export { SileroV6 } from "./v6";
|
|
6
|
+
export interface OrtOptions {
|
|
7
|
+
ortConfig?: OrtConfigurer;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/models/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG9C,YAAY,EACV,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,SAAS,EACT,YAAY,EACZ,KAAK,EACN,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGhC,MAAM,WAAW,UAAU;IACzB,SAAS,CAAC,EAAE,aAAa,CAAC;CAC3B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SileroV6 = exports.SileroV5 = exports.SileroLegacy = void 0;
|
|
4
|
+
// Export model classes
|
|
5
|
+
var legacy_1 = require("./legacy");
|
|
6
|
+
Object.defineProperty(exports, "SileroLegacy", { enumerable: true, get: function () { return legacy_1.SileroLegacy; } });
|
|
7
|
+
var v5_1 = require("./v5");
|
|
8
|
+
Object.defineProperty(exports, "SileroV5", { enumerable: true, get: function () { return v5_1.SileroV5; } });
|
|
9
|
+
var v6_1 = require("./v6");
|
|
10
|
+
Object.defineProperty(exports, "SileroV6", { enumerable: true, get: function () { return v6_1.SileroV6; } });
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/models/index.ts"],"names":[],"mappings":";;;AAaA,uBAAuB;AACvB,mCAAwC;AAA/B,sGAAA,YAAY,OAAA;AACrB,2BAAgC;AAAvB,8FAAA,QAAQ,OAAA;AACjB,2BAAgC;AAAvB,8FAAA,QAAQ,OAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type * as ort from "onnxruntime-node";
|
|
2
|
+
import type { ModelFactory, SpeechProbabilities } from "./common";
|
|
3
|
+
export declare class SileroLegacy {
|
|
4
|
+
private ortInstance;
|
|
5
|
+
private _session;
|
|
6
|
+
private _h;
|
|
7
|
+
private _c;
|
|
8
|
+
private _sr;
|
|
9
|
+
constructor(ortInstance: typeof ort, _session: ort.InferenceSession, _h: ort.Tensor, _c: ort.Tensor, _sr: ort.Tensor);
|
|
10
|
+
static new: ModelFactory;
|
|
11
|
+
reset_state: () => void;
|
|
12
|
+
process: (audioFrame: Float32Array) => Promise<SpeechProbabilities>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=legacy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.d.ts","sourceRoot":"","sources":["../../../src/common/models/legacy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAE7C,OAAO,KAAK,EAAE,YAAY,EAAgB,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEhF,qBAAa,YAAY;IAErB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;gBAJH,WAAW,EAAE,OAAO,GAAG,EACvB,QAAQ,EAAE,GAAG,CAAC,gBAAgB,EAC9B,EAAE,EAAE,GAAG,CAAC,MAAM,EACd,EAAE,EAAE,GAAG,CAAC,MAAM,EACd,GAAG,EAAE,GAAG,CAAC,MAAM;IAGzB,MAAM,CAAC,GAAG,EAAE,YAAY,CAgBtB;IAEF,WAAW,aAIT;IAEF,OAAO,GAAU,YAAY,YAAY,KAAG,OAAO,CAAC,mBAAmB,CAAC,CAiBtE;CACH"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.SileroLegacy = void 0;
|
|
5
|
+
const logging_1 = require("../logging");
|
|
6
|
+
class SileroLegacy {
|
|
7
|
+
constructor(ortInstance, _session, _h, _c, _sr) {
|
|
8
|
+
this.ortInstance = ortInstance;
|
|
9
|
+
this._session = _session;
|
|
10
|
+
this._h = _h;
|
|
11
|
+
this._c = _c;
|
|
12
|
+
this._sr = _sr;
|
|
13
|
+
this.reset_state = () => {
|
|
14
|
+
const zeroes = Array(2 * 64).fill(0);
|
|
15
|
+
this._h = new this.ortInstance.Tensor("float32", zeroes, [2, 1, 64]);
|
|
16
|
+
this._c = new this.ortInstance.Tensor("float32", zeroes, [2, 1, 64]);
|
|
17
|
+
};
|
|
18
|
+
this.process = async (audioFrame) => {
|
|
19
|
+
const t = new this.ortInstance.Tensor("float32", audioFrame, [
|
|
20
|
+
1,
|
|
21
|
+
audioFrame.length,
|
|
22
|
+
]);
|
|
23
|
+
const inputs = {
|
|
24
|
+
input: t,
|
|
25
|
+
h: this._h,
|
|
26
|
+
c: this._c,
|
|
27
|
+
sr: this._sr,
|
|
28
|
+
};
|
|
29
|
+
const out = await this._session.run(inputs);
|
|
30
|
+
this._h = out["hn"];
|
|
31
|
+
this._c = out["cn"];
|
|
32
|
+
const [isSpeech] = out["output"]?.data;
|
|
33
|
+
const notSpeech = 1 - isSpeech;
|
|
34
|
+
return { notSpeech, isSpeech };
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.SileroLegacy = SileroLegacy;
|
|
39
|
+
_a = SileroLegacy;
|
|
40
|
+
SileroLegacy.new = async (ortInstance, modelFetcher) => {
|
|
41
|
+
logging_1.log.debug("initializing vad");
|
|
42
|
+
const modelArrayBuffer = await modelFetcher();
|
|
43
|
+
const _session = await ortInstance.InferenceSession.create(modelArrayBuffer);
|
|
44
|
+
const _sr = new ortInstance.Tensor("int64", [16000n]);
|
|
45
|
+
const zeroes = Array(2 * 64).fill(0);
|
|
46
|
+
const _h = new ortInstance.Tensor("float32", zeroes, [2, 1, 64]);
|
|
47
|
+
const _c = new ortInstance.Tensor("float32", zeroes, [2, 1, 64]);
|
|
48
|
+
logging_1.log.debug("vad is initialized");
|
|
49
|
+
const model = new _a(ortInstance, _session, _h, _c, _sr);
|
|
50
|
+
return model;
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=legacy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy.js","sourceRoot":"","sources":["../../../src/common/models/legacy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type * as ort from "onnxruntime-node";
|
|
2
|
+
import type { ModelFactory, SpeechProbabilities } from "./common";
|
|
3
|
+
export declare class SileroV5 {
|
|
4
|
+
private _session;
|
|
5
|
+
private _state;
|
|
6
|
+
private _sr;
|
|
7
|
+
private ortInstance;
|
|
8
|
+
constructor(_session: ort.InferenceSession, _state: ort.Tensor, _sr: ort.Tensor, ortInstance: typeof ort);
|
|
9
|
+
static new: ModelFactory;
|
|
10
|
+
reset_state: () => void;
|
|
11
|
+
process: (audioFrame: Float32Array) => Promise<SpeechProbabilities>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=v5.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v5.d.ts","sourceRoot":"","sources":["../../../src/common/models/v5.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAgB,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAOhF,qBAAa,QAAQ;IAEjB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,WAAW;gBAHX,QAAQ,EAAE,GAAG,CAAC,gBAAgB,EAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,GAAG,EAAE,GAAG,CAAC,MAAM,EACf,WAAW,EAAE,OAAO,GAAG;IAGjC,MAAM,CAAC,GAAG,EAAE,YAAY,CAWtB;IAEF,WAAW,aAET;IAEF,OAAO,GAAU,YAAY,YAAY,KAAG,OAAO,CAAC,mBAAmB,CAAC,CAiBtE;CACH"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.SileroV5 = void 0;
|
|
5
|
+
function getNewState(ortInstance) {
|
|
6
|
+
const zeroes = Array(2 * 128).fill(0);
|
|
7
|
+
return new ortInstance.Tensor("float32", zeroes, [2, 1, 128]);
|
|
8
|
+
}
|
|
9
|
+
class SileroV5 {
|
|
10
|
+
constructor(_session, _state, _sr, ortInstance) {
|
|
11
|
+
this._session = _session;
|
|
12
|
+
this._state = _state;
|
|
13
|
+
this._sr = _sr;
|
|
14
|
+
this.ortInstance = ortInstance;
|
|
15
|
+
this.reset_state = () => {
|
|
16
|
+
this._state = getNewState(this.ortInstance);
|
|
17
|
+
};
|
|
18
|
+
this.process = async (audioFrame) => {
|
|
19
|
+
const t = new this.ortInstance.Tensor("float32", audioFrame, [
|
|
20
|
+
1,
|
|
21
|
+
audioFrame.length,
|
|
22
|
+
]);
|
|
23
|
+
const inputs = {
|
|
24
|
+
input: t,
|
|
25
|
+
state: this._state,
|
|
26
|
+
sr: this._sr,
|
|
27
|
+
};
|
|
28
|
+
const out = await this._session.run(inputs);
|
|
29
|
+
this._state = out["stateN"];
|
|
30
|
+
const [isSpeech] = out["output"]?.data;
|
|
31
|
+
const notSpeech = 1 - isSpeech;
|
|
32
|
+
return { notSpeech, isSpeech };
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.SileroV5 = SileroV5;
|
|
37
|
+
_a = SileroV5;
|
|
38
|
+
SileroV5.new = async (ortInstance, modelFetcher) => {
|
|
39
|
+
const modelArrayBuffer = await modelFetcher();
|
|
40
|
+
const _session = await ortInstance.InferenceSession.create(modelArrayBuffer);
|
|
41
|
+
const _sr = new ortInstance.Tensor("int64", [16000n]);
|
|
42
|
+
const _state = getNewState(ortInstance);
|
|
43
|
+
return new _a(_session, _state, _sr, ortInstance);
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=v5.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v5.js","sourceRoot":"","sources":["../../../src/common/models/v5.ts"],"names":[],"mappings":";;;;AAGA,SAAS,WAAW,CAAC,WAAuB;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAa,QAAQ;IACnB,YACU,QAA8B,EAC9B,MAAkB,EAClB,GAAe,EACf,WAAuB;QAHvB,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,WAAM,GAAN,MAAM,CAAY;QAClB,QAAG,GAAH,GAAG,CAAY;QACf,gBAAW,GAAX,WAAW,CAAY;QAgBjC,gBAAW,GAAG,GAAG,EAAE;YACjB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF,YAAO,GAAG,KAAK,EAAE,UAAwB,EAAgC,EAAE;YACzE,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE;gBAC3D,CAAC;gBACD,UAAU,CAAC,MAAM;aAClB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG;gBACb,KAAK,EAAE,CAAC;gBACR,KAAK,EAAE,IAAI,CAAC,MAAM;gBAClB,EAAE,EAAE,IAAI,CAAC,GAAG;aACb,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAE5C,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAe,CAAC;YAE1C,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,IAA2B,CAAC;YAC9D,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC;YAC/B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC;IApCC,CAAC;;AANN,4BA2CC;;AAnCQ,YAAG,GAAiB,KAAK,EAC9B,WAAuB,EACvB,YAA0B,EAC1B,EAAE;IACF,MAAM,gBAAgB,GAAG,MAAM,YAAY,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,MAAM,CACxD,gBAAgB,CACjB,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,IAAI,EAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;AAC1D,CAAC,AAXS,CAWR"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type * as ort from "onnxruntime-node";
|
|
2
|
+
import type { ModelFactory, SpeechProbabilities } from "./common";
|
|
3
|
+
/**
|
|
4
|
+
* Silero VAD v6.2 model wrapper
|
|
5
|
+
*
|
|
6
|
+
* Improvements over v5:
|
|
7
|
+
* - 16% fewer errors on noisy real-life data
|
|
8
|
+
* - 11% fewer errors on multi-domain validation
|
|
9
|
+
* - Better handling of lower quality phone calls (telephony)
|
|
10
|
+
* - Improved training algorithm for robustness
|
|
11
|
+
*/
|
|
12
|
+
export declare class SileroV6 {
|
|
13
|
+
private _session;
|
|
14
|
+
private _state;
|
|
15
|
+
private _sr;
|
|
16
|
+
private ortInstance;
|
|
17
|
+
constructor(_session: ort.InferenceSession, _state: ort.Tensor, _sr: ort.Tensor, ortInstance: typeof ort);
|
|
18
|
+
static new: ModelFactory;
|
|
19
|
+
reset_state: () => void;
|
|
20
|
+
process: (audioFrame: Float32Array) => Promise<SpeechProbabilities>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=v6.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v6.d.ts","sourceRoot":"","sources":["../../../src/common/models/v6.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,YAAY,EAAgB,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAOhF;;;;;;;;GAQG;AACH,qBAAa,QAAQ;IAEjB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,WAAW;gBAHX,QAAQ,EAAE,GAAG,CAAC,gBAAgB,EAC9B,MAAM,EAAE,GAAG,CAAC,MAAM,EAClB,GAAG,EAAE,GAAG,CAAC,MAAM,EACf,WAAW,EAAE,OAAO,GAAG;IAGjC,MAAM,CAAC,GAAG,EAAE,YAAY,CAWtB;IAEF,WAAW,aAET;IAEF,OAAO,GAAU,YAAY,YAAY,KAAG,OAAO,CAAC,mBAAmB,CAAC,CAiBtE;CACH"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.SileroV6 = void 0;
|
|
5
|
+
function getNewState(ortInstance) {
|
|
6
|
+
const zeroes = Array(2 * 128).fill(0);
|
|
7
|
+
return new ortInstance.Tensor("float32", zeroes, [2, 1, 128]);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Silero VAD v6.2 model wrapper
|
|
11
|
+
*
|
|
12
|
+
* Improvements over v5:
|
|
13
|
+
* - 16% fewer errors on noisy real-life data
|
|
14
|
+
* - 11% fewer errors on multi-domain validation
|
|
15
|
+
* - Better handling of lower quality phone calls (telephony)
|
|
16
|
+
* - Improved training algorithm for robustness
|
|
17
|
+
*/
|
|
18
|
+
class SileroV6 {
|
|
19
|
+
constructor(_session, _state, _sr, ortInstance) {
|
|
20
|
+
this._session = _session;
|
|
21
|
+
this._state = _state;
|
|
22
|
+
this._sr = _sr;
|
|
23
|
+
this.ortInstance = ortInstance;
|
|
24
|
+
this.reset_state = () => {
|
|
25
|
+
this._state = getNewState(this.ortInstance);
|
|
26
|
+
};
|
|
27
|
+
this.process = async (audioFrame) => {
|
|
28
|
+
const t = new this.ortInstance.Tensor("float32", audioFrame, [
|
|
29
|
+
1,
|
|
30
|
+
audioFrame.length,
|
|
31
|
+
]);
|
|
32
|
+
const inputs = {
|
|
33
|
+
input: t,
|
|
34
|
+
state: this._state,
|
|
35
|
+
sr: this._sr,
|
|
36
|
+
};
|
|
37
|
+
const out = await this._session.run(inputs);
|
|
38
|
+
this._state = out["stateN"];
|
|
39
|
+
const [isSpeech] = out["output"]?.data;
|
|
40
|
+
const notSpeech = 1 - isSpeech;
|
|
41
|
+
return { notSpeech, isSpeech };
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.SileroV6 = SileroV6;
|
|
46
|
+
_a = SileroV6;
|
|
47
|
+
SileroV6.new = async (ortInstance, modelFetcher) => {
|
|
48
|
+
const modelArrayBuffer = await modelFetcher();
|
|
49
|
+
const _session = await ortInstance.InferenceSession.create(modelArrayBuffer);
|
|
50
|
+
const _sr = new ortInstance.Tensor("int64", [16000n]);
|
|
51
|
+
const _state = getNewState(ortInstance);
|
|
52
|
+
return new _a(_session, _state, _sr, ortInstance);
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=v6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"v6.js","sourceRoot":"","sources":["../../../src/common/models/v6.ts"],"names":[],"mappings":";;;;AAGA,SAAS,WAAW,CAAC,WAAuB;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtC,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAa,QAAQ;IACnB,YACU,QAA8B,EAC9B,MAAkB,EAClB,GAAe,EACf,WAAuB;QAHvB,aAAQ,GAAR,QAAQ,CAAsB;QAC9B,WAAM,GAAN,MAAM,CAAY;QAClB,QAAG,GAAH,GAAG,CAAY;QACf,gBAAW,GAAX,WAAW,CAAY;QAgBjC,gBAAW,GAAG,GAAG,EAAE;YACjB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC,CAAC;QAEF,YAAO,GAAG,KAAK,EAAE,UAAwB,EAAgC,EAAE;YACzE,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE;gBAC3D,CAAC;gBACD,UAAU,CAAC,MAAM;aAClB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG;gBACb,KAAK,EAAE,CAAC;gBACR,KAAK,EAAE,IAAI,CAAC,MAAM;gBAClB,EAAE,EAAE,IAAI,CAAC,GAAG;aACb,CAAC;YACF,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAE5C,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAe,CAAC;YAE1C,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,IAA2B,CAAC;YAC9D,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC;YAC/B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QACjC,CAAC,CAAC;IApCC,CAAC;;AANN,4BA2CC;;AAnCQ,YAAG,GAAiB,KAAK,EAC9B,WAAuB,EACvB,YAA0B,EAC1B,EAAE;IACF,MAAM,gBAAgB,GAAG,MAAM,YAAY,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,MAAM,CACxD,gBAAgB,CACjB,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IACxC,OAAO,IAAI,EAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;AAC1D,CAAC,AAXS,CAWR"}
|