@runanywhere/web 0.1.0-beta.1

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 (205) hide show
  1. package/README.md +795 -0
  2. package/dist/Foundation/ErrorTypes.d.ts +61 -0
  3. package/dist/Foundation/ErrorTypes.d.ts.map +1 -0
  4. package/dist/Foundation/ErrorTypes.js +90 -0
  5. package/dist/Foundation/ErrorTypes.js.map +1 -0
  6. package/dist/Foundation/EventBus.d.ts +171 -0
  7. package/dist/Foundation/EventBus.d.ts.map +1 -0
  8. package/dist/Foundation/EventBus.js +113 -0
  9. package/dist/Foundation/EventBus.js.map +1 -0
  10. package/dist/Foundation/PlatformAdapter.d.ts +101 -0
  11. package/dist/Foundation/PlatformAdapter.d.ts.map +1 -0
  12. package/dist/Foundation/PlatformAdapter.js +417 -0
  13. package/dist/Foundation/PlatformAdapter.js.map +1 -0
  14. package/dist/Foundation/SDKLogger.d.ts +33 -0
  15. package/dist/Foundation/SDKLogger.d.ts.map +1 -0
  16. package/dist/Foundation/SDKLogger.js +82 -0
  17. package/dist/Foundation/SDKLogger.js.map +1 -0
  18. package/dist/Foundation/SherpaONNXBridge.d.ts +134 -0
  19. package/dist/Foundation/SherpaONNXBridge.d.ts.map +1 -0
  20. package/dist/Foundation/SherpaONNXBridge.js +332 -0
  21. package/dist/Foundation/SherpaONNXBridge.js.map +1 -0
  22. package/dist/Foundation/StructOffsets.d.ts +147 -0
  23. package/dist/Foundation/StructOffsets.d.ts.map +1 -0
  24. package/dist/Foundation/StructOffsets.js +161 -0
  25. package/dist/Foundation/StructOffsets.js.map +1 -0
  26. package/dist/Foundation/WASMBridge.d.ts +241 -0
  27. package/dist/Foundation/WASMBridge.d.ts.map +1 -0
  28. package/dist/Foundation/WASMBridge.js +393 -0
  29. package/dist/Foundation/WASMBridge.js.map +1 -0
  30. package/dist/Infrastructure/ArchiveUtility.d.ts +25 -0
  31. package/dist/Infrastructure/ArchiveUtility.d.ts.map +1 -0
  32. package/dist/Infrastructure/ArchiveUtility.js +139 -0
  33. package/dist/Infrastructure/ArchiveUtility.js.map +1 -0
  34. package/dist/Infrastructure/AudioCapture.d.ts +87 -0
  35. package/dist/Infrastructure/AudioCapture.d.ts.map +1 -0
  36. package/dist/Infrastructure/AudioCapture.js +231 -0
  37. package/dist/Infrastructure/AudioCapture.js.map +1 -0
  38. package/dist/Infrastructure/AudioPlayback.d.ts +53 -0
  39. package/dist/Infrastructure/AudioPlayback.d.ts.map +1 -0
  40. package/dist/Infrastructure/AudioPlayback.js +117 -0
  41. package/dist/Infrastructure/AudioPlayback.js.map +1 -0
  42. package/dist/Infrastructure/DeviceCapabilities.d.ts +39 -0
  43. package/dist/Infrastructure/DeviceCapabilities.d.ts.map +1 -0
  44. package/dist/Infrastructure/DeviceCapabilities.js +111 -0
  45. package/dist/Infrastructure/DeviceCapabilities.js.map +1 -0
  46. package/dist/Infrastructure/ExtensionRegistry.d.ts +30 -0
  47. package/dist/Infrastructure/ExtensionRegistry.d.ts.map +1 -0
  48. package/dist/Infrastructure/ExtensionRegistry.js +41 -0
  49. package/dist/Infrastructure/ExtensionRegistry.js.map +1 -0
  50. package/dist/Infrastructure/ModelDownloader.d.ts +98 -0
  51. package/dist/Infrastructure/ModelDownloader.d.ts.map +1 -0
  52. package/dist/Infrastructure/ModelDownloader.js +431 -0
  53. package/dist/Infrastructure/ModelDownloader.js.map +1 -0
  54. package/dist/Infrastructure/ModelLoaderTypes.d.ts +34 -0
  55. package/dist/Infrastructure/ModelLoaderTypes.d.ts.map +1 -0
  56. package/dist/Infrastructure/ModelLoaderTypes.js +12 -0
  57. package/dist/Infrastructure/ModelLoaderTypes.js.map +1 -0
  58. package/dist/Infrastructure/ModelManager.d.ts +219 -0
  59. package/dist/Infrastructure/ModelManager.d.ts.map +1 -0
  60. package/dist/Infrastructure/ModelManager.js +885 -0
  61. package/dist/Infrastructure/ModelManager.js.map +1 -0
  62. package/dist/Infrastructure/ModelRegistry.d.ts +131 -0
  63. package/dist/Infrastructure/ModelRegistry.d.ts.map +1 -0
  64. package/dist/Infrastructure/ModelRegistry.js +122 -0
  65. package/dist/Infrastructure/ModelRegistry.js.map +1 -0
  66. package/dist/Infrastructure/OPFSStorage.d.ts +143 -0
  67. package/dist/Infrastructure/OPFSStorage.d.ts.map +1 -0
  68. package/dist/Infrastructure/OPFSStorage.js +330 -0
  69. package/dist/Infrastructure/OPFSStorage.js.map +1 -0
  70. package/dist/Infrastructure/VLMWorkerBridge.d.ts +211 -0
  71. package/dist/Infrastructure/VLMWorkerBridge.d.ts.map +1 -0
  72. package/dist/Infrastructure/VLMWorkerBridge.js +264 -0
  73. package/dist/Infrastructure/VLMWorkerBridge.js.map +1 -0
  74. package/dist/Infrastructure/VLMWorkerRuntime.d.ts +38 -0
  75. package/dist/Infrastructure/VLMWorkerRuntime.d.ts.map +1 -0
  76. package/dist/Infrastructure/VLMWorkerRuntime.js +503 -0
  77. package/dist/Infrastructure/VLMWorkerRuntime.js.map +1 -0
  78. package/dist/Infrastructure/VideoCapture.d.ts +118 -0
  79. package/dist/Infrastructure/VideoCapture.d.ts.map +1 -0
  80. package/dist/Infrastructure/VideoCapture.js +207 -0
  81. package/dist/Infrastructure/VideoCapture.js.map +1 -0
  82. package/dist/Public/Extensions/DiffusionTypes.d.ts +64 -0
  83. package/dist/Public/Extensions/DiffusionTypes.d.ts.map +1 -0
  84. package/dist/Public/Extensions/DiffusionTypes.js +28 -0
  85. package/dist/Public/Extensions/DiffusionTypes.js.map +1 -0
  86. package/dist/Public/Extensions/EmbeddingsTypes.d.ts +33 -0
  87. package/dist/Public/Extensions/EmbeddingsTypes.d.ts.map +1 -0
  88. package/dist/Public/Extensions/EmbeddingsTypes.js +13 -0
  89. package/dist/Public/Extensions/EmbeddingsTypes.js.map +1 -0
  90. package/dist/Public/Extensions/RunAnywhere+Diffusion.d.ts +44 -0
  91. package/dist/Public/Extensions/RunAnywhere+Diffusion.d.ts.map +1 -0
  92. package/dist/Public/Extensions/RunAnywhere+Diffusion.js +189 -0
  93. package/dist/Public/Extensions/RunAnywhere+Diffusion.js.map +1 -0
  94. package/dist/Public/Extensions/RunAnywhere+Embeddings.d.ts +56 -0
  95. package/dist/Public/Extensions/RunAnywhere+Embeddings.d.ts.map +1 -0
  96. package/dist/Public/Extensions/RunAnywhere+Embeddings.js +240 -0
  97. package/dist/Public/Extensions/RunAnywhere+Embeddings.js.map +1 -0
  98. package/dist/Public/Extensions/RunAnywhere+ModelManagement.d.ts +53 -0
  99. package/dist/Public/Extensions/RunAnywhere+ModelManagement.d.ts.map +1 -0
  100. package/dist/Public/Extensions/RunAnywhere+ModelManagement.js +153 -0
  101. package/dist/Public/Extensions/RunAnywhere+ModelManagement.js.map +1 -0
  102. package/dist/Public/Extensions/RunAnywhere+STT.d.ts +95 -0
  103. package/dist/Public/Extensions/RunAnywhere+STT.d.ts.map +1 -0
  104. package/dist/Public/Extensions/RunAnywhere+STT.js +417 -0
  105. package/dist/Public/Extensions/RunAnywhere+STT.js.map +1 -0
  106. package/dist/Public/Extensions/RunAnywhere+StructuredOutput.d.ts +69 -0
  107. package/dist/Public/Extensions/RunAnywhere+StructuredOutput.d.ts.map +1 -0
  108. package/dist/Public/Extensions/RunAnywhere+StructuredOutput.js +196 -0
  109. package/dist/Public/Extensions/RunAnywhere+StructuredOutput.js.map +1 -0
  110. package/dist/Public/Extensions/RunAnywhere+TTS.d.ts +55 -0
  111. package/dist/Public/Extensions/RunAnywhere+TTS.d.ts.map +1 -0
  112. package/dist/Public/Extensions/RunAnywhere+TTS.js +253 -0
  113. package/dist/Public/Extensions/RunAnywhere+TTS.js.map +1 -0
  114. package/dist/Public/Extensions/RunAnywhere+TextGeneration.d.ts +80 -0
  115. package/dist/Public/Extensions/RunAnywhere+TextGeneration.d.ts.map +1 -0
  116. package/dist/Public/Extensions/RunAnywhere+TextGeneration.js +436 -0
  117. package/dist/Public/Extensions/RunAnywhere+TextGeneration.js.map +1 -0
  118. package/dist/Public/Extensions/RunAnywhere+ToolCalling.d.ts +82 -0
  119. package/dist/Public/Extensions/RunAnywhere+ToolCalling.d.ts.map +1 -0
  120. package/dist/Public/Extensions/RunAnywhere+ToolCalling.js +576 -0
  121. package/dist/Public/Extensions/RunAnywhere+ToolCalling.js.map +1 -0
  122. package/dist/Public/Extensions/RunAnywhere+VAD.d.ts +70 -0
  123. package/dist/Public/Extensions/RunAnywhere+VAD.d.ts.map +1 -0
  124. package/dist/Public/Extensions/RunAnywhere+VAD.js +231 -0
  125. package/dist/Public/Extensions/RunAnywhere+VAD.js.map +1 -0
  126. package/dist/Public/Extensions/RunAnywhere+VLM.d.ts +58 -0
  127. package/dist/Public/Extensions/RunAnywhere+VLM.d.ts.map +1 -0
  128. package/dist/Public/Extensions/RunAnywhere+VLM.js +262 -0
  129. package/dist/Public/Extensions/RunAnywhere+VLM.js.map +1 -0
  130. package/dist/Public/Extensions/RunAnywhere+VoiceAgent.d.ts +49 -0
  131. package/dist/Public/Extensions/RunAnywhere+VoiceAgent.d.ts.map +1 -0
  132. package/dist/Public/Extensions/RunAnywhere+VoiceAgent.js +222 -0
  133. package/dist/Public/Extensions/RunAnywhere+VoiceAgent.js.map +1 -0
  134. package/dist/Public/Extensions/RunAnywhere+VoicePipeline.d.ts +63 -0
  135. package/dist/Public/Extensions/RunAnywhere+VoicePipeline.d.ts.map +1 -0
  136. package/dist/Public/Extensions/RunAnywhere+VoicePipeline.js +168 -0
  137. package/dist/Public/Extensions/RunAnywhere+VoicePipeline.js.map +1 -0
  138. package/dist/Public/Extensions/STTTypes.d.ts +53 -0
  139. package/dist/Public/Extensions/STTTypes.d.ts.map +1 -0
  140. package/dist/Public/Extensions/STTTypes.js +16 -0
  141. package/dist/Public/Extensions/STTTypes.js.map +1 -0
  142. package/dist/Public/Extensions/TTSTypes.d.ts +31 -0
  143. package/dist/Public/Extensions/TTSTypes.d.ts.map +1 -0
  144. package/dist/Public/Extensions/TTSTypes.js +3 -0
  145. package/dist/Public/Extensions/TTSTypes.js.map +1 -0
  146. package/dist/Public/Extensions/ToolCallingTypes.d.ts +78 -0
  147. package/dist/Public/Extensions/ToolCallingTypes.d.ts.map +1 -0
  148. package/dist/Public/Extensions/ToolCallingTypes.js +8 -0
  149. package/dist/Public/Extensions/ToolCallingTypes.js.map +1 -0
  150. package/dist/Public/Extensions/VADTypes.d.ts +30 -0
  151. package/dist/Public/Extensions/VADTypes.d.ts.map +1 -0
  152. package/dist/Public/Extensions/VADTypes.js +8 -0
  153. package/dist/Public/Extensions/VADTypes.js.map +1 -0
  154. package/dist/Public/Extensions/VLMTypes.d.ts +56 -0
  155. package/dist/Public/Extensions/VLMTypes.d.ts.map +1 -0
  156. package/dist/Public/Extensions/VLMTypes.js +24 -0
  157. package/dist/Public/Extensions/VLMTypes.js.map +1 -0
  158. package/dist/Public/Extensions/VoiceAgentTypes.d.ts +42 -0
  159. package/dist/Public/Extensions/VoiceAgentTypes.d.ts.map +1 -0
  160. package/dist/Public/Extensions/VoiceAgentTypes.js +12 -0
  161. package/dist/Public/Extensions/VoiceAgentTypes.js.map +1 -0
  162. package/dist/Public/Extensions/VoicePipelineTypes.d.ts +69 -0
  163. package/dist/Public/Extensions/VoicePipelineTypes.d.ts.map +1 -0
  164. package/dist/Public/Extensions/VoicePipelineTypes.js +9 -0
  165. package/dist/Public/Extensions/VoicePipelineTypes.js.map +1 -0
  166. package/dist/Public/RunAnywhere.d.ts +121 -0
  167. package/dist/Public/RunAnywhere.d.ts.map +1 -0
  168. package/dist/Public/RunAnywhere.js +332 -0
  169. package/dist/Public/RunAnywhere.js.map +1 -0
  170. package/dist/index.d.ts +67 -0
  171. package/dist/index.d.ts.map +1 -0
  172. package/dist/index.js +53 -0
  173. package/dist/index.js.map +1 -0
  174. package/dist/types/LLMTypes.d.ts +48 -0
  175. package/dist/types/LLMTypes.d.ts.map +1 -0
  176. package/dist/types/LLMTypes.js +8 -0
  177. package/dist/types/LLMTypes.js.map +1 -0
  178. package/dist/types/enums.d.ts +144 -0
  179. package/dist/types/enums.d.ts.map +1 -0
  180. package/dist/types/enums.js +159 -0
  181. package/dist/types/enums.js.map +1 -0
  182. package/dist/types/index.d.ts +9 -0
  183. package/dist/types/index.d.ts.map +1 -0
  184. package/dist/types/index.js +8 -0
  185. package/dist/types/index.js.map +1 -0
  186. package/dist/types/models.d.ts +154 -0
  187. package/dist/types/models.d.ts.map +1 -0
  188. package/dist/types/models.js +8 -0
  189. package/dist/types/models.js.map +1 -0
  190. package/dist/workers/vlm-worker.d.ts +9 -0
  191. package/dist/workers/vlm-worker.d.ts.map +1 -0
  192. package/dist/workers/vlm-worker.js +10 -0
  193. package/dist/workers/vlm-worker.js.map +1 -0
  194. package/package.json +62 -0
  195. package/wasm/racommons-webgpu.js +156 -0
  196. package/wasm/racommons-webgpu.wasm +0 -0
  197. package/wasm/racommons.js +126 -0
  198. package/wasm/racommons.wasm +0 -0
  199. package/wasm/sherpa/sherpa-onnx-asr.js +1538 -0
  200. package/wasm/sherpa/sherpa-onnx-glue-original.js +19 -0
  201. package/wasm/sherpa/sherpa-onnx-glue.js +17 -0
  202. package/wasm/sherpa/sherpa-onnx-tts.js +657 -0
  203. package/wasm/sherpa/sherpa-onnx-vad.js +337 -0
  204. package/wasm/sherpa/sherpa-onnx-wave.js +88 -0
  205. package/wasm/sherpa/sherpa-onnx.wasm +0 -0
@@ -0,0 +1,337 @@
1
+ function freeConfig(config, Module) {
2
+ if ('buffer' in config) {
3
+ Module._free(config.buffer);
4
+ }
5
+
6
+ if ('sileroVad' in config) {
7
+ freeConfig(config.sileroVad, Module)
8
+ }
9
+
10
+ if ('tenVad' in config) {
11
+ freeConfig(config.tenVad, Module)
12
+ }
13
+
14
+
15
+ Module._free(config.ptr);
16
+ }
17
+
18
+ // The user should free the returned pointers
19
+ function initSherpaOnnxSileroVadModelConfig(config, Module) {
20
+ const modelLen = Module.lengthBytesUTF8(config.model || '') + 1;
21
+
22
+ const n = modelLen;
23
+
24
+ const buffer = Module._malloc(n);
25
+
26
+ const len = 6 * 4;
27
+ const ptr = Module._malloc(len);
28
+
29
+ Module.stringToUTF8(config.model || '', buffer, modelLen);
30
+
31
+ let offset = 0;
32
+ Module.setValue(ptr, buffer, 'i8*');
33
+ offset += 4;
34
+
35
+ Module.setValue(ptr + offset, config.threshold || 0.5, 'float');
36
+ offset += 4;
37
+
38
+ Module.setValue(ptr + offset, config.minSilenceDuration || 0.5, 'float');
39
+ offset += 4;
40
+
41
+ Module.setValue(ptr + offset, config.minSpeechDuration || 0.25, 'float');
42
+ offset += 4;
43
+
44
+ Module.setValue(ptr + offset, config.windowSize || 512, 'i32');
45
+ offset += 4;
46
+
47
+ Module.setValue(ptr + offset, config.maxSpeechDuration || 20, 'float');
48
+ offset += 4;
49
+
50
+ return {
51
+ buffer: buffer, ptr: ptr, len: len,
52
+ }
53
+ }
54
+
55
+ function initSherpaOnnxTenVadModelConfig(config, Module) {
56
+ const modelLen = Module.lengthBytesUTF8(config.model || '') + 1;
57
+
58
+ const n = modelLen;
59
+
60
+ const buffer = Module._malloc(n);
61
+
62
+ const len = 6 * 4;
63
+ const ptr = Module._malloc(len);
64
+
65
+ Module.stringToUTF8(config.model || '', buffer, modelLen);
66
+
67
+ let offset = 0;
68
+ Module.setValue(ptr, buffer, 'i8*');
69
+ offset += 4;
70
+
71
+ Module.setValue(ptr + offset, config.threshold || 0.5, 'float');
72
+ offset += 4;
73
+
74
+ Module.setValue(ptr + offset, config.minSilenceDuration || 0.5, 'float');
75
+ offset += 4;
76
+
77
+ Module.setValue(ptr + offset, config.minSpeechDuration || 0.25, 'float');
78
+ offset += 4;
79
+
80
+ Module.setValue(ptr + offset, config.windowSize || 256, 'i32');
81
+ offset += 4;
82
+
83
+ Module.setValue(ptr + offset, config.maxSpeechDuration || 20, 'float');
84
+ offset += 4;
85
+
86
+ return {
87
+ buffer: buffer, ptr: ptr, len: len,
88
+ }
89
+ }
90
+
91
+ function initSherpaOnnxVadModelConfig(config, Module) {
92
+ if (!('sileroVad' in config)) {
93
+ config.sileroVad = {
94
+ model: '',
95
+ threshold: 0.50,
96
+ minSilenceDuration: 0.50,
97
+ minSpeechDuration: 0.25,
98
+ windowSize: 512,
99
+ maxSpeechDuration: 20,
100
+ };
101
+ }
102
+
103
+ if (!('tenVad' in config)) {
104
+ config.tenVad = {
105
+ model: '',
106
+ threshold: 0.50,
107
+ minSilenceDuration: 0.50,
108
+ minSpeechDuration: 0.25,
109
+ windowSize: 256,
110
+ maxSpeechDuration: 20,
111
+ };
112
+ }
113
+
114
+ const sileroVad =
115
+ initSherpaOnnxSileroVadModelConfig(config.sileroVad, Module);
116
+
117
+ const tenVad = initSherpaOnnxTenVadModelConfig(config.tenVad, Module);
118
+
119
+ const len = sileroVad.len + 4 * 4 + tenVad.len;
120
+ const ptr = Module._malloc(len);
121
+
122
+ const providerLen = Module.lengthBytesUTF8(config.provider || 'cpu') + 1;
123
+ const buffer = Module._malloc(providerLen);
124
+ Module.stringToUTF8(config.provider || 'cpu', buffer, providerLen);
125
+
126
+ let offset = 0;
127
+ Module._CopyHeap(sileroVad.ptr, sileroVad.len, ptr + offset);
128
+ offset += sileroVad.len;
129
+
130
+ Module.setValue(ptr + offset, config.sampleRate || 16000, 'i32');
131
+ offset += 4;
132
+
133
+ Module.setValue(ptr + offset, config.numThreads || 1, 'i32');
134
+ offset += 4;
135
+
136
+ Module.setValue(ptr + offset, buffer, 'i8*'); // provider
137
+ offset += 4;
138
+
139
+ Module.setValue(ptr + offset, config.debug || 0, 'i32');
140
+ offset += 4;
141
+
142
+ Module._CopyHeap(tenVad.ptr, tenVad.len, ptr + offset);
143
+ offset += tenVad.len;
144
+
145
+ return {
146
+ buffer: buffer, ptr: ptr, len: len, sileroVad: sileroVad, tenVad: tenVad
147
+ }
148
+ }
149
+
150
+ function createVad(Module, myConfig) {
151
+ const sileroVad = {
152
+ model: './silero_vad.onnx',
153
+ threshold: 0.50,
154
+ minSilenceDuration: 0.50,
155
+ minSpeechDuration: 0.25,
156
+ maxSpeechDuration: 20,
157
+ windowSize: 512,
158
+ };
159
+
160
+ const tenVad = {
161
+ model: '',
162
+ threshold: 0.50,
163
+ minSilenceDuration: 0.50,
164
+ minSpeechDuration: 0.25,
165
+ maxSpeechDuration: 20,
166
+ windowSize: 256,
167
+ };
168
+
169
+ let config = {
170
+ sileroVad: sileroVad,
171
+ tenVad: tenVad,
172
+ sampleRate: 16000,
173
+ numThreads: 1,
174
+ provider: 'cpu',
175
+ debug: 1,
176
+ bufferSizeInSeconds: 30,
177
+ };
178
+
179
+ if (myConfig) {
180
+ config = myConfig;
181
+ }
182
+
183
+ return new Vad(config, Module);
184
+ }
185
+
186
+
187
+ class CircularBuffer {
188
+ constructor(capacity, Module) {
189
+ this.handle = Module._SherpaOnnxCreateCircularBuffer(capacity);
190
+ this.Module = Module;
191
+ }
192
+
193
+ free() {
194
+ this.Module._SherpaOnnxDestroyCircularBuffer(this.handle);
195
+ this.handle = 0
196
+ }
197
+
198
+ /**
199
+ * @param samples {Float32Array}
200
+ */
201
+ push(samples) {
202
+ const pointer =
203
+ this.Module._malloc(samples.length * samples.BYTES_PER_ELEMENT);
204
+ this.Module.HEAPF32.set(samples, pointer / samples.BYTES_PER_ELEMENT);
205
+ this.Module._SherpaOnnxCircularBufferPush(
206
+ this.handle, pointer, samples.length);
207
+ this.Module._free(pointer);
208
+ }
209
+
210
+ get(startIndex, n) {
211
+ const p =
212
+ this.Module._SherpaOnnxCircularBufferGet(this.handle, startIndex, n);
213
+
214
+ const samplesPtr = p / 4;
215
+ const samples = new Float32Array(n);
216
+ for (let i = 0; i < n; i++) {
217
+ samples[i] = this.Module.HEAPF32[samplesPtr + i];
218
+ }
219
+
220
+ this.Module._SherpaOnnxCircularBufferFree(p);
221
+
222
+ return samples;
223
+ }
224
+
225
+ pop(n) {
226
+ this.Module._SherpaOnnxCircularBufferPop(this.handle, n);
227
+ }
228
+
229
+ size() {
230
+ return this.Module._SherpaOnnxCircularBufferSize(this.handle);
231
+ }
232
+
233
+ head() {
234
+ return this.Module._SherpaOnnxCircularBufferHead(this.handle);
235
+ }
236
+
237
+ reset() {
238
+ this.Module._SherpaOnnxCircularBufferReset(this.handle);
239
+ }
240
+ }
241
+
242
+ class Vad {
243
+ constructor(configObj, Module) {
244
+ this.config = configObj;
245
+ const config = initSherpaOnnxVadModelConfig(configObj, Module);
246
+ const handle = Module._SherpaOnnxCreateVoiceActivityDetector(
247
+ config.ptr, configObj.bufferSizeInSeconds || 30);
248
+ freeConfig(config, Module);
249
+
250
+ this.handle = handle;
251
+ this.Module = Module;
252
+ }
253
+
254
+ free() {
255
+ this.Module._SherpaOnnxDestroyVoiceActivityDetector(this.handle);
256
+ this.handle = 0
257
+ }
258
+
259
+ // samples is a float32 array
260
+ acceptWaveform(samples) {
261
+ const pointer =
262
+ this.Module._malloc(samples.length * samples.BYTES_PER_ELEMENT);
263
+ this.Module.HEAPF32.set(samples, pointer / samples.BYTES_PER_ELEMENT);
264
+ this.Module._SherpaOnnxVoiceActivityDetectorAcceptWaveform(
265
+ this.handle, pointer, samples.length);
266
+ this.Module._free(pointer);
267
+ }
268
+
269
+ isEmpty() {
270
+ return this.Module._SherpaOnnxVoiceActivityDetectorEmpty(this.handle) == 1;
271
+ }
272
+
273
+ isDetected() {
274
+ return this.Module._SherpaOnnxVoiceActivityDetectorDetected(this.handle) ==
275
+ 1;
276
+ }
277
+
278
+ pop() {
279
+ this.Module._SherpaOnnxVoiceActivityDetectorPop(this.handle);
280
+ }
281
+
282
+ clear() {
283
+ this.Module._SherpaOnnxVoiceActivityDetectorClear(this.handle);
284
+ }
285
+
286
+ /*
287
+ {
288
+ samples: a 1-d float32 array,
289
+ start: an int32
290
+ }
291
+ */
292
+ front() {
293
+ const h = this.Module._SherpaOnnxVoiceActivityDetectorFront(this.handle);
294
+
295
+ const start = this.Module.HEAP32[h / 4];
296
+ const samplesPtr = this.Module.HEAP32[h / 4 + 1] / 4;
297
+ const numSamples = this.Module.HEAP32[h / 4 + 2];
298
+
299
+ const samples = new Float32Array(numSamples);
300
+ for (let i = 0; i < numSamples; i++) {
301
+ samples[i] = this.Module.HEAPF32[samplesPtr + i];
302
+ }
303
+
304
+ this.Module._SherpaOnnxDestroySpeechSegment(h);
305
+ return {samples: samples, start: start};
306
+ }
307
+
308
+ reset() {
309
+ this.Module._SherpaOnnxVoiceActivityDetectorReset(this.handle);
310
+ }
311
+
312
+ flush() {
313
+ this.Module._SherpaOnnxVoiceActivityDetectorFlush(this.handle);
314
+ }
315
+ };
316
+
317
+ if (typeof process == 'object' && typeof process.versions == 'object' &&
318
+ typeof process.versions.node == 'string') {
319
+ module.exports = {
320
+ createVad,
321
+ CircularBuffer,
322
+ initSherpaOnnxVadModelConfig,
323
+ freeConfig,
324
+ };
325
+ } else {
326
+ // Browser / bundler environment — named exports for ESM import
327
+ if (typeof globalThis !== 'undefined') {
328
+ globalThis.__sherpaOnnxVad = {
329
+ createVad,
330
+ CircularBuffer,
331
+ initSherpaOnnxVadModelConfig,
332
+ freeConfig,
333
+ };
334
+ }
335
+ }
336
+
337
+ export { createVad, CircularBuffer, initSherpaOnnxVadModelConfig, freeConfig };
@@ -0,0 +1,88 @@
1
+ // return an object
2
+ // {
3
+ // samples: a float32 array
4
+ // sampleRate: an integer
5
+ // }
6
+ function readWave(filename, Module) {
7
+ const filenameLen = Module.lengthBytesUTF8(filename) + 1;
8
+ const pFilename = Module._malloc(filenameLen);
9
+ Module.stringToUTF8(filename, pFilename, filenameLen);
10
+
11
+ const w = Module._SherpaOnnxReadWave(pFilename);
12
+ Module._free(pFilename);
13
+
14
+
15
+ const samplesPtr = Module.HEAP32[w / 4] / 4;
16
+ const sampleRate = Module.HEAP32[w / 4 + 1];
17
+ const numSamples = Module.HEAP32[w / 4 + 2];
18
+
19
+ const samples = new Float32Array(numSamples);
20
+ for (let i = 0; i < numSamples; i++) {
21
+ samples[i] = Module.HEAPF32[samplesPtr + i];
22
+ }
23
+
24
+ Module._SherpaOnnxFreeWave(w);
25
+
26
+ return {samples: samples, sampleRate: sampleRate};
27
+ }
28
+
29
+ function readWaveFromBinaryData(uint8Array, Module) {
30
+ const numBytes = uint8Array.length * uint8Array.BYTES_PER_ELEMENT;
31
+ const pointer = Module._malloc(numBytes);
32
+
33
+ const dataOnHeap = new Uint8Array(Module.HEAPU8.buffer, pointer, numBytes);
34
+ dataOnHeap.set(uint8Array);
35
+
36
+ const w =
37
+ Module._SherpaOnnxReadWaveFromBinaryData(dataOnHeap.byteOffset, numBytes);
38
+ if (w == 0) {
39
+ console.log('Failed to read wave from binary data');
40
+ return null;
41
+ }
42
+
43
+ Module._free(pointer);
44
+
45
+ const samplesPtr = Module.HEAP32[w / 4] / 4;
46
+ const sampleRate = Module.HEAP32[w / 4 + 1];
47
+ const numSamples = Module.HEAP32[w / 4 + 2];
48
+
49
+ const samples = new Float32Array(numSamples);
50
+ for (let i = 0; i < numSamples; i++) {
51
+ samples[i] = Module.HEAPF32[samplesPtr + i];
52
+ }
53
+
54
+ Module._SherpaOnnxFreeWave(w);
55
+
56
+
57
+ return {samples: samples, sampleRate: sampleRate};
58
+ }
59
+
60
+ // data is an object
61
+ // {
62
+ // samples: a float32 array
63
+ // sampleRate: an integer
64
+ // }
65
+ function writeWave(filename, data, Module) {
66
+ const pSamples =
67
+ Module._malloc(data.samples.length * data.samples.BYTES_PER_ELEMENT);
68
+ Module.HEAPF32.set(data.samples, pSamples / data.samples.BYTES_PER_ELEMENT);
69
+
70
+ const filenameLen = Module.lengthBytesUTF8(filename) + 1;
71
+ const pFilename = Module._malloc(filenameLen);
72
+ Module.stringToUTF8(filename, pFilename, filenameLen);
73
+
74
+ Module._SherpaOnnxWriteWave(
75
+ pSamples, data.samples.length, data.sampleRate, pFilename);
76
+
77
+ Module._free(pFilename);
78
+ Module._free(pSamples);
79
+ }
80
+
81
+ if (typeof process == 'object' && typeof process.versions == 'object' &&
82
+ typeof process.versions.node == 'string') {
83
+ module.exports = {
84
+ readWave,
85
+ writeWave,
86
+ readWaveFromBinaryData,
87
+ };
88
+ }
Binary file