Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@ricky0123/vad-web

Package Overview
Dependencies
Maintainers
1
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ricky0123/vad-web - npm Package Compare versions

Comparing version
0.0.27
to
0.0.28
+2
-2
dist/bundle.dev.js

@@ -119,3 +119,3 @@ /*

eval("\nvar _a;\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SileroV5 = void 0;\nconst logging_1 = __webpack_require__(/*! ../logging */ \"./dist/logging.js\");\nfunction getNewState(ortInstance) {\n const zeroes = Array(2 * 128).fill(0);\n return new ortInstance.Tensor(\"float32\", zeroes, [2, 1, 128]);\n}\nclass SileroV5 {\n constructor(_session, _state, _sr, ortInstance) {\n this._session = _session;\n this._state = _state;\n this._sr = _sr;\n this.ortInstance = ortInstance;\n this.reset_state = () => {\n this._state = getNewState(this.ortInstance);\n };\n this.process = async (audioFrame) => {\n const t = new this.ortInstance.Tensor(\"float32\", audioFrame, [\n 1,\n audioFrame.length,\n ]);\n const inputs = {\n input: t,\n state: this._state,\n sr: this._sr,\n };\n const out = await this._session.run(inputs);\n // @ts-ignore\n this._state = out[\"stateN\"];\n // @ts-ignore\n const [isSpeech] = out[\"output\"]?.data;\n const notSpeech = 1 - isSpeech;\n return { notSpeech, isSpeech };\n };\n }\n}\nexports.SileroV5 = SileroV5;\n_a = SileroV5;\nSileroV5.new = async (ortInstance, modelFetcher) => {\n logging_1.log.debug(\"Loading VAD...\");\n logging_1.log.debug(\"ort loglevel set to\", ortInstance.env.logLevel);\n const modelArrayBuffer = await modelFetcher();\n const _session = await ortInstance.InferenceSession.create(modelArrayBuffer);\n // @ts-ignore\n const _sr = new ortInstance.Tensor(\"int64\", [16000n]);\n const _state = getNewState(ortInstance);\n logging_1.log.debug(\"...finished loading VAD\");\n return new _a(_session, _state, _sr, ortInstance);\n};\n//# sourceMappingURL=v5.js.map\n\n//# sourceURL=webpack://vad/./dist/models/v5.js?");
eval("\nvar _a;\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.SileroV5 = void 0;\nconst logging_1 = __webpack_require__(/*! ../logging */ \"./dist/logging.js\");\nfunction getNewState(ortInstance) {\n const zeroes = Array(2 * 128).fill(0);\n return new ortInstance.Tensor(\"float32\", zeroes, [2, 1, 128]);\n}\nclass SileroV5 {\n constructor(_session, _state, _sr, ortInstance) {\n this._session = _session;\n this._state = _state;\n this._sr = _sr;\n this.ortInstance = ortInstance;\n this.reset_state = () => {\n this._state = getNewState(this.ortInstance);\n };\n this.process = async (audioFrame) => {\n const t = new this.ortInstance.Tensor(\"float32\", audioFrame, [\n 1,\n audioFrame.length,\n ]);\n const inputs = {\n input: t,\n state: this._state,\n sr: this._sr,\n };\n const out = await this._session.run(inputs);\n // @ts-ignore\n this._state = out[\"stateN\"];\n // @ts-ignore\n const [isSpeech] = out[\"output\"]?.data;\n const notSpeech = 1 - isSpeech;\n return { notSpeech, isSpeech };\n };\n }\n}\nexports.SileroV5 = SileroV5;\n_a = SileroV5;\nSileroV5.new = async (ortInstance, modelFetcher) => {\n logging_1.log.debug(\"Loading VAD...\");\n const modelArrayBuffer = await modelFetcher();\n const _session = await ortInstance.InferenceSession.create(modelArrayBuffer);\n // @ts-ignore\n const _sr = new ortInstance.Tensor(\"int64\", [16000n]);\n const _state = getNewState(ortInstance);\n logging_1.log.debug(\"...finished loading VAD\");\n return new _a(_session, _state, _sr, ortInstance);\n};\n//# sourceMappingURL=v5.js.map\n\n//# sourceURL=webpack://vad/./dist/models/v5.js?");

@@ -140,3 +140,3 @@ /***/ }),

eval("\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.AudioNodeVAD = exports.MicVAD = exports.getDefaultRealTimeVADOptions = exports.ort = exports.DEFAULT_MODEL = void 0;\nconst ortInstance = __importStar(__webpack_require__(/*! onnxruntime-web */ \"onnxruntime-web\"));\nconst default_model_fetcher_1 = __webpack_require__(/*! ./default-model-fetcher */ \"./dist/default-model-fetcher.js\");\nconst frame_processor_1 = __webpack_require__(/*! ./frame-processor */ \"./dist/frame-processor.js\");\nconst logging_1 = __webpack_require__(/*! ./logging */ \"./dist/logging.js\");\nconst messages_1 = __webpack_require__(/*! ./messages */ \"./dist/messages.js\");\nconst models_1 = __webpack_require__(/*! ./models */ \"./dist/models/index.js\");\nconst resampler_1 = __webpack_require__(/*! ./resampler */ \"./dist/resampler.js\");\nexports.DEFAULT_MODEL = \"legacy\";\nexports.ort = ortInstance;\nconst workletFile = \"vad.worklet.bundle.min.js\";\nconst sileroV5File = \"silero_vad_v5.onnx\";\nconst sileroLegacyFile = \"silero_vad_legacy.onnx\";\nconst getDefaultRealTimeVADOptions = (model) => {\n return {\n ...frame_processor_1.defaultFrameProcessorOptions,\n onFrameProcessed: (_probabilities, _frame) => { },\n onVADMisfire: () => {\n logging_1.log.debug(\"VAD misfire\");\n },\n onSpeechStart: () => {\n logging_1.log.debug(\"Detected speech start\");\n },\n onSpeechEnd: () => {\n logging_1.log.debug(\"Detected speech end\");\n },\n onSpeechRealStart: () => {\n logging_1.log.debug(\"Detected real speech start\");\n },\n baseAssetPath: \"./\",\n onnxWASMBasePath: \"./\",\n model: model,\n workletOptions: {},\n getStream: async () => {\n return await navigator.mediaDevices.getUserMedia({\n audio: {\n channelCount: 1,\n echoCancellation: true,\n autoGainControl: true,\n noiseSuppression: true,\n },\n });\n },\n pauseStream: async (_stream) => {\n _stream.getTracks().forEach((track) => {\n track.stop();\n });\n },\n resumeStream: async (_stream) => {\n return await navigator.mediaDevices.getUserMedia({\n audio: {\n channelCount: 1,\n echoCancellation: true,\n autoGainControl: true,\n noiseSuppression: true,\n },\n });\n },\n ortConfig: (ort) => {\n ort.env.logLevel = \"error\";\n },\n };\n};\nexports.getDefaultRealTimeVADOptions = getDefaultRealTimeVADOptions;\nclass MicVAD {\n static async new(options = {}) {\n const fullOptions = {\n ...(0, exports.getDefaultRealTimeVADOptions)(options.model ?? exports.DEFAULT_MODEL),\n ...options,\n };\n (0, frame_processor_1.validateOptions)(fullOptions);\n const stream = await fullOptions.getStream();\n const audioContext = new AudioContext();\n const sourceNode = new MediaStreamAudioSourceNode(audioContext, {\n mediaStream: stream,\n });\n const audioNodeVAD = await AudioNodeVAD.new(audioContext, fullOptions);\n audioNodeVAD.receive(sourceNode);\n return new MicVAD(fullOptions, audioContext, stream, audioNodeVAD, sourceNode);\n }\n constructor(options, audioContext, stream, audioNodeVAD, sourceNode, listening = false) {\n this.options = options;\n this.audioContext = audioContext;\n this.stream = stream;\n this.audioNodeVAD = audioNodeVAD;\n this.sourceNode = sourceNode;\n this.listening = listening;\n this.pause = () => {\n this.options.pauseStream(this.stream);\n this.audioNodeVAD.pause();\n this.listening = false;\n };\n this.resume = async () => {\n this.stream = await this.options.resumeStream(this.stream);\n this.sourceNode = new MediaStreamAudioSourceNode(this.audioContext, {\n mediaStream: this.stream,\n });\n this.audioNodeVAD.receive(this.sourceNode);\n };\n this.start = async () => {\n if (!this.stream.active) {\n await this.resume();\n this.audioNodeVAD.start();\n this.listening = true;\n }\n else {\n this.audioNodeVAD.start();\n this.listening = true;\n }\n };\n this.destroy = () => {\n if (this.listening) {\n this.pause();\n }\n this.options.pauseStream(this.stream);\n this.sourceNode.disconnect();\n this.audioNodeVAD.destroy();\n this.audioContext.close();\n };\n this.setOptions = (options) => {\n this.audioNodeVAD.setFrameProcessorOptions(options);\n };\n }\n}\nexports.MicVAD = MicVAD;\nclass AudioNodeVAD {\n static async new(ctx, options = {}) {\n const fullOptions = {\n ...(0, exports.getDefaultRealTimeVADOptions)(options.model ?? exports.DEFAULT_MODEL),\n ...options,\n };\n (0, frame_processor_1.validateOptions)(fullOptions);\n exports.ort.env.wasm.wasmPaths = fullOptions.onnxWASMBasePath;\n if (fullOptions.ortConfig !== undefined) {\n fullOptions.ortConfig(exports.ort);\n }\n const modelFile = fullOptions.model === \"v5\" ? sileroV5File : sileroLegacyFile;\n const modelURL = fullOptions.baseAssetPath + modelFile;\n const modelFactory = fullOptions.model === \"v5\" ? models_1.SileroV5.new : models_1.SileroLegacy.new;\n let model;\n try {\n model = await modelFactory(exports.ort, () => (0, default_model_fetcher_1.defaultModelFetcher)(modelURL));\n }\n catch (e) {\n console.error(`Encountered an error while loading model file ${modelURL}`);\n throw e;\n }\n const frameSamples = fullOptions.model === \"v5\" ? 512 : 1536;\n const msPerFrame = frameSamples / 16;\n const frameProcessor = new frame_processor_1.FrameProcessor(model.process, model.reset_state, {\n positiveSpeechThreshold: fullOptions.positiveSpeechThreshold,\n negativeSpeechThreshold: fullOptions.negativeSpeechThreshold,\n redemptionMs: fullOptions.redemptionMs,\n preSpeechPadMs: fullOptions.preSpeechPadMs,\n minSpeechMs: fullOptions.minSpeechMs,\n submitUserSpeechOnPause: fullOptions.submitUserSpeechOnPause,\n }, msPerFrame);\n const audioNodeVAD = new AudioNodeVAD(ctx, fullOptions, frameProcessor, frameSamples, msPerFrame);\n await audioNodeVAD.setupAudioNode();\n return audioNodeVAD;\n }\n constructor(ctx, options, frameProcessor, frameSamples, msPerFrame) {\n this.ctx = ctx;\n this.options = options;\n this.frameSamples = frameSamples;\n this.msPerFrame = msPerFrame;\n this.pause = () => {\n this.frameProcessor.pause(this.handleFrameProcessorEvent);\n };\n this.start = () => {\n this.frameProcessor.resume();\n };\n this.receive = (node) => {\n node.connect(this.audioNode);\n };\n this.processFrame = async (frame) => {\n await this.frameProcessor.process(frame, this.handleFrameProcessorEvent);\n };\n this.handleFrameProcessorEvent = (ev) => {\n switch (ev.msg) {\n case messages_1.Message.FrameProcessed:\n this.options.onFrameProcessed(ev.probs, ev.frame);\n break;\n case messages_1.Message.SpeechStart:\n this.options.onSpeechStart();\n break;\n case messages_1.Message.SpeechRealStart:\n this.options.onSpeechRealStart();\n break;\n case messages_1.Message.VADMisfire:\n this.options.onVADMisfire();\n break;\n case messages_1.Message.SpeechEnd:\n this.options.onSpeechEnd(ev.audio);\n break;\n }\n };\n this.destroy = () => {\n if (this.audioNode instanceof AudioWorkletNode) {\n this.audioNode.port.postMessage({\n message: messages_1.Message.SpeechStop,\n });\n }\n this.audioNode.disconnect();\n this.gainNode?.disconnect();\n };\n this.setFrameProcessorOptions = (options) => {\n this.frameProcessor.options = {\n ...this.frameProcessor.options,\n ...options,\n };\n };\n this.frameProcessor = frameProcessor;\n }\n async setupAudioNode() {\n const hasAudioWorklet = \"audioWorklet\" in this.ctx && typeof AudioWorkletNode === \"function\";\n if (hasAudioWorklet) {\n try {\n const workletURL = this.options.baseAssetPath + workletFile;\n await this.ctx.audioWorklet.addModule(workletURL);\n const workletOptions = this.options.workletOptions ?? {};\n workletOptions.processorOptions = {\n ...(workletOptions.processorOptions ?? {}),\n frameSamples: this.frameSamples,\n };\n this.audioNode = new AudioWorkletNode(this.ctx, \"vad-helper-worklet\", workletOptions);\n this.audioNode.port.onmessage = async (ev) => {\n switch (ev.data?.message) {\n case messages_1.Message.AudioFrame:\n let buffer = ev.data.data;\n if (!(buffer instanceof ArrayBuffer)) {\n buffer = new ArrayBuffer(ev.data.data.byteLength);\n new Uint8Array(buffer).set(new Uint8Array(ev.data.data));\n }\n const frame = new Float32Array(buffer);\n await this.processFrame(frame);\n break;\n }\n };\n return;\n }\n catch (e) {\n console.log(\"AudioWorklet setup failed, falling back to ScriptProcessor\", e);\n }\n }\n // Initialize resampler for ScriptProcessor\n this.resampler = new resampler_1.Resampler({\n nativeSampleRate: this.ctx.sampleRate,\n targetSampleRate: 16000,\n targetFrameSize: this.frameSamples ?? 480,\n });\n // Fallback to ScriptProcessor\n const bufferSize = 4096; // Increased for more stable processing\n this.audioNode = this.ctx.createScriptProcessor(bufferSize, 1, 1);\n // Create a gain node with zero gain to handle the audio chain\n this.gainNode = this.ctx.createGain();\n this.gainNode.gain.value = 0;\n let processingAudio = false;\n this.audioNode.onaudioprocess = async (e) => {\n if (processingAudio)\n return;\n processingAudio = true;\n try {\n const input = e.inputBuffer.getChannelData(0);\n const output = e.outputBuffer.getChannelData(0);\n output.fill(0);\n // Process through resampler\n if (this.resampler) {\n const frames = this.resampler.process(input);\n for (const frame of frames) {\n await this.processFrame(frame);\n }\n }\n }\n catch (error) {\n console.error(\"Error processing audio:\", error);\n }\n finally {\n processingAudio = false;\n }\n };\n // Connect the audio chain\n this.audioNode.connect(this.gainNode);\n this.gainNode.connect(this.ctx.destination);\n }\n}\nexports.AudioNodeVAD = AudioNodeVAD;\n//# sourceMappingURL=real-time-vad.js.map\n\n//# sourceURL=webpack://vad/./dist/real-time-vad.js?");
eval("\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n};\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.AudioNodeVAD = exports.MicVAD = exports.getDefaultRealTimeVADOptions = exports.ort = exports.DEFAULT_MODEL = void 0;\nconst ortInstance = __importStar(__webpack_require__(/*! onnxruntime-web */ \"onnxruntime-web\"));\nconst default_model_fetcher_1 = __webpack_require__(/*! ./default-model-fetcher */ \"./dist/default-model-fetcher.js\");\nconst frame_processor_1 = __webpack_require__(/*! ./frame-processor */ \"./dist/frame-processor.js\");\nconst logging_1 = __webpack_require__(/*! ./logging */ \"./dist/logging.js\");\nconst messages_1 = __webpack_require__(/*! ./messages */ \"./dist/messages.js\");\nconst models_1 = __webpack_require__(/*! ./models */ \"./dist/models/index.js\");\nconst resampler_1 = __webpack_require__(/*! ./resampler */ \"./dist/resampler.js\");\nexports.DEFAULT_MODEL = \"legacy\";\nexports.ort = ortInstance;\nconst workletFile = \"vad.worklet.bundle.min.js\";\nconst sileroV5File = \"silero_vad_v5.onnx\";\nconst sileroLegacyFile = \"silero_vad_legacy.onnx\";\nconst getDefaultRealTimeVADOptions = (model) => {\n return {\n ...frame_processor_1.defaultFrameProcessorOptions,\n onFrameProcessed: (_probabilities, _frame) => { },\n onVADMisfire: () => {\n logging_1.log.debug(\"VAD misfire\");\n },\n onSpeechStart: () => {\n logging_1.log.debug(\"Detected speech start\");\n },\n onSpeechEnd: () => {\n logging_1.log.debug(\"Detected speech end\");\n },\n onSpeechRealStart: () => {\n logging_1.log.debug(\"Detected real speech start\");\n },\n baseAssetPath: \"./\",\n onnxWASMBasePath: \"./\",\n model: model,\n workletOptions: {},\n getStream: async () => {\n return await navigator.mediaDevices.getUserMedia({\n audio: {\n channelCount: 1,\n echoCancellation: true,\n autoGainControl: true,\n noiseSuppression: true,\n },\n });\n },\n pauseStream: async (_stream) => {\n _stream.getTracks().forEach((track) => {\n track.stop();\n });\n },\n resumeStream: async (_stream) => {\n return await navigator.mediaDevices.getUserMedia({\n audio: {\n channelCount: 1,\n echoCancellation: true,\n autoGainControl: true,\n noiseSuppression: true,\n },\n });\n },\n ortConfig: (ort) => {\n ort.env.logLevel = \"error\";\n },\n startOnLoad: true,\n };\n};\nexports.getDefaultRealTimeVADOptions = getDefaultRealTimeVADOptions;\nclass MicVAD {\n static async new(options = {}) {\n const fullOptions = {\n ...(0, exports.getDefaultRealTimeVADOptions)(options.model ?? exports.DEFAULT_MODEL),\n ...options,\n };\n (0, frame_processor_1.validateOptions)(fullOptions);\n const audioContext = new AudioContext();\n const audioNodeVAD = await AudioNodeVAD.new(audioContext, fullOptions);\n const micVad = new MicVAD(fullOptions, audioContext, audioNodeVAD);\n if (fullOptions.startOnLoad) {\n try {\n await micVad.start();\n }\n catch (e) {\n console.error(\"Error starting micVad\", e);\n }\n }\n return micVad;\n }\n constructor(options, audioContext, audioNodeVAD, listening = false) {\n this.options = options;\n this.audioContext = audioContext;\n this.audioNodeVAD = audioNodeVAD;\n this.listening = listening;\n this.initialized = false;\n this.pause = () => {\n if (this.stream) {\n this.options.pauseStream(this.stream);\n }\n this.audioNodeVAD.pause();\n this.listening = false;\n };\n this.resume = async () => {\n if (!this.stream) {\n console.warn(\"Stream not initialized\");\n return;\n }\n this.stream = await this.options.resumeStream(this.stream);\n if (this.sourceNode) {\n this.sourceNode.disconnect();\n }\n this.sourceNode = new MediaStreamAudioSourceNode(this.audioContext, {\n mediaStream: this.stream,\n });\n this.audioNodeVAD.receive(this.sourceNode);\n };\n this.start = async () => {\n if (!this.initialized) {\n this.initialized = true;\n this.stream = await this.options.getStream();\n this.sourceNode = new MediaStreamAudioSourceNode(this.audioContext, {\n mediaStream: this.stream,\n });\n this.audioNodeVAD.receive(this.sourceNode);\n }\n if (!this.stream?.active) {\n await this.resume();\n this.audioNodeVAD.start();\n this.listening = true;\n }\n else {\n this.audioNodeVAD.start();\n this.listening = true;\n }\n };\n this.destroy = () => {\n if (this.listening) {\n this.pause();\n }\n if (this.stream) {\n this.options.pauseStream(this.stream);\n }\n else {\n console.warn(\"Stream not initialized\");\n }\n if (this.sourceNode) {\n this.sourceNode.disconnect();\n }\n else {\n console.warn(\"Source node not initialized\");\n }\n this.audioNodeVAD.destroy();\n this.audioContext.close();\n };\n this.setOptions = (options) => {\n this.audioNodeVAD.setFrameProcessorOptions(options);\n };\n }\n}\nexports.MicVAD = MicVAD;\nclass AudioNodeVAD {\n static async new(ctx, options = {}) {\n const fullOptions = {\n ...(0, exports.getDefaultRealTimeVADOptions)(options.model ?? exports.DEFAULT_MODEL),\n ...options,\n };\n (0, frame_processor_1.validateOptions)(fullOptions);\n exports.ort.env.wasm.wasmPaths = fullOptions.onnxWASMBasePath;\n if (fullOptions.ortConfig !== undefined) {\n fullOptions.ortConfig(exports.ort);\n }\n const modelFile = fullOptions.model === \"v5\" ? sileroV5File : sileroLegacyFile;\n const modelURL = fullOptions.baseAssetPath + modelFile;\n const modelFactory = fullOptions.model === \"v5\" ? models_1.SileroV5.new : models_1.SileroLegacy.new;\n let model;\n try {\n model = await modelFactory(exports.ort, () => (0, default_model_fetcher_1.defaultModelFetcher)(modelURL));\n }\n catch (e) {\n console.error(`Encountered an error while loading model file ${modelURL}`);\n throw e;\n }\n const frameSamples = fullOptions.model === \"v5\" ? 512 : 1536;\n const msPerFrame = frameSamples / 16;\n const frameProcessor = new frame_processor_1.FrameProcessor(model.process, model.reset_state, {\n positiveSpeechThreshold: fullOptions.positiveSpeechThreshold,\n negativeSpeechThreshold: fullOptions.negativeSpeechThreshold,\n redemptionMs: fullOptions.redemptionMs,\n preSpeechPadMs: fullOptions.preSpeechPadMs,\n minSpeechMs: fullOptions.minSpeechMs,\n submitUserSpeechOnPause: fullOptions.submitUserSpeechOnPause,\n }, msPerFrame);\n const audioNodeVAD = new AudioNodeVAD(ctx, fullOptions, frameProcessor, frameSamples, msPerFrame);\n await audioNodeVAD.setupAudioNode();\n return audioNodeVAD;\n }\n constructor(ctx, options, frameProcessor, frameSamples, msPerFrame) {\n this.ctx = ctx;\n this.options = options;\n this.frameSamples = frameSamples;\n this.msPerFrame = msPerFrame;\n this.pause = () => {\n this.frameProcessor.pause(this.handleFrameProcessorEvent);\n };\n this.start = () => {\n this.frameProcessor.resume();\n };\n this.receive = (node) => {\n node.connect(this.audioNode);\n };\n this.processFrame = async (frame) => {\n await this.frameProcessor.process(frame, this.handleFrameProcessorEvent);\n };\n this.handleFrameProcessorEvent = (ev) => {\n switch (ev.msg) {\n case messages_1.Message.FrameProcessed:\n this.options.onFrameProcessed(ev.probs, ev.frame);\n break;\n case messages_1.Message.SpeechStart:\n this.options.onSpeechStart();\n break;\n case messages_1.Message.SpeechRealStart:\n this.options.onSpeechRealStart();\n break;\n case messages_1.Message.VADMisfire:\n this.options.onVADMisfire();\n break;\n case messages_1.Message.SpeechEnd:\n this.options.onSpeechEnd(ev.audio);\n break;\n }\n };\n this.destroy = () => {\n if (this.audioNode instanceof AudioWorkletNode) {\n this.audioNode.port.postMessage({\n message: messages_1.Message.SpeechStop,\n });\n }\n this.audioNode.disconnect();\n this.gainNode?.disconnect();\n };\n this.setFrameProcessorOptions = (options) => {\n this.frameProcessor.options = {\n ...this.frameProcessor.options,\n ...options,\n };\n };\n this.frameProcessor = frameProcessor;\n }\n async setupAudioNode() {\n const hasAudioWorklet = \"audioWorklet\" in this.ctx && typeof AudioWorkletNode === \"function\";\n if (hasAudioWorklet) {\n try {\n const workletURL = this.options.baseAssetPath + workletFile;\n await this.ctx.audioWorklet.addModule(workletURL);\n const workletOptions = this.options.workletOptions ?? {};\n workletOptions.processorOptions = {\n ...(workletOptions.processorOptions ?? {}),\n frameSamples: this.frameSamples,\n };\n this.audioNode = new AudioWorkletNode(this.ctx, \"vad-helper-worklet\", workletOptions);\n this.audioNode.port.onmessage = async (ev) => {\n switch (ev.data?.message) {\n case messages_1.Message.AudioFrame:\n let buffer = ev.data.data;\n if (!(buffer instanceof ArrayBuffer)) {\n buffer = new ArrayBuffer(ev.data.data.byteLength);\n new Uint8Array(buffer).set(new Uint8Array(ev.data.data));\n }\n const frame = new Float32Array(buffer);\n await this.processFrame(frame);\n break;\n }\n };\n return;\n }\n catch (e) {\n console.log(\"AudioWorklet setup failed, falling back to ScriptProcessor\", e);\n }\n }\n // Initialize resampler for ScriptProcessor\n this.resampler = new resampler_1.Resampler({\n nativeSampleRate: this.ctx.sampleRate,\n targetSampleRate: 16000,\n targetFrameSize: this.frameSamples ?? 480,\n });\n // Fallback to ScriptProcessor\n const bufferSize = 4096; // Increased for more stable processing\n this.audioNode = this.ctx.createScriptProcessor(bufferSize, 1, 1);\n // Create a gain node with zero gain to handle the audio chain\n this.gainNode = this.ctx.createGain();\n this.gainNode.gain.value = 0;\n let processingAudio = false;\n this.audioNode.onaudioprocess = async (e) => {\n if (processingAudio)\n return;\n processingAudio = true;\n try {\n const input = e.inputBuffer.getChannelData(0);\n const output = e.outputBuffer.getChannelData(0);\n output.fill(0);\n // Process through resampler\n if (this.resampler) {\n const frames = this.resampler.process(input);\n for (const frame of frames) {\n await this.processFrame(frame);\n }\n }\n }\n catch (error) {\n console.error(\"Error processing audio:\", error);\n }\n finally {\n processingAudio = false;\n }\n };\n // Connect the audio chain\n this.audioNode.connect(this.gainNode);\n this.gainNode.connect(this.ctx.destination);\n }\n}\nexports.AudioNodeVAD = AudioNodeVAD;\n//# sourceMappingURL=real-time-vad.js.map\n\n//# sourceURL=webpack://vad/./dist/real-time-vad.js?");

@@ -143,0 +143,0 @@ /***/ }),

@@ -1,1 +0,1 @@

!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("onnxruntime-web")):"function"==typeof define&&define.amd?define(["onnxruntime-web"],t):"object"==typeof exports?exports.vad=t(require("onnxruntime-web")):e.vad=t(e.ort)}(self,(e=>(()=>{"use strict";var t={485:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.baseAssetPath=void 0;const s="undefined"!=typeof window&&void 0!==window.document?window.document.currentScript:null;let r="/";s&&(r=s.src.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/")),t.baseAssetPath=r},973:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.defaultModelFetcher=void 0,t.defaultModelFetcher=e=>fetch(e).then((e=>e.arrayBuffer()))},362:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FrameProcessor=t.validateOptions=t.defaultFrameProcessorOptions=void 0;const r=s(710),o=s(954);t.defaultFrameProcessorOptions={positiveSpeechThreshold:.3,negativeSpeechThreshold:.25,preSpeechPadMs:800,redemptionMs:1400,minSpeechMs:400,submitUserSpeechOnPause:!1},t.validateOptions=function(e){(e.positiveSpeechThreshold<0||e.positiveSpeechThreshold>1)&&r.log.error("positiveSpeechThreshold should be a number between 0 and 1"),(e.negativeSpeechThreshold<0||e.negativeSpeechThreshold>e.positiveSpeechThreshold)&&r.log.error("negativeSpeechThreshold should be between 0 and positiveSpeechThreshold"),e.preSpeechPadMs<0&&r.log.error("preSpeechPadMs should be positive"),e.redemptionMs<0&&r.log.error("redemptionMs should be positive"),e.minSpeechMs<0&&r.log.error("minSpeechMs should be positive")};const i=e=>{const t=e.reduce(((e,t)=>(e.push(e.at(-1)+t.length),e)),[0]),s=new Float32Array(t.at(-1));return e.forEach(((e,r)=>{const o=t[r];s.set(e,o)})),s};t.FrameProcessor=class{constructor(e,t,s,r){this.modelProcessFunc=e,this.modelResetFunc=t,this.options=s,this.msPerFrame=r,this.speaking=!1,this.redemptionCounter=0,this.speechFrameCount=0,this.active=!1,this.speechRealStartFired=!1,this.reset=()=>{this.speaking=!1,this.speechRealStartFired=!1,this.audioBuffer=[],this.modelResetFunc(),this.redemptionCounter=0,this.speechFrameCount=0},this.pause=e=>{this.active=!1,this.options.submitUserSpeechOnPause?this.endSegment(e):this.reset()},this.resume=()=>{this.active=!0},this.endSegment=e=>{const t=this.audioBuffer;this.audioBuffer=[];const s=this.speaking;if(this.reset(),s)if(t.reduce(((e,t)=>t.isSpeech?e+1:e),0)>=this.minSpeechFrames){const s=i(t.map((e=>e.frame)));e({msg:o.Message.SpeechEnd,audio:s})}else e({msg:o.Message.VADMisfire});return{}},this.process=async(e,t)=>{if(!this.active)return;const s=await this.modelProcessFunc(e),r=s.isSpeech>=this.options.positiveSpeechThreshold;if(t({probs:s,msg:o.Message.FrameProcessed,frame:e}),this.audioBuffer.push({frame:e,isSpeech:r}),r&&(this.speechFrameCount++,this.redemptionCounter=0),r&&!this.speaking&&(this.speaking=!0,t({msg:o.Message.SpeechStart})),this.speaking&&this.speechFrameCount===this.minSpeechFrames&&!this.speechRealStartFired&&(this.speechRealStartFired=!0,t({msg:o.Message.SpeechRealStart})),s.isSpeech<this.options.negativeSpeechThreshold&&this.speaking&&++this.redemptionCounter>=this.redemptionFrames){this.redemptionCounter=0,this.speechFrameCount=0,this.speaking=!1,this.speechRealStartFired=!1;const e=this.audioBuffer;if(this.audioBuffer=[],e.reduce(((e,t)=>t.isSpeech?e+1:e),0)>=this.minSpeechFrames){const s=i(e.map((e=>e.frame)));t({msg:o.Message.SpeechEnd,audio:s})}else t({msg:o.Message.VADMisfire})}if(!this.speaking){for(;this.audioBuffer.length>this.preSpeechPadFrames;)this.audioBuffer.shift();this.speechFrameCount=0}},this.audioBuffer=[],this.redemptionFrames=Math.floor(s.redemptionMs/this.msPerFrame),this.preSpeechPadFrames=Math.floor(s.preSpeechPadMs/this.msPerFrame),this.minSpeechFrames=Math.floor(s.minSpeechMs/this.msPerFrame),this.reset()}}},710:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.log=t.LOG_PREFIX=void 0,t.LOG_PREFIX="[VAD]";const s=["error","debug","warn"].reduce(((e,s)=>(e[s]=function(e){return(...s)=>{console[e](t.LOG_PREFIX,...s)}}(s),e)),{});t.log=s},954:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.Message=void 0,function(e){e.AudioFrame="AUDIO_FRAME",e.SpeechStart="SPEECH_START",e.VADMisfire="VAD_MISFIRE",e.SpeechEnd="SPEECH_END",e.SpeechStop="SPEECH_STOP",e.SpeechRealStart="SPEECH_REAL_START",e.FrameProcessed="FRAME_PROCESSED"}(s||(t.Message=s={}))},650:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},559:function(e,t,s){var r=this&&this.__createBinding||(Object.create?function(e,t,s,r){void 0===r&&(r=s);var o=Object.getOwnPropertyDescriptor(t,s);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,r,o)}:function(e,t,s,r){void 0===r&&(r=s),e[r]=t[s]}),o=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||r(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),t.SileroV5=t.SileroLegacy=void 0,o(s(650),t);var i=s(143);Object.defineProperty(t,"SileroLegacy",{enumerable:!0,get:function(){return i.SileroLegacy}});var a=s(508);Object.defineProperty(t,"SileroV5",{enumerable:!0,get:function(){return a.SileroV5}})},143:(e,t,s)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.SileroLegacy=void 0;const o=s(710);class i{constructor(e,t,s,r,o){this.ortInstance=e,this._session=t,this._h=s,this._c=r,this._sr=o,this.reset_state=()=>{const e=Array(128).fill(0);this._h=new this.ortInstance.Tensor("float32",e,[2,1,64]),this._c=new this.ortInstance.Tensor("float32",e,[2,1,64])},this.process=async e=>{const t={input:new this.ortInstance.Tensor("float32",e,[1,e.length]),h:this._h,c:this._c,sr:this._sr},s=await this._session.run(t);this._h=s.hn,this._c=s.cn;const[r]=s.output?.data;return{notSpeech:1-r,isSpeech:r}}}}t.SileroLegacy=i,r=i,i.new=async(e,t)=>{o.log.debug("initializing vad");const s=await t(),i=await e.InferenceSession.create(s),a=new e.Tensor("int64",[16000n]),n=Array(128).fill(0),c=new e.Tensor("float32",n,[2,1,64]),h=new e.Tensor("float32",n,[2,1,64]);return o.log.debug("vad is initialized"),new r(e,i,c,h,a)}},508:(e,t,s)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.SileroV5=void 0;const o=s(710);function i(e){const t=Array(256).fill(0);return new e.Tensor("float32",t,[2,1,128])}class a{constructor(e,t,s,r){this._session=e,this._state=t,this._sr=s,this.ortInstance=r,this.reset_state=()=>{this._state=i(this.ortInstance)},this.process=async e=>{const t={input:new this.ortInstance.Tensor("float32",e,[1,e.length]),state:this._state,sr:this._sr},s=await this._session.run(t);this._state=s.stateN;const[r]=s.output?.data;return{notSpeech:1-r,isSpeech:r}}}}t.SileroV5=a,r=a,a.new=async(e,t)=>{o.log.debug("Loading VAD..."),o.log.debug("ort loglevel set to",e.env.logLevel);const s=await t(),a=await e.InferenceSession.create(s),n=new e.Tensor("int64",[16000n]),c=i(e);return o.log.debug("...finished loading VAD"),new r(a,c,n,e)}},202:function(e,t,s){var r=this&&this.__createBinding||(Object.create?function(e,t,s,r){void 0===r&&(r=s);var o=Object.getOwnPropertyDescriptor(t,s);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,r,o)}:function(e,t,s,r){void 0===r&&(r=s),e[r]=t[s]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return o(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.NonRealTimeVAD=t.defaultNonRealTimeVADOptions=void 0;const a=i(s(656)),n=s(485),c=s(973),h=s(362),u=s(954),d=s(559),l=s(825);t.defaultNonRealTimeVADOptions={...h.defaultFrameProcessorOptions,modelURL:n.baseAssetPath+"silero_vad_legacy.onnx",modelFetcher:c.defaultModelFetcher},t.NonRealTimeVAD=class{static async new(e={}){const s={...t.defaultNonRealTimeVADOptions,...e};(0,h.validateOptions)(s),void 0!==s.ortConfig&&s.ortConfig(a);const r=()=>s.modelFetcher(s.modelURL),o=await d.SileroLegacy.new(a,r),i=new h.FrameProcessor(o.process,o.reset_state,{positiveSpeechThreshold:s.positiveSpeechThreshold,negativeSpeechThreshold:s.negativeSpeechThreshold,redemptionMs:s.redemptionMs,preSpeechPadMs:s.preSpeechPadMs,minSpeechMs:s.minSpeechMs,submitUserSpeechOnPause:s.submitUserSpeechOnPause},96);return i.resume(),new this(r,a,s,i)}constructor(e,t,s,r){this.modelFetcher=e,this.ort=t,this.options=s,this.frameProcessor=r,this.frameSamples=1536}async*run(e,t){const s={nativeSampleRate:t,targetSampleRate:16e3,targetFrameSize:this.frameSamples},r=new l.Resampler(s);let o=0,i=0,a=0;for await(const t of r.stream(e)){const e=[];await this.frameProcessor.process(t,(t=>{e.push(t)}));for(const t of e)switch(t.msg){case u.Message.SpeechStart:o=a*this.frameSamples/16;break;case u.Message.SpeechEnd:i=(a+1)*this.frameSamples/16,yield{audio:t.audio,start:o,end:i}}a++}const n=[];this.frameProcessor.endSegment((e=>{n.push(e)}));for(const e of n)e.msg===u.Message.SpeechEnd&&(yield{audio:e.audio,start:o,end:a*this.frameSamples/16})}}},746:function(e,t,s){var r=this&&this.__createBinding||(Object.create?function(e,t,s,r){void 0===r&&(r=s);var o=Object.getOwnPropertyDescriptor(t,s);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,r,o)}:function(e,t,s,r){void 0===r&&(r=s),e[r]=t[s]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return o(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.AudioNodeVAD=t.MicVAD=t.getDefaultRealTimeVADOptions=t.ort=t.DEFAULT_MODEL=void 0;const a=i(s(656)),n=s(973),c=s(362),h=s(710),u=s(954),d=s(559),l=s(825);t.DEFAULT_MODEL="legacy",t.ort=a,t.getDefaultRealTimeVADOptions=e=>({...c.defaultFrameProcessorOptions,onFrameProcessed:(e,t)=>{},onVADMisfire:()=>{h.log.debug("VAD misfire")},onSpeechStart:()=>{h.log.debug("Detected speech start")},onSpeechEnd:()=>{h.log.debug("Detected speech end")},onSpeechRealStart:()=>{h.log.debug("Detected real speech start")},baseAssetPath:"./",onnxWASMBasePath:"./",model:e,workletOptions:{},getStream:async()=>await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:!0,autoGainControl:!0,noiseSuppression:!0}}),pauseStream:async e=>{e.getTracks().forEach((e=>{e.stop()}))},resumeStream:async e=>await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:!0,autoGainControl:!0,noiseSuppression:!0}}),ortConfig:e=>{e.env.logLevel="error"}});class p{static async new(e={}){const s={...(0,t.getDefaultRealTimeVADOptions)(e.model??t.DEFAULT_MODEL),...e};(0,c.validateOptions)(s);const r=await s.getStream(),o=new AudioContext,i=new MediaStreamAudioSourceNode(o,{mediaStream:r}),a=await f.new(o,s);return a.receive(i),new p(s,o,r,a,i)}constructor(e,t,s,r,o,i=!1){this.options=e,this.audioContext=t,this.stream=s,this.audioNodeVAD=r,this.sourceNode=o,this.listening=i,this.pause=()=>{this.options.pauseStream(this.stream),this.audioNodeVAD.pause(),this.listening=!1},this.resume=async()=>{this.stream=await this.options.resumeStream(this.stream),this.sourceNode=new MediaStreamAudioSourceNode(this.audioContext,{mediaStream:this.stream}),this.audioNodeVAD.receive(this.sourceNode)},this.start=async()=>{this.stream.active?(this.audioNodeVAD.start(),this.listening=!0):(await this.resume(),this.audioNodeVAD.start(),this.listening=!0)},this.destroy=()=>{this.listening&&this.pause(),this.options.pauseStream(this.stream),this.sourceNode.disconnect(),this.audioNodeVAD.destroy(),this.audioContext.close()},this.setOptions=e=>{this.audioNodeVAD.setFrameProcessorOptions(e)}}}t.MicVAD=p;class f{static async new(e,s={}){const r={...(0,t.getDefaultRealTimeVADOptions)(s.model??t.DEFAULT_MODEL),...s};(0,c.validateOptions)(r),t.ort.env.wasm.wasmPaths=r.onnxWASMBasePath,void 0!==r.ortConfig&&r.ortConfig(t.ort);const o="v5"===r.model?"silero_vad_v5.onnx":"silero_vad_legacy.onnx",i=r.baseAssetPath+o,a="v5"===r.model?d.SileroV5.new:d.SileroLegacy.new;let h;try{h=await a(t.ort,(()=>(0,n.defaultModelFetcher)(i)))}catch(e){throw console.error(`Encountered an error while loading model file ${i}`),e}const u="v5"===r.model?512:1536,l=u/16,p=new c.FrameProcessor(h.process,h.reset_state,{positiveSpeechThreshold:r.positiveSpeechThreshold,negativeSpeechThreshold:r.negativeSpeechThreshold,redemptionMs:r.redemptionMs,preSpeechPadMs:r.preSpeechPadMs,minSpeechMs:r.minSpeechMs,submitUserSpeechOnPause:r.submitUserSpeechOnPause},l),m=new f(e,r,p,u,l);return await m.setupAudioNode(),m}constructor(e,t,s,r,o){this.ctx=e,this.options=t,this.frameSamples=r,this.msPerFrame=o,this.pause=()=>{this.frameProcessor.pause(this.handleFrameProcessorEvent)},this.start=()=>{this.frameProcessor.resume()},this.receive=e=>{e.connect(this.audioNode)},this.processFrame=async e=>{await this.frameProcessor.process(e,this.handleFrameProcessorEvent)},this.handleFrameProcessorEvent=e=>{switch(e.msg){case u.Message.FrameProcessed:this.options.onFrameProcessed(e.probs,e.frame);break;case u.Message.SpeechStart:this.options.onSpeechStart();break;case u.Message.SpeechRealStart:this.options.onSpeechRealStart();break;case u.Message.VADMisfire:this.options.onVADMisfire();break;case u.Message.SpeechEnd:this.options.onSpeechEnd(e.audio)}},this.destroy=()=>{this.audioNode instanceof AudioWorkletNode&&this.audioNode.port.postMessage({message:u.Message.SpeechStop}),this.audioNode.disconnect(),this.gainNode?.disconnect()},this.setFrameProcessorOptions=e=>{this.frameProcessor.options={...this.frameProcessor.options,...e}},this.frameProcessor=s}async setupAudioNode(){if("audioWorklet"in this.ctx&&"function"==typeof AudioWorkletNode)try{const e=this.options.baseAssetPath+"vad.worklet.bundle.min.js";await this.ctx.audioWorklet.addModule(e);const t=this.options.workletOptions??{};return t.processorOptions={...t.processorOptions??{},frameSamples:this.frameSamples},this.audioNode=new AudioWorkletNode(this.ctx,"vad-helper-worklet",t),void(this.audioNode.port.onmessage=async e=>{if(e.data?.message===u.Message.AudioFrame){let t=e.data.data;t instanceof ArrayBuffer||(t=new ArrayBuffer(e.data.data.byteLength),new Uint8Array(t).set(new Uint8Array(e.data.data)));const s=new Float32Array(t);await this.processFrame(s)}})}catch(e){console.log("AudioWorklet setup failed, falling back to ScriptProcessor",e)}this.resampler=new l.Resampler({nativeSampleRate:this.ctx.sampleRate,targetSampleRate:16e3,targetFrameSize:this.frameSamples??480}),this.audioNode=this.ctx.createScriptProcessor(4096,1,1),this.gainNode=this.ctx.createGain(),this.gainNode.gain.value=0;let e=!1;this.audioNode.onaudioprocess=async t=>{if(!e){e=!0;try{const e=t.inputBuffer.getChannelData(0);if(t.outputBuffer.getChannelData(0).fill(0),this.resampler){const t=this.resampler.process(e);for(const e of t)await this.processFrame(e)}}catch(e){console.error("Error processing audio:",e)}finally{e=!1}}},this.audioNode.connect(this.gainNode),this.gainNode.connect(this.ctx.destination)}}t.AudioNodeVAD=f},825:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Resampler=void 0;const r=s(710);t.Resampler=class{constructor(e){this.options=e,this.process=e=>{const t=[];for(const s of e)for(this.inputBuffer.push(s);this.hasEnoughDataForFrame();){const e=this.generateOutputFrame();t.push(e)}return t},e.nativeSampleRate<16e3&&r.log.error("nativeSampleRate is too low. Should have 16000 = targetSampleRate <= nativeSampleRate"),this.inputBuffer=[]}async*stream(e){for(const t of e)for(this.inputBuffer.push(t);this.hasEnoughDataForFrame();){const e=this.generateOutputFrame();yield e}}hasEnoughDataForFrame(){return this.inputBuffer.length*this.options.targetSampleRate/this.options.nativeSampleRate>=this.options.targetFrameSize}generateOutputFrame(){const e=new Float32Array(this.options.targetFrameSize);let t=0,s=0;for(;t<this.options.targetFrameSize;){let r=0,o=0;for(;s<Math.min(this.inputBuffer.length,(t+1)*this.options.nativeSampleRate/this.options.targetSampleRate);){const e=this.inputBuffer[s];void 0!==e&&(r+=e,o++),s++}e[t]=r/o,t++}return this.inputBuffer=this.inputBuffer.slice(s),e}}},787:(e,t)=>{function s(e,t,s){for(var r=0;r<s.length;r++)e.setUint8(t+r,s.charCodeAt(r))}Object.defineProperty(t,"__esModule",{value:!0}),t.audioFileToArray=t.encodeWAV=t.arrayBufferToBase64=t.minFramesForTargetMS=void 0,t.minFramesForTargetMS=function(e,t,s=16e3){return Math.ceil(e*s/1e3/t)},t.arrayBufferToBase64=function(e){const t=new Uint8Array(e),s=t.byteLength,r=new Array(s);for(var o=0;o<s;o++){const e=t[o];if(void 0===e)break;r[o]=String.fromCharCode(e)}return btoa(r.join(""))},t.encodeWAV=function(e,t=3,r=16e3,o=1,i=32){var a=i/8,n=o*a,c=new ArrayBuffer(44+e.length*a),h=new DataView(c);return s(h,0,"RIFF"),h.setUint32(4,36+e.length*a,!0),s(h,8,"WAVE"),s(h,12,"fmt "),h.setUint32(16,16,!0),h.setUint16(20,t,!0),h.setUint16(22,o,!0),h.setUint32(24,r,!0),h.setUint32(28,r*n,!0),h.setUint16(32,n,!0),h.setUint16(34,i,!0),s(h,36,"data"),h.setUint32(40,e.length*a,!0),1===t?function(e,t,s){for(var r=0;r<s.length;r++,t+=2){var o=Math.max(-1,Math.min(1,s[r]));e.setInt16(t,o<0?32768*o:32767*o,!0)}}(h,44,e):function(e,t,s){for(var r=0;r<s.length;r++,t+=4)e.setFloat32(t,s[r],!0)}(h,44,e),c},t.audioFileToArray=async function(e){const t=new OfflineAudioContext(1,1,44100),s=new FileReader;let r=null;if(await new Promise((o=>{s.addEventListener("loadend",(e=>{const i=s.result;t.decodeAudioData(i,(e=>{r=e,t.startRendering().then((e=>{console.log("Rendering completed successfully"),o()})).catch((e=>{console.error(`Rendering failed: ${e}`)}))}),(e=>{console.log(`Error with decoding audio data: ${e}`)}))})),s.readAsArrayBuffer(e)})),null===r)throw Error("some shit");let o=r,i=new Float32Array(o.length);for(let e=0;e<o.length;e++)for(let t=0;t<o.numberOfChannels;t++)i[e]+=o.getChannelData(t)[e];return{audio:i,sampleRate:o.sampleRate}}},656:t=>{t.exports=e}},s={};function r(e){var o=s[e];if(void 0!==o)return o.exports;var i=s[e]={exports:{}};return t[e].call(i.exports,i,i.exports,r),i.exports}var o={};return(()=>{var e=o;Object.defineProperty(e,"__esModule",{value:!0}),e.getDefaultRealTimeVADOptions=e.MicVAD=e.DEFAULT_MODEL=e.AudioNodeVAD=e.utils=e.NonRealTimeVAD=e.Message=e.FrameProcessor=e.defaultModelFetcher=e.baseAssetPath=void 0;var t=r(485);Object.defineProperty(e,"baseAssetPath",{enumerable:!0,get:function(){return t.baseAssetPath}});var s=r(973);Object.defineProperty(e,"defaultModelFetcher",{enumerable:!0,get:function(){return s.defaultModelFetcher}});var i=r(362);Object.defineProperty(e,"FrameProcessor",{enumerable:!0,get:function(){return i.FrameProcessor}});var a=r(954);Object.defineProperty(e,"Message",{enumerable:!0,get:function(){return a.Message}});var n=r(202);Object.defineProperty(e,"NonRealTimeVAD",{enumerable:!0,get:function(){return n.NonRealTimeVAD}});const c=r(787);e.utils={audioFileToArray:c.audioFileToArray,minFramesForTargetMS:c.minFramesForTargetMS,arrayBufferToBase64:c.arrayBufferToBase64,encodeWAV:c.encodeWAV};var h=r(746);Object.defineProperty(e,"AudioNodeVAD",{enumerable:!0,get:function(){return h.AudioNodeVAD}}),Object.defineProperty(e,"DEFAULT_MODEL",{enumerable:!0,get:function(){return h.DEFAULT_MODEL}}),Object.defineProperty(e,"MicVAD",{enumerable:!0,get:function(){return h.MicVAD}}),Object.defineProperty(e,"getDefaultRealTimeVADOptions",{enumerable:!0,get:function(){return h.getDefaultRealTimeVADOptions}})})(),o})()));
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("onnxruntime-web")):"function"==typeof define&&define.amd?define(["onnxruntime-web"],t):"object"==typeof exports?exports.vad=t(require("onnxruntime-web")):e.vad=t(e.ort)}(self,(e=>(()=>{"use strict";var t={485:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.baseAssetPath=void 0;const s="undefined"!=typeof window&&void 0!==window.document?window.document.currentScript:null;let r="/";s&&(r=s.src.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/")),t.baseAssetPath=r},973:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.defaultModelFetcher=void 0,t.defaultModelFetcher=e=>fetch(e).then((e=>e.arrayBuffer()))},362:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FrameProcessor=t.validateOptions=t.defaultFrameProcessorOptions=void 0;const r=s(710),o=s(954);t.defaultFrameProcessorOptions={positiveSpeechThreshold:.3,negativeSpeechThreshold:.25,preSpeechPadMs:800,redemptionMs:1400,minSpeechMs:400,submitUserSpeechOnPause:!1},t.validateOptions=function(e){(e.positiveSpeechThreshold<0||e.positiveSpeechThreshold>1)&&r.log.error("positiveSpeechThreshold should be a number between 0 and 1"),(e.negativeSpeechThreshold<0||e.negativeSpeechThreshold>e.positiveSpeechThreshold)&&r.log.error("negativeSpeechThreshold should be between 0 and positiveSpeechThreshold"),e.preSpeechPadMs<0&&r.log.error("preSpeechPadMs should be positive"),e.redemptionMs<0&&r.log.error("redemptionMs should be positive"),e.minSpeechMs<0&&r.log.error("minSpeechMs should be positive")};const i=e=>{const t=e.reduce(((e,t)=>(e.push(e.at(-1)+t.length),e)),[0]),s=new Float32Array(t.at(-1));return e.forEach(((e,r)=>{const o=t[r];s.set(e,o)})),s};t.FrameProcessor=class{constructor(e,t,s,r){this.modelProcessFunc=e,this.modelResetFunc=t,this.options=s,this.msPerFrame=r,this.speaking=!1,this.redemptionCounter=0,this.speechFrameCount=0,this.active=!1,this.speechRealStartFired=!1,this.reset=()=>{this.speaking=!1,this.speechRealStartFired=!1,this.audioBuffer=[],this.modelResetFunc(),this.redemptionCounter=0,this.speechFrameCount=0},this.pause=e=>{this.active=!1,this.options.submitUserSpeechOnPause?this.endSegment(e):this.reset()},this.resume=()=>{this.active=!0},this.endSegment=e=>{const t=this.audioBuffer;this.audioBuffer=[];const s=this.speaking;if(this.reset(),s)if(t.reduce(((e,t)=>t.isSpeech?e+1:e),0)>=this.minSpeechFrames){const s=i(t.map((e=>e.frame)));e({msg:o.Message.SpeechEnd,audio:s})}else e({msg:o.Message.VADMisfire});return{}},this.process=async(e,t)=>{if(!this.active)return;const s=await this.modelProcessFunc(e),r=s.isSpeech>=this.options.positiveSpeechThreshold;if(t({probs:s,msg:o.Message.FrameProcessed,frame:e}),this.audioBuffer.push({frame:e,isSpeech:r}),r&&(this.speechFrameCount++,this.redemptionCounter=0),r&&!this.speaking&&(this.speaking=!0,t({msg:o.Message.SpeechStart})),this.speaking&&this.speechFrameCount===this.minSpeechFrames&&!this.speechRealStartFired&&(this.speechRealStartFired=!0,t({msg:o.Message.SpeechRealStart})),s.isSpeech<this.options.negativeSpeechThreshold&&this.speaking&&++this.redemptionCounter>=this.redemptionFrames){this.redemptionCounter=0,this.speechFrameCount=0,this.speaking=!1,this.speechRealStartFired=!1;const e=this.audioBuffer;if(this.audioBuffer=[],e.reduce(((e,t)=>t.isSpeech?e+1:e),0)>=this.minSpeechFrames){const s=i(e.map((e=>e.frame)));t({msg:o.Message.SpeechEnd,audio:s})}else t({msg:o.Message.VADMisfire})}if(!this.speaking){for(;this.audioBuffer.length>this.preSpeechPadFrames;)this.audioBuffer.shift();this.speechFrameCount=0}},this.audioBuffer=[],this.redemptionFrames=Math.floor(s.redemptionMs/this.msPerFrame),this.preSpeechPadFrames=Math.floor(s.preSpeechPadMs/this.msPerFrame),this.minSpeechFrames=Math.floor(s.minSpeechMs/this.msPerFrame),this.reset()}}},710:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.log=t.LOG_PREFIX=void 0,t.LOG_PREFIX="[VAD]";const s=["error","debug","warn"].reduce(((e,s)=>(e[s]=function(e){return(...s)=>{console[e](t.LOG_PREFIX,...s)}}(s),e)),{});t.log=s},954:(e,t)=>{var s;Object.defineProperty(t,"__esModule",{value:!0}),t.Message=void 0,function(e){e.AudioFrame="AUDIO_FRAME",e.SpeechStart="SPEECH_START",e.VADMisfire="VAD_MISFIRE",e.SpeechEnd="SPEECH_END",e.SpeechStop="SPEECH_STOP",e.SpeechRealStart="SPEECH_REAL_START",e.FrameProcessed="FRAME_PROCESSED"}(s||(t.Message=s={}))},650:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0})},559:function(e,t,s){var r=this&&this.__createBinding||(Object.create?function(e,t,s,r){void 0===r&&(r=s);var o=Object.getOwnPropertyDescriptor(t,s);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,r,o)}:function(e,t,s,r){void 0===r&&(r=s),e[r]=t[s]}),o=this&&this.__exportStar||function(e,t){for(var s in e)"default"===s||Object.prototype.hasOwnProperty.call(t,s)||r(t,e,s)};Object.defineProperty(t,"__esModule",{value:!0}),t.SileroV5=t.SileroLegacy=void 0,o(s(650),t);var i=s(143);Object.defineProperty(t,"SileroLegacy",{enumerable:!0,get:function(){return i.SileroLegacy}});var a=s(508);Object.defineProperty(t,"SileroV5",{enumerable:!0,get:function(){return a.SileroV5}})},143:(e,t,s)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.SileroLegacy=void 0;const o=s(710);class i{constructor(e,t,s,r,o){this.ortInstance=e,this._session=t,this._h=s,this._c=r,this._sr=o,this.reset_state=()=>{const e=Array(128).fill(0);this._h=new this.ortInstance.Tensor("float32",e,[2,1,64]),this._c=new this.ortInstance.Tensor("float32",e,[2,1,64])},this.process=async e=>{const t={input:new this.ortInstance.Tensor("float32",e,[1,e.length]),h:this._h,c:this._c,sr:this._sr},s=await this._session.run(t);this._h=s.hn,this._c=s.cn;const[r]=s.output?.data;return{notSpeech:1-r,isSpeech:r}}}}t.SileroLegacy=i,r=i,i.new=async(e,t)=>{o.log.debug("initializing vad");const s=await t(),i=await e.InferenceSession.create(s),a=new e.Tensor("int64",[16000n]),n=Array(128).fill(0),c=new e.Tensor("float32",n,[2,1,64]),h=new e.Tensor("float32",n,[2,1,64]);return o.log.debug("vad is initialized"),new r(e,i,c,h,a)}},508:(e,t,s)=>{var r;Object.defineProperty(t,"__esModule",{value:!0}),t.SileroV5=void 0;const o=s(710);function i(e){const t=Array(256).fill(0);return new e.Tensor("float32",t,[2,1,128])}class a{constructor(e,t,s,r){this._session=e,this._state=t,this._sr=s,this.ortInstance=r,this.reset_state=()=>{this._state=i(this.ortInstance)},this.process=async e=>{const t={input:new this.ortInstance.Tensor("float32",e,[1,e.length]),state:this._state,sr:this._sr},s=await this._session.run(t);this._state=s.stateN;const[r]=s.output?.data;return{notSpeech:1-r,isSpeech:r}}}}t.SileroV5=a,r=a,a.new=async(e,t)=>{o.log.debug("Loading VAD...");const s=await t(),a=await e.InferenceSession.create(s),n=new e.Tensor("int64",[16000n]),c=i(e);return o.log.debug("...finished loading VAD"),new r(a,c,n,e)}},202:function(e,t,s){var r=this&&this.__createBinding||(Object.create?function(e,t,s,r){void 0===r&&(r=s);var o=Object.getOwnPropertyDescriptor(t,s);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,r,o)}:function(e,t,s,r){void 0===r&&(r=s),e[r]=t[s]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return o(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.NonRealTimeVAD=t.defaultNonRealTimeVADOptions=void 0;const a=i(s(656)),n=s(485),c=s(973),h=s(362),d=s(954),u=s(559),l=s(825);t.defaultNonRealTimeVADOptions={...h.defaultFrameProcessorOptions,modelURL:n.baseAssetPath+"silero_vad_legacy.onnx",modelFetcher:c.defaultModelFetcher},t.NonRealTimeVAD=class{static async new(e={}){const s={...t.defaultNonRealTimeVADOptions,...e};(0,h.validateOptions)(s),void 0!==s.ortConfig&&s.ortConfig(a);const r=()=>s.modelFetcher(s.modelURL),o=await u.SileroLegacy.new(a,r),i=new h.FrameProcessor(o.process,o.reset_state,{positiveSpeechThreshold:s.positiveSpeechThreshold,negativeSpeechThreshold:s.negativeSpeechThreshold,redemptionMs:s.redemptionMs,preSpeechPadMs:s.preSpeechPadMs,minSpeechMs:s.minSpeechMs,submitUserSpeechOnPause:s.submitUserSpeechOnPause},96);return i.resume(),new this(r,a,s,i)}constructor(e,t,s,r){this.modelFetcher=e,this.ort=t,this.options=s,this.frameProcessor=r,this.frameSamples=1536}async*run(e,t){const s={nativeSampleRate:t,targetSampleRate:16e3,targetFrameSize:this.frameSamples},r=new l.Resampler(s);let o=0,i=0,a=0;for await(const t of r.stream(e)){const e=[];await this.frameProcessor.process(t,(t=>{e.push(t)}));for(const t of e)switch(t.msg){case d.Message.SpeechStart:o=a*this.frameSamples/16;break;case d.Message.SpeechEnd:i=(a+1)*this.frameSamples/16,yield{audio:t.audio,start:o,end:i}}a++}const n=[];this.frameProcessor.endSegment((e=>{n.push(e)}));for(const e of n)e.msg===d.Message.SpeechEnd&&(yield{audio:e.audio,start:o,end:a*this.frameSamples/16})}}},746:function(e,t,s){var r=this&&this.__createBinding||(Object.create?function(e,t,s,r){void 0===r&&(r=s);var o=Object.getOwnPropertyDescriptor(t,s);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[s]}}),Object.defineProperty(e,r,o)}:function(e,t,s,r){void 0===r&&(r=s),e[r]=t[s]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var s in e)"default"!==s&&Object.prototype.hasOwnProperty.call(e,s)&&r(t,e,s);return o(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.AudioNodeVAD=t.MicVAD=t.getDefaultRealTimeVADOptions=t.ort=t.DEFAULT_MODEL=void 0;const a=i(s(656)),n=s(973),c=s(362),h=s(710),d=s(954),u=s(559),l=s(825);t.DEFAULT_MODEL="legacy",t.ort=a,t.getDefaultRealTimeVADOptions=e=>({...c.defaultFrameProcessorOptions,onFrameProcessed:(e,t)=>{},onVADMisfire:()=>{h.log.debug("VAD misfire")},onSpeechStart:()=>{h.log.debug("Detected speech start")},onSpeechEnd:()=>{h.log.debug("Detected speech end")},onSpeechRealStart:()=>{h.log.debug("Detected real speech start")},baseAssetPath:"./",onnxWASMBasePath:"./",model:e,workletOptions:{},getStream:async()=>await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:!0,autoGainControl:!0,noiseSuppression:!0}}),pauseStream:async e=>{e.getTracks().forEach((e=>{e.stop()}))},resumeStream:async e=>await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:!0,autoGainControl:!0,noiseSuppression:!0}}),ortConfig:e=>{e.env.logLevel="error"},startOnLoad:!0});class p{static async new(e={}){const s={...(0,t.getDefaultRealTimeVADOptions)(e.model??t.DEFAULT_MODEL),...e};(0,c.validateOptions)(s);const r=new AudioContext,o=await f.new(r,s),i=new p(s,r,o);if(s.startOnLoad)try{await i.start()}catch(e){console.error("Error starting micVad",e)}return i}constructor(e,t,s,r=!1){this.options=e,this.audioContext=t,this.audioNodeVAD=s,this.listening=r,this.initialized=!1,this.pause=()=>{this.stream&&this.options.pauseStream(this.stream),this.audioNodeVAD.pause(),this.listening=!1},this.resume=async()=>{this.stream?(this.stream=await this.options.resumeStream(this.stream),this.sourceNode&&this.sourceNode.disconnect(),this.sourceNode=new MediaStreamAudioSourceNode(this.audioContext,{mediaStream:this.stream}),this.audioNodeVAD.receive(this.sourceNode)):console.warn("Stream not initialized")},this.start=async()=>{this.initialized||(this.initialized=!0,this.stream=await this.options.getStream(),this.sourceNode=new MediaStreamAudioSourceNode(this.audioContext,{mediaStream:this.stream}),this.audioNodeVAD.receive(this.sourceNode)),this.stream?.active?(this.audioNodeVAD.start(),this.listening=!0):(await this.resume(),this.audioNodeVAD.start(),this.listening=!0)},this.destroy=()=>{this.listening&&this.pause(),this.stream?this.options.pauseStream(this.stream):console.warn("Stream not initialized"),this.sourceNode?this.sourceNode.disconnect():console.warn("Source node not initialized"),this.audioNodeVAD.destroy(),this.audioContext.close()},this.setOptions=e=>{this.audioNodeVAD.setFrameProcessorOptions(e)}}}t.MicVAD=p;class f{static async new(e,s={}){const r={...(0,t.getDefaultRealTimeVADOptions)(s.model??t.DEFAULT_MODEL),...s};(0,c.validateOptions)(r),t.ort.env.wasm.wasmPaths=r.onnxWASMBasePath,void 0!==r.ortConfig&&r.ortConfig(t.ort);const o="v5"===r.model?"silero_vad_v5.onnx":"silero_vad_legacy.onnx",i=r.baseAssetPath+o,a="v5"===r.model?u.SileroV5.new:u.SileroLegacy.new;let h;try{h=await a(t.ort,(()=>(0,n.defaultModelFetcher)(i)))}catch(e){throw console.error(`Encountered an error while loading model file ${i}`),e}const d="v5"===r.model?512:1536,l=d/16,p=new c.FrameProcessor(h.process,h.reset_state,{positiveSpeechThreshold:r.positiveSpeechThreshold,negativeSpeechThreshold:r.negativeSpeechThreshold,redemptionMs:r.redemptionMs,preSpeechPadMs:r.preSpeechPadMs,minSpeechMs:r.minSpeechMs,submitUserSpeechOnPause:r.submitUserSpeechOnPause},l),m=new f(e,r,p,d,l);return await m.setupAudioNode(),m}constructor(e,t,s,r,o){this.ctx=e,this.options=t,this.frameSamples=r,this.msPerFrame=o,this.pause=()=>{this.frameProcessor.pause(this.handleFrameProcessorEvent)},this.start=()=>{this.frameProcessor.resume()},this.receive=e=>{e.connect(this.audioNode)},this.processFrame=async e=>{await this.frameProcessor.process(e,this.handleFrameProcessorEvent)},this.handleFrameProcessorEvent=e=>{switch(e.msg){case d.Message.FrameProcessed:this.options.onFrameProcessed(e.probs,e.frame);break;case d.Message.SpeechStart:this.options.onSpeechStart();break;case d.Message.SpeechRealStart:this.options.onSpeechRealStart();break;case d.Message.VADMisfire:this.options.onVADMisfire();break;case d.Message.SpeechEnd:this.options.onSpeechEnd(e.audio)}},this.destroy=()=>{this.audioNode instanceof AudioWorkletNode&&this.audioNode.port.postMessage({message:d.Message.SpeechStop}),this.audioNode.disconnect(),this.gainNode?.disconnect()},this.setFrameProcessorOptions=e=>{this.frameProcessor.options={...this.frameProcessor.options,...e}},this.frameProcessor=s}async setupAudioNode(){if("audioWorklet"in this.ctx&&"function"==typeof AudioWorkletNode)try{const e=this.options.baseAssetPath+"vad.worklet.bundle.min.js";await this.ctx.audioWorklet.addModule(e);const t=this.options.workletOptions??{};return t.processorOptions={...t.processorOptions??{},frameSamples:this.frameSamples},this.audioNode=new AudioWorkletNode(this.ctx,"vad-helper-worklet",t),void(this.audioNode.port.onmessage=async e=>{if(e.data?.message===d.Message.AudioFrame){let t=e.data.data;t instanceof ArrayBuffer||(t=new ArrayBuffer(e.data.data.byteLength),new Uint8Array(t).set(new Uint8Array(e.data.data)));const s=new Float32Array(t);await this.processFrame(s)}})}catch(e){console.log("AudioWorklet setup failed, falling back to ScriptProcessor",e)}this.resampler=new l.Resampler({nativeSampleRate:this.ctx.sampleRate,targetSampleRate:16e3,targetFrameSize:this.frameSamples??480}),this.audioNode=this.ctx.createScriptProcessor(4096,1,1),this.gainNode=this.ctx.createGain(),this.gainNode.gain.value=0;let e=!1;this.audioNode.onaudioprocess=async t=>{if(!e){e=!0;try{const e=t.inputBuffer.getChannelData(0);if(t.outputBuffer.getChannelData(0).fill(0),this.resampler){const t=this.resampler.process(e);for(const e of t)await this.processFrame(e)}}catch(e){console.error("Error processing audio:",e)}finally{e=!1}}},this.audioNode.connect(this.gainNode),this.gainNode.connect(this.ctx.destination)}}t.AudioNodeVAD=f},825:(e,t,s)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Resampler=void 0;const r=s(710);t.Resampler=class{constructor(e){this.options=e,this.process=e=>{const t=[];for(const s of e)for(this.inputBuffer.push(s);this.hasEnoughDataForFrame();){const e=this.generateOutputFrame();t.push(e)}return t},e.nativeSampleRate<16e3&&r.log.error("nativeSampleRate is too low. Should have 16000 = targetSampleRate <= nativeSampleRate"),this.inputBuffer=[]}async*stream(e){for(const t of e)for(this.inputBuffer.push(t);this.hasEnoughDataForFrame();){const e=this.generateOutputFrame();yield e}}hasEnoughDataForFrame(){return this.inputBuffer.length*this.options.targetSampleRate/this.options.nativeSampleRate>=this.options.targetFrameSize}generateOutputFrame(){const e=new Float32Array(this.options.targetFrameSize);let t=0,s=0;for(;t<this.options.targetFrameSize;){let r=0,o=0;for(;s<Math.min(this.inputBuffer.length,(t+1)*this.options.nativeSampleRate/this.options.targetSampleRate);){const e=this.inputBuffer[s];void 0!==e&&(r+=e,o++),s++}e[t]=r/o,t++}return this.inputBuffer=this.inputBuffer.slice(s),e}}},787:(e,t)=>{function s(e,t,s){for(var r=0;r<s.length;r++)e.setUint8(t+r,s.charCodeAt(r))}Object.defineProperty(t,"__esModule",{value:!0}),t.audioFileToArray=t.encodeWAV=t.arrayBufferToBase64=t.minFramesForTargetMS=void 0,t.minFramesForTargetMS=function(e,t,s=16e3){return Math.ceil(e*s/1e3/t)},t.arrayBufferToBase64=function(e){const t=new Uint8Array(e),s=t.byteLength,r=new Array(s);for(var o=0;o<s;o++){const e=t[o];if(void 0===e)break;r[o]=String.fromCharCode(e)}return btoa(r.join(""))},t.encodeWAV=function(e,t=3,r=16e3,o=1,i=32){var a=i/8,n=o*a,c=new ArrayBuffer(44+e.length*a),h=new DataView(c);return s(h,0,"RIFF"),h.setUint32(4,36+e.length*a,!0),s(h,8,"WAVE"),s(h,12,"fmt "),h.setUint32(16,16,!0),h.setUint16(20,t,!0),h.setUint16(22,o,!0),h.setUint32(24,r,!0),h.setUint32(28,r*n,!0),h.setUint16(32,n,!0),h.setUint16(34,i,!0),s(h,36,"data"),h.setUint32(40,e.length*a,!0),1===t?function(e,t,s){for(var r=0;r<s.length;r++,t+=2){var o=Math.max(-1,Math.min(1,s[r]));e.setInt16(t,o<0?32768*o:32767*o,!0)}}(h,44,e):function(e,t,s){for(var r=0;r<s.length;r++,t+=4)e.setFloat32(t,s[r],!0)}(h,44,e),c},t.audioFileToArray=async function(e){const t=new OfflineAudioContext(1,1,44100),s=new FileReader;let r=null;if(await new Promise((o=>{s.addEventListener("loadend",(e=>{const i=s.result;t.decodeAudioData(i,(e=>{r=e,t.startRendering().then((e=>{console.log("Rendering completed successfully"),o()})).catch((e=>{console.error(`Rendering failed: ${e}`)}))}),(e=>{console.log(`Error with decoding audio data: ${e}`)}))})),s.readAsArrayBuffer(e)})),null===r)throw Error("some shit");let o=r,i=new Float32Array(o.length);for(let e=0;e<o.length;e++)for(let t=0;t<o.numberOfChannels;t++)i[e]+=o.getChannelData(t)[e];return{audio:i,sampleRate:o.sampleRate}}},656:t=>{t.exports=e}},s={};function r(e){var o=s[e];if(void 0!==o)return o.exports;var i=s[e]={exports:{}};return t[e].call(i.exports,i,i.exports,r),i.exports}var o={};return(()=>{var e=o;Object.defineProperty(e,"__esModule",{value:!0}),e.getDefaultRealTimeVADOptions=e.MicVAD=e.DEFAULT_MODEL=e.AudioNodeVAD=e.utils=e.NonRealTimeVAD=e.Message=e.FrameProcessor=e.defaultModelFetcher=e.baseAssetPath=void 0;var t=r(485);Object.defineProperty(e,"baseAssetPath",{enumerable:!0,get:function(){return t.baseAssetPath}});var s=r(973);Object.defineProperty(e,"defaultModelFetcher",{enumerable:!0,get:function(){return s.defaultModelFetcher}});var i=r(362);Object.defineProperty(e,"FrameProcessor",{enumerable:!0,get:function(){return i.FrameProcessor}});var a=r(954);Object.defineProperty(e,"Message",{enumerable:!0,get:function(){return a.Message}});var n=r(202);Object.defineProperty(e,"NonRealTimeVAD",{enumerable:!0,get:function(){return n.NonRealTimeVAD}});const c=r(787);e.utils={audioFileToArray:c.audioFileToArray,minFramesForTargetMS:c.minFramesForTargetMS,arrayBufferToBase64:c.arrayBufferToBase64,encodeWAV:c.encodeWAV};var h=r(746);Object.defineProperty(e,"AudioNodeVAD",{enumerable:!0,get:function(){return h.AudioNodeVAD}}),Object.defineProperty(e,"DEFAULT_MODEL",{enumerable:!0,get:function(){return h.DEFAULT_MODEL}}),Object.defineProperty(e,"MicVAD",{enumerable:!0,get:function(){return h.MicVAD}}),Object.defineProperty(e,"getDefaultRealTimeVADOptions",{enumerable:!0,get:function(){return h.getDefaultRealTimeVADOptions}})})(),o})()));

@@ -1,1 +0,1 @@

{"version":3,"file":"v5.d.ts","sourceRoot":"","sources":["../../src/models/v5.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,YAAY,EAAgB,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAO1E,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,CAavB;IAED,WAAW,aAEV;IAED,OAAO,eAAsB,YAAY,KAAG,QAAQ,mBAAmB,CAAC,CAmBvE;CACF"}
{"version":3,"file":"v5.d.ts","sourceRoot":"","sources":["../../src/models/v5.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAA;AAEtC,OAAO,EAAE,YAAY,EAAgB,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAO1E,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,CAYvB;IAED,WAAW,aAEV;IAED,OAAO,eAAsB,YAAY,KAAG,QAAQ,mBAAmB,CAAC,CAmBvE;CACF"}

@@ -43,3 +43,2 @@ "use strict";

logging_1.log.debug("Loading VAD...");
logging_1.log.debug("ort loglevel set to", ortInstance.env.logLevel);
const modelArrayBuffer = await modelFetcher();

@@ -46,0 +45,0 @@ const _session = await ortInstance.InferenceSession.create(modelArrayBuffer);

@@ -1,1 +0,1 @@

{"version":3,"file":"v5.js","sourceRoot":"","sources":["../../src/models/v5.ts"],"names":[],"mappings":";;;;AACA,wCAAgC;AAGhC,SAAS,WAAW,CAAC,WAAuB;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACrC,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;AAC/D,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;QAkBjC,gBAAW,GAAG,GAAG,EAAE;YACjB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC7C,CAAC,CAAA;QAED,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,CAAA;YACF,MAAM,MAAM,GAAG;gBACb,KAAK,EAAE,CAAC;gBACR,KAAK,EAAE,IAAI,CAAC,MAAM;gBAClB,EAAE,EAAE,IAAI,CAAC,GAAG;aACb,CAAA;YACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAE3C,aAAa;YACb,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAA;YAE3B,aAAa;YACb,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAA;YACtC,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAA;YAC9B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;QAChC,CAAC,CAAA;IAxCE,CAAC;;AANN,4BA+CC;;AAvCQ,YAAG,GAAiB,KAAK,EAC9B,WAAuB,EACvB,YAA0B,EAC1B,EAAE;IACF,aAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;IAC3B,aAAG,CAAC,KAAK,CAAC,qBAAqB,EAAE,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC1D,MAAM,gBAAgB,GAAG,MAAM,YAAY,EAAE,CAAA;IAC7C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAC5E,aAAa;IACb,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;IACvC,aAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;IACpC,OAAO,IAAI,EAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,CAAA;AACzD,CAAC,AAbS,CAaT"}
{"version":3,"file":"v5.js","sourceRoot":"","sources":["../../src/models/v5.ts"],"names":[],"mappings":";;;;AACA,wCAAgC;AAGhC,SAAS,WAAW,CAAC,WAAuB;IAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACrC,OAAO,IAAI,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;AAC/D,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;QAiBjC,gBAAW,GAAG,GAAG,EAAE;YACjB,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC7C,CAAC,CAAA;QAED,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,CAAA;YACF,MAAM,MAAM,GAAG;gBACb,KAAK,EAAE,CAAC;gBACR,KAAK,EAAE,IAAI,CAAC,MAAM;gBAClB,EAAE,EAAE,IAAI,CAAC,GAAG;aACb,CAAA;YACD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAE3C,aAAa;YACb,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAA;YAE3B,aAAa;YACb,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAA;YACtC,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAA;YAC9B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;QAChC,CAAC,CAAA;IAvCE,CAAC;;AANN,4BA8CC;;AAtCQ,YAAG,GAAiB,KAAK,EAC9B,WAAuB,EACvB,YAA0B,EAC1B,EAAE;IACF,aAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAA;IAC3B,MAAM,gBAAgB,GAAG,MAAM,YAAY,EAAE,CAAA;IAC7C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IAC5E,aAAa;IACb,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAA;IACrD,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,CAAA;IACvC,aAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;IACpC,OAAO,IAAI,EAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,CAAC,CAAA;AACzD,CAAC,AAZS,CAYT"}

@@ -35,2 +35,3 @@ import * as ortInstance from "onnxruntime-web";

resumeStream: (stream: MediaStream) => Promise<MediaStream>;
startOnLoad: boolean;
}

@@ -42,6 +43,7 @@ export declare const ort: typeof ortInstance;

private audioContext;
private stream;
private audioNodeVAD;
private sourceNode;
private listening;
stream?: MediaStream;
private sourceNode?;
private initialized;
static new(options?: Partial<RealTimeVADOptions>): Promise<MicVAD>;

@@ -48,0 +50,0 @@ private constructor();

@@ -1,1 +0,1 @@

{"version":3,"file":"real-time-vad.d.ts","sourceRoot":"","sources":["../src/real-time-vad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EAGtB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAGL,UAAU,EAGV,mBAAmB,EACpB,MAAM,UAAU,CAAA;AAGjB,eAAO,MAAM,aAAa,WAAW,CAAA;AAErC,UAAU,oBAAoB;IAC5B,4GAA4G;IAC5G,gBAAgB,EAAE,CAChB,aAAa,EAAE,mBAAmB,EAClC,KAAK,EAAE,YAAY,KAChB,GAAG,CAAA;IAER;;OAEG;IACH,YAAY,EAAE,MAAM,GAAG,CAAA;IAEvB,oDAAoD;IACpD,aAAa,EAAE,MAAM,GAAG,CAAA;IAExB;;;;OAIG;IACH,WAAW,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,GAAG,CAAA;IAEzC,6EAA6E;IAC7E,iBAAiB,EAAE,MAAM,GAAG,CAAA;CAC7B;AAED,KAAK,YAAY,GAAG;IAClB,cAAc,EAAE,uBAAuB,CAAA;IACvC,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;CACzB,CAAA;AAED,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAA;CACvB,CAAA;AAED,MAAM,WAAW,kBACf,SAAQ,qBAAqB,EAC3B,oBAAoB,EACpB,UAAU,EACV,YAAY,EACZ,YAAY;IACd,SAAS,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IACrC,WAAW,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,YAAY,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAA;CAC5D;AAED,eAAO,MAAM,GAAG,oBAAc,CAAA;AAM9B,eAAO,MAAM,4BAA4B,UAChC,IAAI,GAAG,QAAQ,KACrB,kBAoDF,CAAA;AAED,qBAAa,MAAM;IA4BR,OAAO,EAAE,kBAAkB;IAClC,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;WAhCN,GAAG,CAAC,OAAO,GAAE,OAAO,CAAC,kBAAkB,CAAM;IA0B1D,OAAO;IASP,KAAK,aAIJ;IAED,MAAM,sBAML;IAED,KAAK,sBASJ;IAED,OAAO,aAQN;IAED,UAAU,YAAa,QAAQ,qBAAqB,CAAC,UAEpD;CACF;AAED,qBAAa,YAAY;IA+Dd,GAAG,EAAE,YAAY;IACjB,OAAO,EAAE,kBAAkB;IAE3B,YAAY,EAAE,MAAM;IACpB,UAAU,EAAE,MAAM;IAlE3B,OAAO,CAAC,SAAS,CAAyC;IAC1D,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,CAAU;IAC3B,OAAO,CAAC,SAAS,CAAC,CAAW;WAEhB,GAAG,CACd,GAAG,EAAE,YAAY,EACjB,OAAO,GAAE,OAAO,CAAC,kBAAkB,CAAM;gBAuDlC,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,kBAAkB,EAClC,cAAc,EAAE,cAAc,EACvB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM;YAKb,cAAc;IA2F5B,KAAK,aAEJ;IAED,KAAK,aAEJ;IAED,OAAO,SAAU,SAAS,UAEzB;IAED,YAAY,UAAiB,YAAY,mBAExC;IAED,yBAAyB,OAAQ,mBAAmB,UAsBnD;IAED,OAAO,aAQN;IAED,wBAAwB,YAAa,QAAQ,qBAAqB,CAAC,UAKlE;CACF"}
{"version":3,"file":"real-time-vad.d.ts","sourceRoot":"","sources":["../src/real-time-vad.ts"],"names":[],"mappings":"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"}

@@ -87,2 +87,3 @@ "use strict";

},
startOnLoad: true,
};

@@ -98,20 +99,25 @@ };

(0, frame_processor_1.validateOptions)(fullOptions);
const stream = await fullOptions.getStream();
const audioContext = new AudioContext();
const sourceNode = new MediaStreamAudioSourceNode(audioContext, {
mediaStream: stream,
});
const audioNodeVAD = await AudioNodeVAD.new(audioContext, fullOptions);
audioNodeVAD.receive(sourceNode);
return new MicVAD(fullOptions, audioContext, stream, audioNodeVAD, sourceNode);
const micVad = new MicVAD(fullOptions, audioContext, audioNodeVAD);
if (fullOptions.startOnLoad) {
try {
await micVad.start();
}
catch (e) {
console.error("Error starting micVad", e);
}
}
return micVad;
}
constructor(options, audioContext, stream, audioNodeVAD, sourceNode, listening = false) {
constructor(options, audioContext, audioNodeVAD, listening = false) {
this.options = options;
this.audioContext = audioContext;
this.stream = stream;
this.audioNodeVAD = audioNodeVAD;
this.sourceNode = sourceNode;
this.listening = listening;
this.initialized = false;
this.pause = () => {
this.options.pauseStream(this.stream);
if (this.stream) {
this.options.pauseStream(this.stream);
}
this.audioNodeVAD.pause();

@@ -121,3 +127,10 @@ this.listening = false;

this.resume = async () => {
if (!this.stream) {
console.warn("Stream not initialized");
return;
}
this.stream = await this.options.resumeStream(this.stream);
if (this.sourceNode) {
this.sourceNode.disconnect();
}
this.sourceNode = new MediaStreamAudioSourceNode(this.audioContext, {

@@ -129,3 +142,11 @@ mediaStream: this.stream,

this.start = async () => {
if (!this.stream.active) {
if (!this.initialized) {
this.initialized = true;
this.stream = await this.options.getStream();
this.sourceNode = new MediaStreamAudioSourceNode(this.audioContext, {
mediaStream: this.stream,
});
this.audioNodeVAD.receive(this.sourceNode);
}
if (!this.stream?.active) {
await this.resume();

@@ -144,4 +165,14 @@ this.audioNodeVAD.start();

}
this.options.pauseStream(this.stream);
this.sourceNode.disconnect();
if (this.stream) {
this.options.pauseStream(this.stream);
}
else {
console.warn("Stream not initialized");
}
if (this.sourceNode) {
this.sourceNode.disconnect();
}
else {
console.warn("Source node not initialized");
}
this.audioNodeVAD.destroy();

@@ -148,0 +179,0 @@ this.audioContext.close();

@@ -1,1 +0,1 @@

{"version":3,"file":"real-time-vad.js","sourceRoot":"","sources":["../src/real-time-vad.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"real-time-vad.js","sourceRoot":"","sources":["../src/real-time-vad.ts"],"names":[],"mappings":"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"}

@@ -15,3 +15,3 @@ {

"homepage": "https://github.com/ricky0123/vad",
"version": "0.0.27",
"version": "0.0.28",
"license": "ISC",

@@ -40,4 +40,4 @@ "main": "dist/index.js",

"test:coverage": "jest --coverage",
"publish": "npm publish --access public"
"release": "npm publish --access public"
}
}