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.
Files changed (72) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +403 -0
  3. package/dist/common/asset-path.d.ts +2 -0
  4. package/dist/common/asset-path.d.ts.map +1 -0
  5. package/dist/common/asset-path.js +17 -0
  6. package/dist/common/asset-path.js.map +1 -0
  7. package/dist/common/default-model-fetcher.d.ts +2 -0
  8. package/dist/common/default-model-fetcher.d.ts.map +1 -0
  9. package/dist/common/default-model-fetcher.js +8 -0
  10. package/dist/common/default-model-fetcher.js.map +1 -0
  11. package/dist/common/frame-processor.d.ts +86 -0
  12. package/dist/common/frame-processor.d.ts.map +1 -0
  13. package/dist/common/frame-processor.js +180 -0
  14. package/dist/common/frame-processor.js.map +1 -0
  15. package/dist/common/index.d.ts +13 -0
  16. package/dist/common/index.d.ts.map +1 -0
  17. package/dist/common/index.js +53 -0
  18. package/dist/common/index.js.map +1 -0
  19. package/dist/common/logging.d.ts +8 -0
  20. package/dist/common/logging.d.ts.map +1 -0
  21. package/dist/common/logging.js +16 -0
  22. package/dist/common/logging.js.map +1 -0
  23. package/dist/common/messages.d.ts +10 -0
  24. package/dist/common/messages.d.ts.map +1 -0
  25. package/dist/common/messages.js +14 -0
  26. package/dist/common/messages.js.map +1 -0
  27. package/dist/common/models/common.d.ts +14 -0
  28. package/dist/common/models/common.d.ts.map +1 -0
  29. package/dist/common/models/common.js +3 -0
  30. package/dist/common/models/common.js.map +1 -0
  31. package/dist/common/models/index.d.ts +9 -0
  32. package/dist/common/models/index.d.ts.map +1 -0
  33. package/dist/common/models/index.js +11 -0
  34. package/dist/common/models/index.js.map +1 -0
  35. package/dist/common/models/legacy.d.ts +14 -0
  36. package/dist/common/models/legacy.d.ts.map +1 -0
  37. package/dist/common/models/legacy.js +52 -0
  38. package/dist/common/models/legacy.js.map +1 -0
  39. package/dist/common/models/v5.d.ts +13 -0
  40. package/dist/common/models/v5.d.ts.map +1 -0
  41. package/dist/common/models/v5.js +45 -0
  42. package/dist/common/models/v5.js.map +1 -0
  43. package/dist/common/models/v6.d.ts +22 -0
  44. package/dist/common/models/v6.d.ts.map +1 -0
  45. package/dist/common/models/v6.js +54 -0
  46. package/dist/common/models/v6.js.map +1 -0
  47. package/dist/common/non-real-time-vad.d.ts +23 -0
  48. package/dist/common/non-real-time-vad.d.ts.map +1 -0
  49. package/dist/common/non-real-time-vad.js +127 -0
  50. package/dist/common/non-real-time-vad.js.map +1 -0
  51. package/dist/common/resampler.d.ts +16 -0
  52. package/dist/common/resampler.d.ts.map +1 -0
  53. package/dist/common/resampler.js +63 -0
  54. package/dist/common/resampler.js.map +1 -0
  55. package/dist/common/utils.d.ts +8 -0
  56. package/dist/common/utils.d.ts.map +1 -0
  57. package/dist/common/utils.js +118 -0
  58. package/dist/common/utils.js.map +1 -0
  59. package/dist/index.d.ts +13 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +74 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/real-time-vad.d.ts +63 -0
  64. package/dist/real-time-vad.d.ts.map +1 -0
  65. package/dist/real-time-vad.js +171 -0
  66. package/dist/real-time-vad.js.map +1 -0
  67. package/dist/silero_vad_legacy.onnx +0 -0
  68. package/dist/silero_vad_v5.onnx +0 -0
  69. package/package.json +66 -0
  70. package/silero_vad_legacy.onnx +0 -0
  71. package/silero_vad_v5.onnx +0 -0
  72. package/silero_vad_v6.onnx +0 -0
@@ -0,0 +1,23 @@
1
+ import { type FrameProcessorInterface, type FrameProcessorOptions } from "./frame-processor";
2
+ import { type ModelFetcher, type OrtModule, type OrtOptions } from "./models";
3
+ interface NonRealTimeVADSpeechData {
4
+ audio: Float32Array;
5
+ start: number;
6
+ end: number;
7
+ }
8
+ export interface NonRealTimeVADOptions extends FrameProcessorOptions, OrtOptions {
9
+ modelURL: string;
10
+ modelFetcher: (path: string) => Promise<ArrayBuffer>;
11
+ }
12
+ export declare const defaultNonRealTimeVADOptions: NonRealTimeVADOptions;
13
+ export declare class NonRealTimeVAD {
14
+ modelFetcher: ModelFetcher;
15
+ ort: OrtModule;
16
+ options: NonRealTimeVADOptions;
17
+ frameProcessor: FrameProcessorInterface;
18
+ static new(options?: Partial<NonRealTimeVADOptions>): Promise<NonRealTimeVAD>;
19
+ constructor(modelFetcher: ModelFetcher, ort: OrtModule, options: NonRealTimeVADOptions, frameProcessor: FrameProcessorInterface);
20
+ run(inputAudio: Float32Array, sampleRate: number): AsyncGenerator<NonRealTimeVADSpeechData>;
21
+ }
22
+ export {};
23
+ //# sourceMappingURL=non-real-time-vad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"non-real-time-vad.d.ts","sourceRoot":"","sources":["../../src/common/non-real-time-vad.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAG3B,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,UAAU,EAEhB,MAAM,UAAU,CAAC;AAGlB,UAAU,wBAAwB;IAChC,KAAK,EAAE,YAAY,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBACf,SAAQ,qBAAqB,EAC3B,UAAU;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;CACtD;AAED,eAAO,MAAM,4BAA4B,EAAE,qBAK1C,CAAC;AAEF,qBAAa,cAAc;IAuChB,YAAY,EAAE,YAAY;IAC1B,GAAG,EAAE,SAAS;IACd,OAAO,EAAE,qBAAqB;IAC9B,cAAc,EAAE,uBAAuB;WAzCnC,GAAG,CAAC,OAAO,GAAE,OAAO,CAAC,qBAAqB,CAAM;gBAsCpD,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,qBAAqB,EAC9B,cAAc,EAAE,uBAAuB;IAGzC,GAAG,CACR,UAAU,EAAE,YAAY,EACxB,UAAU,EAAE,MAAM,GACjB,cAAc,CAAC,wBAAwB,CAAC;CAiD5C"}
@@ -0,0 +1,127 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.NonRealTimeVAD = exports.defaultNonRealTimeVADOptions = void 0;
37
+ const ortInstance = __importStar(require("onnxruntime-node"));
38
+ const asset_path_1 = require("./asset-path");
39
+ const default_model_fetcher_1 = require("./default-model-fetcher");
40
+ const frame_processor_1 = require("./frame-processor");
41
+ const messages_1 = require("./messages");
42
+ const models_1 = require("./models");
43
+ const resampler_1 = require("./resampler");
44
+ exports.defaultNonRealTimeVADOptions = {
45
+ ...frame_processor_1.defaultLegacyFrameProcessorOptions,
46
+ ortConfig: undefined,
47
+ modelURL: asset_path_1.baseAssetPath + "silero_vad_legacy.onnx",
48
+ modelFetcher: default_model_fetcher_1.defaultModelFetcher,
49
+ };
50
+ class NonRealTimeVAD {
51
+ static async new(options = {}) {
52
+ const fullOptions = {
53
+ ...exports.defaultNonRealTimeVADOptions,
54
+ ...options,
55
+ };
56
+ (0, frame_processor_1.validateOptions)(fullOptions);
57
+ if (fullOptions.ortConfig !== undefined) {
58
+ fullOptions.ortConfig(ortInstance);
59
+ }
60
+ const modelFetcher = () => fullOptions.modelFetcher(fullOptions.modelURL);
61
+ const model = await models_1.SileroLegacy.new(ortInstance, modelFetcher);
62
+ const frameProcessor = new frame_processor_1.FrameProcessor(model.process, model.reset_state, {
63
+ frameSamples: fullOptions.frameSamples,
64
+ positiveSpeechThreshold: fullOptions.positiveSpeechThreshold,
65
+ negativeSpeechThreshold: fullOptions.negativeSpeechThreshold,
66
+ redemptionFrames: fullOptions.redemptionFrames,
67
+ preSpeechPadFrames: fullOptions.preSpeechPadFrames,
68
+ minSpeechFrames: fullOptions.minSpeechFrames,
69
+ submitUserSpeechOnPause: fullOptions.submitUserSpeechOnPause,
70
+ });
71
+ frameProcessor.resume();
72
+ const vad = new this(modelFetcher, ortInstance, fullOptions, frameProcessor);
73
+ return vad;
74
+ }
75
+ constructor(modelFetcher, ort, options, frameProcessor) {
76
+ this.modelFetcher = modelFetcher;
77
+ this.ort = ort;
78
+ this.options = options;
79
+ this.frameProcessor = frameProcessor;
80
+ }
81
+ async *run(inputAudio, sampleRate) {
82
+ const resamplerOptions = {
83
+ nativeSampleRate: sampleRate,
84
+ targetSampleRate: 16000,
85
+ targetFrameSize: this.options.frameSamples,
86
+ };
87
+ const resampler = new resampler_1.Resampler(resamplerOptions);
88
+ let start = 0;
89
+ let end = 0;
90
+ let frameIndex = 0;
91
+ const messageContainer = [];
92
+ for await (const frame of resampler.stream(inputAudio)) {
93
+ await this.frameProcessor.process(frame, (event) => {
94
+ messageContainer.push(event);
95
+ });
96
+ for (const event of messageContainer) {
97
+ switch (event.msg) {
98
+ case messages_1.Message.SpeechStart:
99
+ start = (frameIndex * this.options.frameSamples) / 16;
100
+ break;
101
+ case messages_1.Message.SpeechEnd:
102
+ end = ((frameIndex + 1) * this.options.frameSamples) / 16;
103
+ yield { audio: event.audio, start, end };
104
+ break;
105
+ default:
106
+ break;
107
+ }
108
+ }
109
+ frameIndex++;
110
+ }
111
+ this.frameProcessor.endSegment((event) => {
112
+ messageContainer.push(event);
113
+ });
114
+ for (const event of messageContainer) {
115
+ switch (event.msg) {
116
+ case messages_1.Message.SpeechEnd:
117
+ yield {
118
+ audio: event.audio,
119
+ start,
120
+ end: (frameIndex * this.options.frameSamples) / 16,
121
+ };
122
+ }
123
+ }
124
+ }
125
+ }
126
+ exports.NonRealTimeVAD = NonRealTimeVAD;
127
+ //# sourceMappingURL=non-real-time-vad.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"non-real-time-vad.js","sourceRoot":"","sources":["../../src/common/non-real-time-vad.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAgD;AAEhD,6CAA6C;AAC7C,mEAA8D;AAC9D,uDAO2B;AAC3B,yCAAqC;AACrC,qCAKkB;AAClB,2CAAwC;AAe3B,QAAA,4BAA4B,GAA0B;IACjE,GAAG,oDAAkC;IACrC,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,0BAAa,GAAG,wBAAwB;IAClD,YAAY,EAAE,2CAAmB;CAClC,CAAC;AAEF,MAAa,cAAc;IACzB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAA0C,EAAE;QAC3D,MAAM,WAAW,GAAG;YAClB,GAAG,oCAA4B;YAC/B,GAAG,OAAO;SACX,CAAC;QACF,IAAA,iCAAe,EAAC,WAAW,CAAC,CAAC;QAE7B,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACxC,WAAW,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,MAAM,qBAAY,CAAC,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAEhE,MAAM,cAAc,GAAG,IAAI,gCAAc,CACvC,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,WAAW,EACjB;YACE,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,uBAAuB,EAAE,WAAW,CAAC,uBAAuB;YAC5D,uBAAuB,EAAE,WAAW,CAAC,uBAAuB;YAC5D,gBAAgB,EAAE,WAAW,CAAC,gBAAgB;YAC9C,kBAAkB,EAAE,WAAW,CAAC,kBAAkB;YAClD,eAAe,EAAE,WAAW,CAAC,eAAe;YAC5C,uBAAuB,EAAE,WAAW,CAAC,uBAAuB;SAC7D,CACF,CAAC;QACF,cAAc,CAAC,MAAM,EAAE,CAAC;QAExB,MAAM,GAAG,GAAG,IAAI,IAAI,CAClB,YAAY,EACZ,WAAW,EACX,WAAW,EACX,cAAc,CACf,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,YACS,YAA0B,EAC1B,GAAc,EACd,OAA8B,EAC9B,cAAuC;QAHvC,iBAAY,GAAZ,YAAY,CAAc;QAC1B,QAAG,GAAH,GAAG,CAAW;QACd,YAAO,GAAP,OAAO,CAAuB;QAC9B,mBAAc,GAAd,cAAc,CAAyB;IAC7C,CAAC;IAEJ,KAAK,CAAC,CAAC,GAAG,CACR,UAAwB,EACxB,UAAkB;QAElB,MAAM,gBAAgB,GAAG;YACvB,gBAAgB,EAAE,UAAU;YAC5B,gBAAgB,EAAE,KAAK;YACvB,eAAe,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;SAC3C,CAAC;QACF,MAAM,SAAS,GAAG,IAAI,qBAAS,CAAC,gBAAgB,CAAC,CAAC;QAClD,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,MAAM,gBAAgB,GAA0B,EAAE,CAAC;QAEnD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACjD,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;gBACrC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;oBAClB,KAAK,kBAAO,CAAC,WAAW;wBACtB,KAAK,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;wBACtD,MAAM;oBAER,KAAK,kBAAO,CAAC,SAAS;wBACpB,GAAG,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;wBAC1D,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;wBACzC,MAAM;oBAER;wBACE,MAAM;gBACV,CAAC;YACH,CAAC;YACD,UAAU,EAAE,CAAC;QACf,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;YACvC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,gBAAgB,EAAE,CAAC;YACrC,QAAQ,KAAK,CAAC,GAAG,EAAE,CAAC;gBAClB,KAAK,kBAAO,CAAC,SAAS;oBACpB,MAAM;wBACJ,KAAK,EAAE,KAAK,CAAC,KAAK;wBAClB,KAAK;wBACL,GAAG,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE;qBACnD,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAjGD,wCAiGC"}
@@ -0,0 +1,16 @@
1
+ interface ResamplerOptions {
2
+ nativeSampleRate: number;
3
+ targetSampleRate: number;
4
+ targetFrameSize: number;
5
+ }
6
+ export declare class Resampler {
7
+ options: ResamplerOptions;
8
+ inputBuffer: Array<number>;
9
+ constructor(options: ResamplerOptions);
10
+ process: (audioFrame: Float32Array) => Float32Array[];
11
+ stream: (audioInput: Float32Array) => AsyncGenerator<any, void, unknown>;
12
+ private hasEnoughDataForFrame;
13
+ private generateOutputFrame;
14
+ }
15
+ export {};
16
+ //# sourceMappingURL=resampler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resampler.d.ts","sourceRoot":"","sources":["../../src/common/resampler.ts"],"names":[],"mappings":"AAEA,UAAU,gBAAgB;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,SAAS;IAGD,OAAO,EAAE,gBAAgB;IAF5C,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;gBAER,OAAO,EAAE,gBAAgB;IAS5C,OAAO,GAAI,YAAY,YAAY,KAAG,YAAY,EAAE,CAalD;IAEF,MAAM,GAAoB,YAAY,YAAY,wCAShD;IAEF,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,mBAAmB;CA8B5B"}
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Resampler = void 0;
4
+ const logging_1 = require("./logging");
5
+ class Resampler {
6
+ constructor(options) {
7
+ this.options = options;
8
+ this.process = (audioFrame) => {
9
+ const outputFrames = [];
10
+ for (const sample of audioFrame) {
11
+ this.inputBuffer.push(sample);
12
+ while (this.hasEnoughDataForFrame()) {
13
+ const outputFrame = this.generateOutputFrame();
14
+ outputFrames.push(outputFrame);
15
+ }
16
+ }
17
+ return outputFrames;
18
+ };
19
+ this.stream = async function* (audioInput) {
20
+ for (const sample of audioInput) {
21
+ this.inputBuffer.push(sample);
22
+ while (this.hasEnoughDataForFrame()) {
23
+ const outputFrame = this.generateOutputFrame();
24
+ yield outputFrame;
25
+ }
26
+ }
27
+ };
28
+ if (options.nativeSampleRate < 16000) {
29
+ logging_1.log.error("nativeSampleRate is too low. Should have 16000 = targetSampleRate <= nativeSampleRate");
30
+ }
31
+ this.inputBuffer = [];
32
+ }
33
+ hasEnoughDataForFrame() {
34
+ return ((this.inputBuffer.length * this.options.targetSampleRate) /
35
+ this.options.nativeSampleRate >=
36
+ this.options.targetFrameSize);
37
+ }
38
+ generateOutputFrame() {
39
+ const outputFrame = new Float32Array(this.options.targetFrameSize);
40
+ let outputIndex = 0;
41
+ let inputIndex = 0;
42
+ while (outputIndex < this.options.targetFrameSize) {
43
+ let sum = 0;
44
+ let num = 0;
45
+ while (inputIndex <
46
+ Math.min(this.inputBuffer.length, ((outputIndex + 1) * this.options.nativeSampleRate) /
47
+ this.options.targetSampleRate)) {
48
+ const value = this.inputBuffer[inputIndex];
49
+ if (value !== undefined) {
50
+ sum += value;
51
+ num++;
52
+ }
53
+ inputIndex++;
54
+ }
55
+ outputFrame[outputIndex] = sum / num;
56
+ outputIndex++;
57
+ }
58
+ this.inputBuffer = this.inputBuffer.slice(inputIndex);
59
+ return outputFrame;
60
+ }
61
+ }
62
+ exports.Resampler = Resampler;
63
+ //# sourceMappingURL=resampler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resampler.js","sourceRoot":"","sources":["../../src/common/resampler.ts"],"names":[],"mappings":";;;AAAA,uCAAgC;AAQhC,MAAa,SAAS;IAGpB,YAAmB,OAAyB;QAAzB,YAAO,GAAP,OAAO,CAAkB;QAS5C,YAAO,GAAG,CAAC,UAAwB,EAAkB,EAAE;YACrD,MAAM,YAAY,GAAwB,EAAE,CAAC;YAE7C,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;gBAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE9B,OAAO,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;oBACpC,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC/C,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;YAED,OAAO,YAAY,CAAC;QACtB,CAAC,CAAC;QAEF,WAAM,GAAG,KAAK,SAAS,CAAC,EAAE,UAAwB;YAChD,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;gBAChC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAE9B,OAAO,IAAI,CAAC,qBAAqB,EAAE,EAAE,CAAC;oBACpC,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC/C,MAAM,WAAW,CAAC;gBACpB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAhCA,IAAI,OAAO,CAAC,gBAAgB,GAAG,KAAK,EAAE,CAAC;YACrC,aAAG,CAAC,KAAK,CACP,uFAAuF,CACxF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IA4BO,qBAAqB;QAC3B,OAAO,CACL,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAC/B,IAAI,CAAC,OAAO,CAAC,eAAe,CAC7B,CAAC;IACJ,CAAC;IAEO,mBAAmB;QACzB,MAAM,WAAW,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACnE,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,OAAO,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;YAClD,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,OACE,UAAU;gBACV,IAAI,CAAC,GAAG,CACN,IAAI,CAAC,WAAW,CAAC,MAAM,EACvB,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;oBACjD,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAChC,EACD,CAAC;gBACD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBAC3C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACxB,GAAG,IAAI,KAAK,CAAC;oBACb,GAAG,EAAE,CAAC;gBACR,CAAC;gBACD,UAAU,EAAE,CAAC;YACf,CAAC;YACD,WAAW,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;YACrC,WAAW,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACtD,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AA5ED,8BA4EC"}
@@ -0,0 +1,8 @@
1
+ export declare function minFramesForTargetMS(targetDuration: number, frameSamples: number, sr?: number): number;
2
+ export declare function arrayBufferToBase64(buffer: ArrayBuffer): string;
3
+ export declare function encodeWAV(samples: Float32Array, format?: number, sampleRate?: number, numChannels?: number, bitDepth?: number): ArrayBuffer;
4
+ export declare function audioFileToArray(audioFileData: Blob): Promise<{
5
+ audio: Float32Array<ArrayBuffer>;
6
+ sampleRate: number;
7
+ }>;
8
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/common/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,EAAE,SAAQ,GACT,MAAM,CAER;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,UAYtD;AAMD,wBAAgB,SAAS,CACvB,OAAO,EAAE,YAAY,EACrB,MAAM,SAAI,EACV,UAAU,SAAQ,EAClB,WAAW,SAAI,EACf,QAAQ,SAAK,eAuCd;AAyBD,wBAAsB,gBAAgB,CAAC,aAAa,EAAE,IAAI;;;GAuCzD"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.minFramesForTargetMS = minFramesForTargetMS;
4
+ exports.arrayBufferToBase64 = arrayBufferToBase64;
5
+ exports.encodeWAV = encodeWAV;
6
+ exports.audioFileToArray = audioFileToArray;
7
+ function minFramesForTargetMS(targetDuration, frameSamples, sr = 16000) {
8
+ return Math.ceil((targetDuration * sr) / 1000 / frameSamples);
9
+ }
10
+ function arrayBufferToBase64(buffer) {
11
+ const bytes = new Uint8Array(buffer);
12
+ const len = bytes.byteLength;
13
+ const binary = new Array(len);
14
+ for (let i = 0; i < len; i++) {
15
+ const byte = bytes[i];
16
+ if (byte === undefined) {
17
+ break;
18
+ }
19
+ binary[i] = String.fromCharCode(byte);
20
+ }
21
+ return btoa(binary.join(""));
22
+ }
23
+ /*
24
+ This rest of this was mostly copied from https://github.com/linto-ai/WebVoiceSDK
25
+ */
26
+ function encodeWAV(samples, format = 3, sampleRate = 16000, numChannels = 1, bitDepth = 32) {
27
+ const bytesPerSample = bitDepth / 8;
28
+ const blockAlign = numChannels * bytesPerSample;
29
+ const buffer = new ArrayBuffer(44 + samples.length * bytesPerSample);
30
+ const view = new DataView(buffer);
31
+ /* RIFF identifier */
32
+ writeString(view, 0, "RIFF");
33
+ /* RIFF chunk length */
34
+ view.setUint32(4, 36 + samples.length * bytesPerSample, true);
35
+ /* RIFF type */
36
+ writeString(view, 8, "WAVE");
37
+ /* format chunk identifier */
38
+ writeString(view, 12, "fmt ");
39
+ /* format chunk length */
40
+ view.setUint32(16, 16, true);
41
+ /* sample format (raw) */
42
+ view.setUint16(20, format, true);
43
+ /* channel count */
44
+ view.setUint16(22, numChannels, true);
45
+ /* sample rate */
46
+ view.setUint32(24, sampleRate, true);
47
+ /* byte rate (sample rate * block align) */
48
+ view.setUint32(28, sampleRate * blockAlign, true);
49
+ /* block align (channel count * bytes per sample) */
50
+ view.setUint16(32, blockAlign, true);
51
+ /* bits per sample */
52
+ view.setUint16(34, bitDepth, true);
53
+ /* data chunk identifier */
54
+ writeString(view, 36, "data");
55
+ /* data chunk length */
56
+ view.setUint32(40, samples.length * bytesPerSample, true);
57
+ if (format === 1) {
58
+ // Raw PCM
59
+ floatTo16BitPCM(view, 44, samples);
60
+ }
61
+ else {
62
+ writeFloat32(view, 44, samples);
63
+ }
64
+ return buffer;
65
+ }
66
+ function writeFloat32(output, offset, input) {
67
+ for (let i = 0; i < input.length; i++, offset += 4) {
68
+ output.setFloat32(offset, input[i], true);
69
+ }
70
+ }
71
+ function floatTo16BitPCM(output, offset, input) {
72
+ for (let i = 0; i < input.length; i++, offset += 2) {
73
+ const s = Math.max(-1, Math.min(1, input[i]));
74
+ output.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true);
75
+ }
76
+ }
77
+ function writeString(view, offset, string) {
78
+ for (let i = 0; i < string.length; i++) {
79
+ view.setUint8(offset + i, string.charCodeAt(i));
80
+ }
81
+ }
82
+ async function audioFileToArray(audioFileData) {
83
+ const ctx = new OfflineAudioContext(1, 1, 44100);
84
+ const reader = new FileReader();
85
+ let audioBuffer = null;
86
+ await new Promise((res) => {
87
+ reader.addEventListener("loadend", () => {
88
+ const audioData = reader.result;
89
+ ctx.decodeAudioData(audioData, (buffer) => {
90
+ audioBuffer = buffer;
91
+ ctx
92
+ .startRendering()
93
+ .then(() => {
94
+ console.log("Rendering completed successfully");
95
+ res();
96
+ })
97
+ .catch((err) => {
98
+ console.error(`Rendering failed: ${err}`);
99
+ });
100
+ }, (e) => {
101
+ console.log(`Error with decoding audio data: ${e}`);
102
+ });
103
+ });
104
+ reader.readAsArrayBuffer(audioFileData);
105
+ });
106
+ if (audioBuffer === null) {
107
+ throw Error("some shit");
108
+ }
109
+ const _audioBuffer = audioBuffer;
110
+ const out = new Float32Array(_audioBuffer.length);
111
+ for (let i = 0; i < _audioBuffer.length; i++) {
112
+ for (let j = 0; j < _audioBuffer.numberOfChannels; j++) {
113
+ out[i] = (out[i] ?? 0) + (_audioBuffer.getChannelData(j)?.[i] ?? 0);
114
+ }
115
+ }
116
+ return { audio: out, sampleRate: _audioBuffer.sampleRate };
117
+ }
118
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/common/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { FrameProcessor, type FrameProcessorOptions, Message, Resampler, utils } from "./common";
2
+ import { RealTimeVAD as BaseRealTimeVAD, DEFAULT_MODEL, type RealTimeVADOptions, getDefaultRealTimeVADOptions } from "./real-time-vad";
3
+ export { NonRealTimeVAD } from "./common/non-real-time-vad";
4
+ export type { NonRealTimeVADOptions } from "./common/non-real-time-vad";
5
+ /**
6
+ * RealTimeVAD with selectable model version (v5 default)
7
+ */
8
+ export declare class RealTimeVAD extends BaseRealTimeVAD {
9
+ static new(options?: Partial<RealTimeVADOptions>): Promise<RealTimeVAD>;
10
+ }
11
+ export { DEFAULT_MODEL, FrameProcessor, Message, Resampler, getDefaultRealTimeVADOptions, utils, };
12
+ export type { FrameProcessorOptions, RealTimeVADOptions };
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,KAAK,qBAAqB,EAC1B,OAAO,EACP,SAAS,EACT,KAAK,EACN,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,WAAW,IAAI,eAAe,EAC9B,aAAa,EACb,KAAK,kBAAkB,EACvB,4BAA4B,EAC7B,MAAM,iBAAiB,CAAC;AAezB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE;;GAEG;AACH,qBAAa,WAAY,SAAQ,eAAe;WACxB,GAAG,CACvB,OAAO,GAAE,OAAO,CAAC,kBAAkB,CAAM,GACxC,OAAO,CAAC,WAAW,CAAC;CASxB;AAED,OAAO,EACL,aAAa,EACb,cAAc,EACd,OAAO,EACP,SAAS,EACT,4BAA4B,EAC5B,KAAK,GACN,CAAC;AACF,YAAY,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,74 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.utils = exports.getDefaultRealTimeVADOptions = exports.Resampler = exports.Message = exports.FrameProcessor = exports.DEFAULT_MODEL = exports.RealTimeVAD = exports.NonRealTimeVAD = void 0;
37
+ const fs = __importStar(require("node:fs/promises"));
38
+ const ort = __importStar(require("onnxruntime-node"));
39
+ const common_1 = require("./common");
40
+ Object.defineProperty(exports, "FrameProcessor", { enumerable: true, get: function () { return common_1.FrameProcessor; } });
41
+ Object.defineProperty(exports, "Message", { enumerable: true, get: function () { return common_1.Message; } });
42
+ Object.defineProperty(exports, "Resampler", { enumerable: true, get: function () { return common_1.Resampler; } });
43
+ Object.defineProperty(exports, "utils", { enumerable: true, get: function () { return common_1.utils; } });
44
+ const real_time_vad_1 = require("./real-time-vad");
45
+ Object.defineProperty(exports, "DEFAULT_MODEL", { enumerable: true, get: function () { return real_time_vad_1.DEFAULT_MODEL; } });
46
+ Object.defineProperty(exports, "getDefaultRealTimeVADOptions", { enumerable: true, get: function () { return real_time_vad_1.getDefaultRealTimeVADOptions; } });
47
+ const LEGACY_MODEL_PATH = `${__dirname}/silero_vad_legacy.onnx`;
48
+ const V5_MODEL_PATH = `${__dirname}/silero_vad_v5.onnx`;
49
+ const fetchLegacyModel = async () => {
50
+ const data = await fs.readFile(LEGACY_MODEL_PATH);
51
+ return data.buffer;
52
+ };
53
+ const fetchV5Model = async () => {
54
+ const data = await fs.readFile(V5_MODEL_PATH);
55
+ return data.buffer;
56
+ };
57
+ var non_real_time_vad_1 = require("./common/non-real-time-vad");
58
+ Object.defineProperty(exports, "NonRealTimeVAD", { enumerable: true, get: function () { return non_real_time_vad_1.NonRealTimeVAD; } });
59
+ /**
60
+ * RealTimeVAD with selectable model version (v5 default)
61
+ */
62
+ class RealTimeVAD extends real_time_vad_1.RealTimeVAD {
63
+ static async new(options = {}) {
64
+ // determine which model to use
65
+ const modelVersion = options.model ?? real_time_vad_1.DEFAULT_MODEL;
66
+ const fetcher = modelVersion === "v5" ? fetchV5Model : fetchLegacyModel;
67
+ // build full defaults including correct frame processor opts
68
+ const defaults = (0, real_time_vad_1.getDefaultRealTimeVADOptions)(modelVersion);
69
+ const opts = { ...defaults, ...options };
70
+ return real_time_vad_1.RealTimeVAD.new(ort, fetcher, opts);
71
+ }
72
+ }
73
+ exports.RealTimeVAD = RealTimeVAD;
74
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qDAAuC;AACvC,sDAAwC;AACxC,qCAMkB;AA4ChB,+FAjDA,uBAAc,OAiDA;AACd,wFAhDA,gBAAO,OAgDA;AACP,0FAhDA,kBAAS,OAgDA;AAET,sFAjDA,cAAK,OAiDA;AA9CP,mDAKyB;AAoCvB,8FAvCA,6BAAa,OAuCA;AAIb,6GAzCA,4CAA4B,OAyCA;AAtC9B,MAAM,iBAAiB,GAAG,GAAG,SAAS,yBAAyB,CAAC;AAChE,MAAM,aAAa,GAAG,GAAG,SAAS,qBAAqB,CAAC;AAExD,MAAM,gBAAgB,GAAG,KAAK,IAA0B,EAAE;IACxD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAClD,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,KAAK,IAA0B,EAAE;IACpD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,MAAM,CAAC;AACrB,CAAC,CAAC;AAEF,gEAA4D;AAAnD,mHAAA,cAAc,OAAA;AAGvB;;GAEG;AACH,MAAa,WAAY,SAAQ,2BAAe;IAC9C,MAAM,CAAU,KAAK,CAAC,GAAG,CACvB,UAAuC,EAAE;QAEzC,+BAA+B;QAC/B,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,IAAI,6BAAa,CAAC;QACpD,MAAM,OAAO,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC;QACxE,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,IAAA,4CAA4B,EAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC;QACzC,OAAO,2BAAe,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAyB,CAAC;IACzE,CAAC;CACF;AAZD,kCAYC"}
@@ -0,0 +1,63 @@
1
+ import type { OrtOptions } from "./common/models";
2
+ import { type FrameProcessorOptions } from "./common/frame-processor";
3
+ import { type SpeechProbabilities } from "./common/models";
4
+ export type ModelVersion = "v6" | "v5" | "legacy";
5
+ export declare const DEFAULT_MODEL: ModelVersion;
6
+ /**
7
+ * Callbacks for real-time VAD events
8
+ */
9
+ export interface RealTimeVADCallbacks {
10
+ onFrameProcessed: (probabilities: SpeechProbabilities, frame: Float32Array) => void;
11
+ onVADMisfire: () => void;
12
+ onSpeechStart: () => void;
13
+ onSpeechRealStart: () => void;
14
+ onSpeechEnd: (audio: Float32Array) => void;
15
+ }
16
+ /**
17
+ * Options for RealTimeVAD in Node environment
18
+ */
19
+ export interface RealTimeVADOptions extends FrameProcessorOptions, RealTimeVADCallbacks, OrtOptions {
20
+ /** Sample rate of the incoming audio; will be resampled to 16000Hz internally */
21
+ sampleRate: number;
22
+ /** Which Silero model to use: V5 or legacy */
23
+ model?: ModelVersion;
24
+ }
25
+ /**
26
+ * Build default options based on chosen model
27
+ */
28
+ export declare function getDefaultRealTimeVADOptions(model?: ModelVersion): RealTimeVADOptions;
29
+ /**
30
+ * RealTimeVAD processes raw audio buffers, frames, and emits events
31
+ */
32
+ export declare class RealTimeVAD {
33
+ private options;
34
+ private frameProcessor;
35
+ private modelInstance;
36
+ private buffer;
37
+ private frameSize;
38
+ private active;
39
+ private resampler;
40
+ /**
41
+ * Construct a new instance with provided options and loaded model
42
+ */
43
+ protected constructor(options: RealTimeVADOptions, modelInstance: any);
44
+ /**
45
+ * Create and initialize a RealTimeVAD instance
46
+ */
47
+ static new(ort: any, modelFetcher: () => Promise<ArrayBuffer>, opts?: Partial<RealTimeVADOptions>): Promise<RealTimeVAD>;
48
+ /** Start processing incoming frames */
49
+ start(): void;
50
+ /** Pause processing; may emit end-segment on pause */
51
+ pause(): void;
52
+ /** Feed raw audio (any sample rate) into the VAD */
53
+ processAudio(audioData: Float32Array): Promise<void>;
54
+ /** Flush any remaining audio and end segment */
55
+ flush(): Promise<void>;
56
+ /** Reset internal state */
57
+ reset(): void;
58
+ /** Handle events emitted by the frame processor */
59
+ private handleEvent;
60
+ /** Clean up resources */
61
+ destroy(): void;
62
+ }
63
+ //# sourceMappingURL=real-time-vad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"real-time-vad.d.ts","sourceRoot":"","sources":["../src/real-time-vad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAGL,KAAK,qBAAqB,EAK3B,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAKL,KAAK,mBAAmB,EACzB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,QAAQ,CAAC;AAClD,eAAO,MAAM,aAAa,EAAE,YAAmB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,CAChB,aAAa,EAAE,mBAAmB,EAClC,KAAK,EAAE,YAAY,KAChB,IAAI,CAAC;IACV,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,WAAW,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,kBACf,SAAQ,qBAAqB,EAC3B,oBAAoB,EACpB,UAAU;IACZ,iFAAiF;IACjF,UAAU,EAAE,MAAM,CAAC;IACnB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,GAAE,YAA4B,GAClC,kBAAkB,CA0BpB;AAED;;GAEG;AACH,qBAAa,WAAW;IAYpB,OAAO,CAAC,OAAO;IAXjB,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAA0B;IAE3C;;OAEG;IACH,SAAS,aACC,OAAO,EAAE,kBAAkB,EACnC,aAAa,EAAE,GAAG;IA4BpB;;OAEG;WACU,GAAG,CACd,GAAG,EAAE,GAAG,EACR,YAAY,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,EACxC,IAAI,GAAE,OAAO,CAAC,kBAAkB,CAAM,GACrC,OAAO,CAAC,WAAW,CAAC;IAqBvB,uCAAuC;IACvC,KAAK,IAAI,IAAI;IAKb,sDAAsD;IACtD,KAAK,IAAI,IAAI;IAKb,oDAAoD;IAC9C,YAAY,CAAC,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA+B1D,gDAAgD;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU5B,2BAA2B;IAC3B,KAAK,IAAI,IAAI;IAKb,mDAAmD;IACnD,OAAO,CAAC,WAAW,CAkBjB;IAEF,yBAAyB;IACzB,OAAO,IAAI,IAAI;CAIhB"}