@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,1538 @@
1
+ function freeConfig(config, Module) {
2
+ if ('buffer' in config) {
3
+ Module._free(config.buffer);
4
+ }
5
+
6
+ if ('config' in config) {
7
+ freeConfig(config.config, Module)
8
+ }
9
+
10
+ if ('transducer' in config) {
11
+ freeConfig(config.transducer, Module)
12
+ }
13
+
14
+ if ('paraformer' in config) {
15
+ freeConfig(config.paraformer, Module)
16
+ }
17
+
18
+ if ('zipformer2Ctc' in config) {
19
+ freeConfig(config.zipformer2Ctc, Module)
20
+ }
21
+
22
+ if ('feat' in config) {
23
+ freeConfig(config.feat, Module)
24
+ }
25
+
26
+ if ('model' in config) {
27
+ freeConfig(config.model, Module)
28
+ }
29
+
30
+ if ('nemoCtc' in config) {
31
+ freeConfig(config.nemoCtc, Module)
32
+ }
33
+
34
+ if ('toneCtc' in config) {
35
+ freeConfig(config.toneCtc, Module)
36
+ }
37
+
38
+ if ('whisper' in config) {
39
+ freeConfig(config.whisper, Module)
40
+ }
41
+
42
+ if ('fireRedAsr' in config) {
43
+ freeConfig(config.fireRedAsr, Module)
44
+ }
45
+
46
+ if ('dolphin' in config) {
47
+ freeConfig(config.dolphin, Module)
48
+ }
49
+
50
+ if ('zipformerCtc' in config) {
51
+ freeConfig(config.zipformerCtc, Module)
52
+ }
53
+
54
+ if ('wenetCtc' in config) {
55
+ freeConfig(config.wenetCtc, Module)
56
+ }
57
+
58
+ if ('omnilingual' in config) {
59
+ freeConfig(config.omnilingual, Module)
60
+ }
61
+
62
+ if ('moonshine' in config) {
63
+ freeConfig(config.moonshine, Module)
64
+ }
65
+
66
+ if ('tdnn' in config) {
67
+ freeConfig(config.tdnn, Module)
68
+ }
69
+
70
+ if ('senseVoice' in config) {
71
+ freeConfig(config.senseVoice, Module)
72
+ }
73
+
74
+ if ('canary' in config) {
75
+ freeConfig(config.canary, Module)
76
+ }
77
+
78
+ if ('lm' in config) {
79
+ freeConfig(config.lm, Module)
80
+ }
81
+
82
+ if ('ctcFstDecoder' in config) {
83
+ freeConfig(config.ctcFstDecoder, Module)
84
+ }
85
+
86
+ if ('hr' in config) {
87
+ freeConfig(config.hr, Module)
88
+ }
89
+
90
+ Module._free(config.ptr);
91
+ }
92
+
93
+ // The user should free the returned pointers
94
+ function initSherpaOnnxOnlineTransducerModelConfig(config, Module) {
95
+ const encoderLen = Module.lengthBytesUTF8(config.encoder || '') + 1;
96
+ const decoderLen = Module.lengthBytesUTF8(config.decoder || '') + 1;
97
+ const joinerLen = Module.lengthBytesUTF8(config.joiner || '') + 1;
98
+
99
+ const n = encoderLen + decoderLen + joinerLen;
100
+
101
+ const buffer = Module._malloc(n);
102
+
103
+ const len = 3 * 4; // 3 pointers
104
+ const ptr = Module._malloc(len);
105
+
106
+ let offset = 0;
107
+ Module.stringToUTF8(config.encoder || '', buffer + offset, encoderLen);
108
+ offset += encoderLen;
109
+
110
+ Module.stringToUTF8(config.decoder || '', buffer + offset, decoderLen);
111
+ offset += decoderLen;
112
+
113
+ Module.stringToUTF8(config.joiner || '', buffer + offset, joinerLen);
114
+
115
+ offset = 0;
116
+ Module.setValue(ptr, buffer + offset, 'i8*');
117
+ offset += encoderLen;
118
+
119
+ Module.setValue(ptr + 4, buffer + offset, 'i8*');
120
+ offset += decoderLen;
121
+
122
+ Module.setValue(ptr + 8, buffer + offset, 'i8*');
123
+
124
+ return {
125
+ buffer: buffer, ptr: ptr, len: len,
126
+ }
127
+ }
128
+
129
+ function initSherpaOnnxOnlineParaformerModelConfig(config, Module) {
130
+ const encoderLen = Module.lengthBytesUTF8(config.encoder || '') + 1;
131
+ const decoderLen = Module.lengthBytesUTF8(config.decoder || '') + 1;
132
+
133
+ const n = encoderLen + decoderLen;
134
+ const buffer = Module._malloc(n);
135
+
136
+ const len = 2 * 4; // 2 pointers
137
+ const ptr = Module._malloc(len);
138
+
139
+ let offset = 0;
140
+ Module.stringToUTF8(config.encoder || '', buffer + offset, encoderLen);
141
+ offset += encoderLen;
142
+
143
+ Module.stringToUTF8(config.decoder || '', buffer + offset, decoderLen);
144
+
145
+ offset = 0;
146
+ Module.setValue(ptr, buffer + offset, 'i8*');
147
+ offset += encoderLen;
148
+
149
+ Module.setValue(ptr + 4, buffer + offset, 'i8*');
150
+
151
+ return {
152
+ buffer: buffer, ptr: ptr, len: len,
153
+ }
154
+ }
155
+
156
+ function initSherpaOnnxOnlineZipformer2CtcModelConfig(config, Module) {
157
+ const n = Module.lengthBytesUTF8(config.model || '') + 1;
158
+ const buffer = Module._malloc(n);
159
+
160
+ const len = 1 * 4; // 1 pointer
161
+ const ptr = Module._malloc(len);
162
+
163
+ Module.stringToUTF8(config.model || '', buffer, n);
164
+
165
+ Module.setValue(ptr, buffer, 'i8*');
166
+
167
+ return {
168
+ buffer: buffer, ptr: ptr, len: len,
169
+ }
170
+ }
171
+
172
+ function initSherpaOnnxOnlineNemoCtcModelConfig(config, Module) {
173
+ const n = Module.lengthBytesUTF8(config.model || '') + 1;
174
+ const buffer = Module._malloc(n);
175
+
176
+ const len = 1 * 4; // 1 pointer
177
+ const ptr = Module._malloc(len);
178
+
179
+ Module.stringToUTF8(config.model || '', buffer, n);
180
+
181
+ Module.setValue(ptr, buffer, 'i8*');
182
+
183
+ return {
184
+ buffer: buffer, ptr: ptr, len: len,
185
+ }
186
+ }
187
+
188
+ function initSherpaOnnxOnlineToneCtcModelConfig(config, Module) {
189
+ const n = Module.lengthBytesUTF8(config.model || '') + 1;
190
+ const buffer = Module._malloc(n);
191
+
192
+ const len = 1 * 4; // 1 pointer
193
+ const ptr = Module._malloc(len);
194
+
195
+ Module.stringToUTF8(config.model || '', buffer, n);
196
+
197
+ Module.setValue(ptr, buffer, 'i8*');
198
+
199
+ return {
200
+ buffer: buffer, ptr: ptr, len: len,
201
+ }
202
+ }
203
+
204
+ function initSherpaOnnxOnlineModelConfig(config, Module) {
205
+ if (!('transducer' in config)) {
206
+ config.transducer = {
207
+ encoder: '',
208
+ decoder: '',
209
+ joiner: '',
210
+ };
211
+ }
212
+
213
+ if (!('paraformer' in config)) {
214
+ config.paraformer = {
215
+ encoder: '',
216
+ decoder: '',
217
+ };
218
+ }
219
+
220
+ if (!('zipformer2Ctc' in config)) {
221
+ config.zipformer2Ctc = {
222
+ model: '',
223
+ };
224
+ }
225
+
226
+ if (!('nemoCtc' in config)) {
227
+ config.nemoCtc = {
228
+ model: '',
229
+ };
230
+ }
231
+
232
+ if (!('toneCtc' in config)) {
233
+ config.toneCtc = {
234
+ model: '',
235
+ };
236
+ }
237
+
238
+ if (!('tokensBuf' in config)) {
239
+ config.tokensBuf = '';
240
+ }
241
+
242
+ if (!('tokensBufSize' in config)) {
243
+ config.tokensBufSize = 0;
244
+ }
245
+
246
+ const transducer =
247
+ initSherpaOnnxOnlineTransducerModelConfig(config.transducer, Module);
248
+
249
+ const paraformer =
250
+ initSherpaOnnxOnlineParaformerModelConfig(config.paraformer, Module);
251
+
252
+ const zipformer2Ctc = initSherpaOnnxOnlineZipformer2CtcModelConfig(
253
+ config.zipformer2Ctc, Module);
254
+
255
+ const nemoCtc =
256
+ initSherpaOnnxOnlineNemoCtcModelConfig(config.nemoCtc, Module);
257
+
258
+ const toneCtc =
259
+ initSherpaOnnxOnlineToneCtcModelConfig(config.toneCtc, Module);
260
+
261
+ const len = transducer.len + paraformer.len + zipformer2Ctc.len + 9 * 4 +
262
+ nemoCtc.len + toneCtc.len;
263
+
264
+ const ptr = Module._malloc(len);
265
+
266
+ let offset = 0;
267
+ Module._CopyHeap(transducer.ptr, transducer.len, ptr + offset);
268
+ offset += transducer.len;
269
+
270
+ Module._CopyHeap(paraformer.ptr, paraformer.len, ptr + offset);
271
+ offset += paraformer.len;
272
+
273
+ Module._CopyHeap(zipformer2Ctc.ptr, zipformer2Ctc.len, ptr + offset);
274
+ offset += zipformer2Ctc.len;
275
+
276
+ const tokensLen = Module.lengthBytesUTF8(config.tokens || '') + 1;
277
+ const providerLen = Module.lengthBytesUTF8(config.provider || 'cpu') + 1;
278
+ const modelTypeLen = Module.lengthBytesUTF8(config.modelType || '') + 1;
279
+ const modelingUnitLen = Module.lengthBytesUTF8(config.modelingUnit || '') + 1;
280
+ const bpeVocabLen = Module.lengthBytesUTF8(config.bpeVocab || '') + 1;
281
+ const tokensBufLen = Module.lengthBytesUTF8(config.tokensBuf || '') + 1;
282
+
283
+ const bufferLen = tokensLen + providerLen + modelTypeLen + modelingUnitLen +
284
+ bpeVocabLen + tokensBufLen;
285
+ const buffer = Module._malloc(bufferLen);
286
+
287
+ offset = 0;
288
+ Module.stringToUTF8(config.tokens || '', buffer, tokensLen);
289
+ offset += tokensLen;
290
+
291
+ Module.stringToUTF8(config.provider || 'cpu', buffer + offset, providerLen);
292
+ offset += providerLen;
293
+
294
+ Module.stringToUTF8(config.modelType || '', buffer + offset, modelTypeLen);
295
+ offset += modelTypeLen;
296
+
297
+ Module.stringToUTF8(
298
+ config.modelingUnit || '', buffer + offset, modelingUnitLen);
299
+ offset += modelingUnitLen;
300
+
301
+ Module.stringToUTF8(config.bpeVocab || '', buffer + offset, bpeVocabLen);
302
+ offset += bpeVocabLen;
303
+
304
+ Module.stringToUTF8(config.tokensBuf || '', buffer + offset, tokensBufLen);
305
+ offset += tokensBufLen;
306
+
307
+ offset = transducer.len + paraformer.len + zipformer2Ctc.len;
308
+ Module.setValue(ptr + offset, buffer, 'i8*'); // tokens
309
+ offset += 4;
310
+
311
+ Module.setValue(ptr + offset, config.numThreads || 1, 'i32');
312
+ offset += 4;
313
+
314
+ Module.setValue(ptr + offset, buffer + tokensLen, 'i8*'); // provider
315
+ offset += 4;
316
+
317
+ Module.setValue(ptr + offset, config.debug ?? 1, 'i32');
318
+ offset += 4;
319
+
320
+ Module.setValue(
321
+ ptr + offset, buffer + tokensLen + providerLen, 'i8*'); // modelType
322
+ offset += 4;
323
+
324
+ Module.setValue(
325
+ ptr + offset, buffer + tokensLen + providerLen + modelTypeLen,
326
+ 'i8*'); // modelingUnit
327
+ offset += 4;
328
+
329
+ Module.setValue(
330
+ ptr + offset,
331
+ buffer + tokensLen + providerLen + modelTypeLen + modelingUnitLen,
332
+ 'i8*'); // bpeVocab
333
+ offset += 4;
334
+
335
+ Module.setValue(
336
+ ptr + offset,
337
+ buffer + tokensLen + providerLen + modelTypeLen + modelingUnitLen +
338
+ bpeVocabLen,
339
+ 'i8*'); // tokens_buf
340
+ offset += 4;
341
+
342
+ Module.setValue(ptr + offset, config.tokensBufSize || 0, 'i32');
343
+ offset += 4;
344
+
345
+ Module._CopyHeap(nemoCtc.ptr, nemoCtc.len, ptr + offset);
346
+ offset += nemoCtc.len;
347
+
348
+ Module._CopyHeap(toneCtc.ptr, toneCtc.len, ptr + offset);
349
+ offset += toneCtc.len;
350
+
351
+ return {
352
+ buffer: buffer, ptr: ptr, len: len, transducer: transducer,
353
+ paraformer: paraformer, zipformer2Ctc: zipformer2Ctc, nemoCtc: nemoCtc,
354
+ toneCtc: toneCtc,
355
+ }
356
+ }
357
+
358
+ function initSherpaOnnxFeatureConfig(config, Module) {
359
+ const len = 2 * 4; // 2 pointers
360
+ const ptr = Module._malloc(len);
361
+
362
+ Module.setValue(ptr, config.sampleRate || 16000, 'i32');
363
+ Module.setValue(ptr + 4, config.featureDim || 80, 'i32');
364
+ return {ptr: ptr, len: len};
365
+ }
366
+
367
+ function initSherpaOnnxHomophoneReplacerConfig(config, Module) {
368
+ const len = 3 * 4;
369
+ const ptr = Module._malloc(len);
370
+
371
+ const dictDir = '';
372
+
373
+ const dictDirLen = Module.lengthBytesUTF8(dictDir) + 1;
374
+ const lexiconLen = Module.lengthBytesUTF8(config.lexicon || '') + 1;
375
+ const ruleFstsLen = Module.lengthBytesUTF8(config.ruleFsts || '') + 1;
376
+
377
+ const bufferLen = dictDirLen + lexiconLen + ruleFstsLen;
378
+
379
+ const buffer = Module._malloc(bufferLen);
380
+ let offset = 0
381
+ Module.stringToUTF8(dictDir, buffer + offset, dictDirLen);
382
+ offset += dictDirLen;
383
+
384
+ Module.stringToUTF8(config.lexicon || '', buffer + offset, lexiconLen);
385
+ offset += lexiconLen;
386
+
387
+ Module.stringToUTF8(config.ruleFsts || '', buffer + offset, ruleFstsLen);
388
+ offset += ruleFstsLen;
389
+
390
+ Module.setValue(ptr, buffer, 'i8*');
391
+ Module.setValue(ptr + 4, buffer + dictDirLen, 'i8*');
392
+ Module.setValue(ptr + 8, buffer + dictDirLen + lexiconLen, 'i8*');
393
+
394
+ return {ptr: ptr, len: len, buffer: buffer};
395
+ }
396
+
397
+ function initSherpaOnnxOnlineCtcFstDecoderConfig(config, Module) {
398
+ const len = 2 * 4;
399
+ const ptr = Module._malloc(len);
400
+
401
+ const graphLen = Module.lengthBytesUTF8(config.graph || '') + 1;
402
+ const buffer = Module._malloc(graphLen);
403
+ Module.stringToUTF8(config.graph, buffer, graphLen);
404
+
405
+ Module.setValue(ptr, buffer, 'i8*');
406
+ Module.setValue(ptr + 4, config.maxActive || 3000, 'i32');
407
+ return {ptr: ptr, len: len, buffer: buffer};
408
+ }
409
+
410
+ function initSherpaOnnxOnlineRecognizerConfig(config, Module) {
411
+ if (!('featConfig' in config)) {
412
+ config.featConfig = {
413
+ sampleRate: 16000,
414
+ featureDim: 80,
415
+ };
416
+ }
417
+
418
+ if (!('ctcFstDecoderConfig' in config)) {
419
+ config.ctcFstDecoderConfig = {
420
+ graph: '',
421
+ maxActive: 3000,
422
+ };
423
+ }
424
+
425
+ if (!('hotwordsBuf' in config)) {
426
+ config.hotwordsBuf = '';
427
+ }
428
+
429
+ if (!('hotwordsBufSize' in config)) {
430
+ config.hotwordsBufSize = 0;
431
+ }
432
+
433
+ if (!('hr' in config)) {
434
+ config.hr = {
435
+ lexicon: '',
436
+ ruleFsts: '',
437
+ };
438
+ }
439
+
440
+ const feat = initSherpaOnnxFeatureConfig(config.featConfig, Module);
441
+ const model = initSherpaOnnxOnlineModelConfig(config.modelConfig, Module);
442
+ const ctcFstDecoder = initSherpaOnnxOnlineCtcFstDecoderConfig(
443
+ config.ctcFstDecoderConfig, Module)
444
+ const hr = initSherpaOnnxHomophoneReplacerConfig(config.hr, Module);
445
+
446
+ const len = feat.len + model.len + 8 * 4 + ctcFstDecoder.len + 5 * 4 + hr.len;
447
+ const ptr = Module._malloc(len);
448
+
449
+ let offset = 0;
450
+ Module._CopyHeap(feat.ptr, feat.len, ptr + offset);
451
+ offset += feat.len;
452
+
453
+ Module._CopyHeap(model.ptr, model.len, ptr + offset);
454
+ offset += model.len;
455
+
456
+ const decodingMethodLen =
457
+ Module.lengthBytesUTF8(config.decodingMethod || 'greedy_search') + 1;
458
+ const hotwordsFileLen = Module.lengthBytesUTF8(config.hotwordsFile || '') + 1;
459
+ const ruleFstsFileLen = Module.lengthBytesUTF8(config.ruleFsts || '') + 1;
460
+ const ruleFarsFileLen = Module.lengthBytesUTF8(config.ruleFars || '') + 1;
461
+ const hotwordsBufLen = Module.lengthBytesUTF8(config.hotwordsBuf || '') + 1;
462
+ const bufferLen = decodingMethodLen + hotwordsFileLen + ruleFstsFileLen +
463
+ ruleFarsFileLen + hotwordsBufLen;
464
+ const buffer = Module._malloc(bufferLen);
465
+
466
+ offset = 0;
467
+ Module.stringToUTF8(
468
+ config.decodingMethod || 'greedy_search', buffer, decodingMethodLen);
469
+ offset += decodingMethodLen;
470
+
471
+ Module.stringToUTF8(
472
+ config.hotwordsFile || '', buffer + offset, hotwordsFileLen);
473
+ offset += hotwordsFileLen;
474
+
475
+ Module.stringToUTF8(config.ruleFsts || '', buffer + offset, ruleFstsFileLen);
476
+ offset += ruleFstsFileLen;
477
+
478
+ Module.stringToUTF8(config.ruleFars || '', buffer + offset, ruleFarsFileLen);
479
+ offset += ruleFarsFileLen;
480
+
481
+ Module.stringToUTF8(
482
+ config.hotwordsBuf || '', buffer + offset, hotwordsBufLen);
483
+ offset += hotwordsBufLen;
484
+
485
+ offset = feat.len + model.len;
486
+ Module.setValue(ptr + offset, buffer, 'i8*'); // decoding method
487
+ offset += 4;
488
+
489
+ Module.setValue(ptr + offset, config.maxActivePaths || 4, 'i32');
490
+ offset += 4;
491
+
492
+ Module.setValue(ptr + offset, config.enableEndpoint || 0, 'i32');
493
+ offset += 4;
494
+
495
+ Module.setValue(ptr + offset, config.rule1MinTrailingSilence || 2.4, 'float');
496
+ offset += 4;
497
+
498
+ Module.setValue(ptr + offset, config.rule2MinTrailingSilence || 1.2, 'float');
499
+ offset += 4;
500
+
501
+ Module.setValue(ptr + offset, config.rule3MinUtteranceLength || 20, 'float');
502
+ offset += 4;
503
+
504
+ Module.setValue(ptr + offset, buffer + decodingMethodLen, 'i8*');
505
+ offset += 4;
506
+
507
+ Module.setValue(ptr + offset, config.hotwordsScore || 1.5, 'float');
508
+ offset += 4;
509
+
510
+ Module._CopyHeap(ctcFstDecoder.ptr, ctcFstDecoder.len, ptr + offset);
511
+ offset += ctcFstDecoder.len;
512
+
513
+ Module.setValue(
514
+ ptr + offset, buffer + decodingMethodLen + hotwordsFileLen, 'i8*');
515
+ offset += 4;
516
+
517
+ Module.setValue(
518
+ ptr + offset,
519
+ buffer + decodingMethodLen + hotwordsFileLen + ruleFstsFileLen, 'i8*');
520
+ offset += 4;
521
+
522
+ Module.setValue(ptr + offset, config.blankPenalty || 0, 'float');
523
+ offset += 4;
524
+
525
+ Module.setValue(
526
+ ptr + offset,
527
+ buffer + decodingMethodLen + hotwordsFileLen + ruleFstsFileLen +
528
+ ruleFarsFileLen,
529
+ 'i8*');
530
+ offset += 4;
531
+
532
+ Module.setValue(ptr + offset, config.hotwordsBufSize || 0, 'i32');
533
+ offset += 4;
534
+
535
+ Module._CopyHeap(hr.ptr, hr.len, ptr + offset);
536
+ offset += hr.len;
537
+
538
+ return {
539
+ buffer: buffer, ptr: ptr, len: len, feat: feat, model: model,
540
+ ctcFstDecoder: ctcFstDecoder, hr: hr,
541
+ }
542
+ }
543
+
544
+ function createOnlineRecognizer(Module, myConfig) {
545
+ const onlineTransducerModelConfig = {
546
+ encoder: '',
547
+ decoder: '',
548
+ joiner: '',
549
+ };
550
+
551
+ const onlineParaformerModelConfig = {
552
+ encoder: '',
553
+ decoder: '',
554
+ };
555
+
556
+ const onlineZipformer2CtcModelConfig = {
557
+ model: '',
558
+ };
559
+
560
+ const onlineNemoCtcModelConfig = {
561
+ model: '',
562
+ };
563
+
564
+ const onlineToneCtcModelConfig = {
565
+ model: '',
566
+ };
567
+
568
+ let type = 0;
569
+
570
+ switch (type) {
571
+ case 0:
572
+ // transducer
573
+ onlineTransducerModelConfig.encoder = './encoder.onnx';
574
+ onlineTransducerModelConfig.decoder = './decoder.onnx';
575
+ onlineTransducerModelConfig.joiner = './joiner.onnx';
576
+ break;
577
+ case 1:
578
+ // paraformer
579
+ onlineParaformerModelConfig.encoder = './encoder.onnx';
580
+ onlineParaformerModelConfig.decoder = './decoder.onnx';
581
+ break;
582
+ case 2:
583
+ // zipformer2Ctc
584
+ onlineZipformer2CtcModelConfig.model = './encoder.onnx';
585
+ break;
586
+ case 3:
587
+ // nemoCtc
588
+ onlineNemoCtcModelConfig.model = './nemo-ctc.onnx';
589
+ break;
590
+ case 4:
591
+ // toneCtc
592
+ onlineToneCtcModelConfig.model = './tone-ctc.onnx';
593
+ break;
594
+ }
595
+
596
+
597
+ const onlineModelConfig = {
598
+ transducer: onlineTransducerModelConfig,
599
+ paraformer: onlineParaformerModelConfig,
600
+ zipformer2Ctc: onlineZipformer2CtcModelConfig,
601
+ nemoCtc: onlineNemoCtcModelConfig,
602
+ toneCtc: onlineToneCtcModelConfig,
603
+ tokens: './tokens.txt',
604
+ numThreads: 1,
605
+ provider: 'cpu',
606
+ debug: 1,
607
+ modelType: '',
608
+ modelingUnit: 'cjkchar',
609
+ bpeVocab: '',
610
+ };
611
+
612
+ const featureConfig = {
613
+ sampleRate: 16000, // it is ignored when toneCtc is used
614
+ featureDim: 80, // it is ignored when toneCtc is used
615
+ };
616
+
617
+ let recognizerConfig = {
618
+ featConfig: featureConfig,
619
+ modelConfig: onlineModelConfig,
620
+ decodingMethod: 'greedy_search',
621
+ maxActivePaths: 4,
622
+ enableEndpoint: 1,
623
+ rule1MinTrailingSilence: 2.4,
624
+ rule2MinTrailingSilence: 1.2,
625
+ rule3MinUtteranceLength: 20,
626
+ hotwordsFile: '',
627
+ hotwordsScore: 1.5,
628
+ ctcFstDecoderConfig: {
629
+ graph: '',
630
+ maxActive: 3000,
631
+ },
632
+ ruleFsts: '',
633
+ ruleFars: '',
634
+ };
635
+ if (myConfig) {
636
+ recognizerConfig = myConfig;
637
+ }
638
+
639
+ return new OnlineRecognizer(recognizerConfig, Module);
640
+ }
641
+
642
+ function initSherpaOnnxOfflineTransducerModelConfig(config, Module) {
643
+ const encoderLen = Module.lengthBytesUTF8(config.encoder || '') + 1;
644
+ const decoderLen = Module.lengthBytesUTF8(config.decoder || '') + 1;
645
+ const joinerLen = Module.lengthBytesUTF8(config.joiner || '') + 1;
646
+
647
+ const n = encoderLen + decoderLen + joinerLen;
648
+
649
+ const buffer = Module._malloc(n);
650
+
651
+ const len = 3 * 4; // 3 pointers
652
+ const ptr = Module._malloc(len);
653
+
654
+ let offset = 0;
655
+ Module.stringToUTF8(config.encoder || '', buffer + offset, encoderLen);
656
+ offset += encoderLen;
657
+
658
+ Module.stringToUTF8(config.decoder || '', buffer + offset, decoderLen);
659
+ offset += decoderLen;
660
+
661
+ Module.stringToUTF8(config.joiner || '', buffer + offset, joinerLen);
662
+
663
+ offset = 0;
664
+ Module.setValue(ptr, buffer + offset, 'i8*');
665
+ offset += encoderLen;
666
+
667
+ Module.setValue(ptr + 4, buffer + offset, 'i8*');
668
+ offset += decoderLen;
669
+
670
+ Module.setValue(ptr + 8, buffer + offset, 'i8*');
671
+
672
+ return {
673
+ buffer: buffer, ptr: ptr, len: len,
674
+ }
675
+ }
676
+
677
+ function initSherpaOnnxOfflineParaformerModelConfig(config, Module) {
678
+ const n = Module.lengthBytesUTF8(config.model || '') + 1;
679
+
680
+ const buffer = Module._malloc(n);
681
+
682
+ const len = 1 * 4; // 1 pointer
683
+ const ptr = Module._malloc(len);
684
+
685
+ Module.stringToUTF8(config.model || '', buffer, n);
686
+
687
+ Module.setValue(ptr, buffer, 'i8*');
688
+
689
+ return {
690
+ buffer: buffer, ptr: ptr, len: len,
691
+ }
692
+ }
693
+
694
+ function initSherpaOnnxOfflineNemoEncDecCtcModelConfig(config, Module) {
695
+ const n = Module.lengthBytesUTF8(config.model || '') + 1;
696
+
697
+ const buffer = Module._malloc(n);
698
+
699
+ const len = 1 * 4; // 1 pointer
700
+ const ptr = Module._malloc(len);
701
+
702
+ Module.stringToUTF8(config.model || '', buffer, n);
703
+
704
+ Module.setValue(ptr, buffer, 'i8*');
705
+
706
+ return {
707
+ buffer: buffer, ptr: ptr, len: len,
708
+ }
709
+ }
710
+
711
+ function initSherpaOnnxOfflineDolphinModelConfig(config, Module) {
712
+ const n = Module.lengthBytesUTF8(config.model || '') + 1;
713
+
714
+ const buffer = Module._malloc(n);
715
+
716
+ const len = 1 * 4; // 1 pointer
717
+ const ptr = Module._malloc(len);
718
+
719
+ Module.stringToUTF8(config.model || '', buffer, n);
720
+
721
+ Module.setValue(ptr, buffer, 'i8*');
722
+
723
+ return {
724
+ buffer: buffer, ptr: ptr, len: len,
725
+ }
726
+ }
727
+
728
+ function initSherpaOnnxOfflineZipformerCtcModelConfig(config, Module) {
729
+ const n = Module.lengthBytesUTF8(config.model || '') + 1;
730
+
731
+ const buffer = Module._malloc(n);
732
+
733
+ const len = 1 * 4; // 1 pointer
734
+ const ptr = Module._malloc(len);
735
+
736
+ Module.stringToUTF8(config.model || '', buffer, n);
737
+
738
+ Module.setValue(ptr, buffer, 'i8*');
739
+
740
+ return {
741
+ buffer: buffer, ptr: ptr, len: len,
742
+ }
743
+ }
744
+
745
+ function initSherpaOnnxOfflineWenetCtcModelConfig(config, Module) {
746
+ const n = Module.lengthBytesUTF8(config.model || '') + 1;
747
+
748
+ const buffer = Module._malloc(n);
749
+
750
+ const len = 1 * 4; // 1 pointer
751
+ const ptr = Module._malloc(len);
752
+
753
+ Module.stringToUTF8(config.model || '', buffer, n);
754
+
755
+ Module.setValue(ptr, buffer, 'i8*');
756
+
757
+ return {
758
+ buffer: buffer, ptr: ptr, len: len,
759
+ }
760
+ }
761
+
762
+ function initSherpaOnnxOfflineOmnilingualAsrCtcModelConfig(config, Module) {
763
+ const n = Module.lengthBytesUTF8(config.model || '') + 1;
764
+
765
+ const buffer = Module._malloc(n);
766
+
767
+ const len = 1 * 4; // 1 pointer
768
+ const ptr = Module._malloc(len);
769
+
770
+ Module.stringToUTF8(config.model || '', buffer, n);
771
+
772
+ Module.setValue(ptr, buffer, 'i8*');
773
+
774
+ return {
775
+ buffer: buffer, ptr: ptr, len: len,
776
+ }
777
+ }
778
+
779
+ function initSherpaOnnxOfflineWhisperModelConfig(config, Module) {
780
+ const encoderLen = Module.lengthBytesUTF8(config.encoder || '') + 1;
781
+ const decoderLen = Module.lengthBytesUTF8(config.decoder || '') + 1;
782
+ const languageLen = Module.lengthBytesUTF8(config.language || '') + 1;
783
+ const taskLen = Module.lengthBytesUTF8(config.task || '') + 1;
784
+
785
+ const n = encoderLen + decoderLen + languageLen + taskLen;
786
+ const buffer = Module._malloc(n);
787
+
788
+ const len = 5 * 4; // 4 pointers + 1 int32
789
+ const ptr = Module._malloc(len);
790
+
791
+ let offset = 0;
792
+ Module.stringToUTF8(config.encoder || '', buffer + offset, encoderLen);
793
+ offset += encoderLen;
794
+
795
+ Module.stringToUTF8(config.decoder || '', buffer + offset, decoderLen);
796
+ offset += decoderLen;
797
+
798
+ Module.stringToUTF8(config.language || '', buffer + offset, languageLen);
799
+ offset += languageLen;
800
+
801
+ Module.stringToUTF8(config.task || '', buffer + offset, taskLen);
802
+
803
+ offset = 0;
804
+ Module.setValue(ptr, buffer + offset, 'i8*');
805
+ offset += encoderLen;
806
+
807
+ Module.setValue(ptr + 4, buffer + offset, 'i8*');
808
+ offset += decoderLen;
809
+
810
+ Module.setValue(ptr + 8, buffer + offset, 'i8*');
811
+ offset += languageLen;
812
+
813
+ Module.setValue(ptr + 12, buffer + offset, 'i8*');
814
+ offset += taskLen;
815
+
816
+ Module.setValue(ptr + 16, config.tailPaddings || 2000, 'i32');
817
+
818
+ return {
819
+ buffer: buffer, ptr: ptr, len: len,
820
+ }
821
+ }
822
+
823
+ function initSherpaOnnxOfflineCanaryModelConfig(config, Module) {
824
+ const encoderLen = Module.lengthBytesUTF8(config.encoder || '') + 1;
825
+ const decoderLen = Module.lengthBytesUTF8(config.decoder || '') + 1;
826
+ const srcLangLen = Module.lengthBytesUTF8(config.srcLang || '') + 1;
827
+ const tgtLangLen = Module.lengthBytesUTF8(config.tgtLang || '') + 1;
828
+
829
+ const n = encoderLen + decoderLen + srcLangLen + tgtLangLen;
830
+ const buffer = Module._malloc(n);
831
+
832
+ const len = 5 * 4; // 4 pointers + 1 int32
833
+ const ptr = Module._malloc(len);
834
+
835
+ let offset = 0;
836
+ Module.stringToUTF8(config.encoder || '', buffer + offset, encoderLen);
837
+ offset += encoderLen;
838
+
839
+ Module.stringToUTF8(config.decoder || '', buffer + offset, decoderLen);
840
+ offset += decoderLen;
841
+
842
+ Module.stringToUTF8(config.srcLang || '', buffer + offset, srcLangLen);
843
+ offset += srcLangLen;
844
+
845
+ Module.stringToUTF8(config.tgtLang || '', buffer + offset, tgtLangLen);
846
+ offset += tgtLangLen;
847
+
848
+ offset = 0;
849
+ Module.setValue(ptr, buffer + offset, 'i8*');
850
+ offset += encoderLen;
851
+
852
+ Module.setValue(ptr + 4, buffer + offset, 'i8*');
853
+ offset += decoderLen;
854
+
855
+ Module.setValue(ptr + 8, buffer + offset, 'i8*');
856
+ offset += srcLangLen;
857
+
858
+ Module.setValue(ptr + 12, buffer + offset, 'i8*');
859
+ offset += tgtLangLen;
860
+
861
+ Module.setValue(ptr + 16, config.usePnc ?? 1, 'i32');
862
+
863
+ return {
864
+ buffer: buffer, ptr: ptr, len: len,
865
+ }
866
+ }
867
+
868
+ function initSherpaOnnxOfflineMoonshineModelConfig(config, Module) {
869
+ const preprocessorLen = Module.lengthBytesUTF8(config.preprocessor || '') + 1;
870
+ const encoderLen = Module.lengthBytesUTF8(config.encoder || '') + 1;
871
+ const uncachedDecoderLen =
872
+ Module.lengthBytesUTF8(config.uncachedDecoder || '') + 1;
873
+ const cachedDecoderLen =
874
+ Module.lengthBytesUTF8(config.cachedDecoder || '') + 1;
875
+
876
+ const n =
877
+ preprocessorLen + encoderLen + uncachedDecoderLen + cachedDecoderLen;
878
+ const buffer = Module._malloc(n);
879
+
880
+ const len = 4 * 4; // 4 pointers
881
+ const ptr = Module._malloc(len);
882
+
883
+ let offset = 0;
884
+ Module.stringToUTF8(
885
+ config.preprocessor || '', buffer + offset, preprocessorLen);
886
+ offset += preprocessorLen;
887
+
888
+ Module.stringToUTF8(config.encoder || '', buffer + offset, encoderLen);
889
+ offset += encoderLen;
890
+
891
+ Module.stringToUTF8(
892
+ config.uncachedDecoder || '', buffer + offset, uncachedDecoderLen);
893
+ offset += uncachedDecoderLen;
894
+
895
+ Module.stringToUTF8(
896
+ config.cachedDecoder || '', buffer + offset, cachedDecoderLen);
897
+ offset += cachedDecoderLen;
898
+
899
+ offset = 0;
900
+ Module.setValue(ptr, buffer + offset, 'i8*');
901
+ offset += preprocessorLen;
902
+
903
+ Module.setValue(ptr + 4, buffer + offset, 'i8*');
904
+ offset += encoderLen;
905
+
906
+ Module.setValue(ptr + 8, buffer + offset, 'i8*');
907
+ offset += uncachedDecoderLen;
908
+
909
+ Module.setValue(ptr + 12, buffer + offset, 'i8*');
910
+ offset += cachedDecoderLen;
911
+
912
+ return {
913
+ buffer: buffer, ptr: ptr, len: len,
914
+ }
915
+ }
916
+
917
+ function initSherpaOnnxOfflineFireRedAsrModelConfig(config, Module) {
918
+ const encoderLen = Module.lengthBytesUTF8(config.encoder || '') + 1;
919
+ const decoderLen = Module.lengthBytesUTF8(config.decoder || '') + 1;
920
+
921
+ const n = encoderLen + decoderLen;
922
+ const buffer = Module._malloc(n);
923
+
924
+ const len = 2 * 4; // 2 pointers
925
+ const ptr = Module._malloc(len);
926
+
927
+ let offset = 0;
928
+ Module.stringToUTF8(config.encoder || '', buffer + offset, encoderLen);
929
+ offset += encoderLen;
930
+
931
+ Module.stringToUTF8(config.decoder || '', buffer + offset, decoderLen);
932
+ offset += decoderLen;
933
+
934
+ offset = 0;
935
+ Module.setValue(ptr, buffer + offset, 'i8*');
936
+ offset += encoderLen;
937
+
938
+ Module.setValue(ptr + 4, buffer + offset, 'i8*');
939
+ offset += decoderLen;
940
+
941
+ return {
942
+ buffer: buffer, ptr: ptr, len: len,
943
+ }
944
+ }
945
+
946
+ function initSherpaOnnxOfflineTdnnModelConfig(config, Module) {
947
+ const n = Module.lengthBytesUTF8(config.model || '') + 1;
948
+ const buffer = Module._malloc(n);
949
+
950
+ const len = 1 * 4; // 1 pointer
951
+ const ptr = Module._malloc(len);
952
+
953
+ Module.stringToUTF8(config.model || '', buffer, n);
954
+
955
+ Module.setValue(ptr, buffer, 'i8*');
956
+
957
+ return {
958
+ buffer: buffer, ptr: ptr, len: len,
959
+ }
960
+ }
961
+
962
+ function initSherpaOnnxOfflineSenseVoiceModelConfig(config, Module) {
963
+ const modelLen = Module.lengthBytesUTF8(config.model || '') + 1;
964
+ const languageLen = Module.lengthBytesUTF8(config.language || '') + 1;
965
+
966
+ // useItn is a integer with 4 bytes
967
+ const n = modelLen + languageLen;
968
+ const buffer = Module._malloc(n);
969
+
970
+ const len = 3 * 4; // 2 pointers + 1 int
971
+ const ptr = Module._malloc(len);
972
+
973
+ let offset = 0;
974
+ Module.stringToUTF8(config.model || '', buffer + offset, modelLen);
975
+ offset += modelLen;
976
+
977
+ Module.stringToUTF8(config.language || '', buffer + offset, languageLen);
978
+ offset += languageLen;
979
+
980
+ offset = 0;
981
+ Module.setValue(ptr, buffer + offset, 'i8*');
982
+ offset += modelLen;
983
+
984
+ Module.setValue(ptr + 4, buffer + offset, 'i8*');
985
+ offset += languageLen;
986
+
987
+ Module.setValue(ptr + 8, config.useInverseTextNormalization ?? 0, 'i32');
988
+
989
+ return {
990
+ buffer: buffer, ptr: ptr, len: len,
991
+ }
992
+ }
993
+
994
+ function initSherpaOnnxOfflineLMConfig(config, Module) {
995
+ const n = Module.lengthBytesUTF8(config.model || '') + 1;
996
+ const buffer = Module._malloc(n);
997
+
998
+ const len = 2 * 4;
999
+ const ptr = Module._malloc(len);
1000
+
1001
+ Module.stringToUTF8(config.model || '', buffer, n);
1002
+ Module.setValue(ptr, buffer, 'i8*');
1003
+ Module.setValue(ptr + 4, config.scale || 1, 'float');
1004
+
1005
+ return {
1006
+ buffer: buffer, ptr: ptr, len: len,
1007
+ }
1008
+ }
1009
+
1010
+ function initSherpaOnnxOfflineModelConfig(config, Module) {
1011
+ if (!('transducer' in config)) {
1012
+ config.transducer = {
1013
+ encoder: '',
1014
+ decoder: '',
1015
+ joiner: '',
1016
+ };
1017
+ }
1018
+
1019
+ if (!('paraformer' in config)) {
1020
+ config.paraformer = {
1021
+ model: '',
1022
+ };
1023
+ }
1024
+
1025
+ if (!('nemoCtc' in config)) {
1026
+ config.nemoCtc = {
1027
+ model: '',
1028
+ };
1029
+ }
1030
+
1031
+ if (!('dolphin' in config)) {
1032
+ config.dolphin = {
1033
+ model: '',
1034
+ };
1035
+ }
1036
+
1037
+ if (!('zipformerCtc' in config)) {
1038
+ config.zipformerCtc = {
1039
+ model: '',
1040
+ };
1041
+ }
1042
+
1043
+ if (!('wenetCtc' in config)) {
1044
+ config.wenetCtc = {
1045
+ model: '',
1046
+ };
1047
+ }
1048
+
1049
+ if (!('omnilingual' in config)) {
1050
+ config.omnilingual = {
1051
+ model: '',
1052
+ };
1053
+ }
1054
+
1055
+ if (!('whisper' in config)) {
1056
+ config.whisper = {
1057
+ encoder: '',
1058
+ decoder: '',
1059
+ language: '',
1060
+ task: '',
1061
+ tailPaddings: -1,
1062
+ };
1063
+ }
1064
+
1065
+ if (!('moonshine' in config)) {
1066
+ config.moonshine = {
1067
+ preprocessor: '',
1068
+ encoder: '',
1069
+ uncachedDecoder: '',
1070
+ cachedDecoder: '',
1071
+ };
1072
+ }
1073
+
1074
+ if (!('fireRedAsr' in config)) {
1075
+ config.fireRedAsr = {
1076
+ encoder: '',
1077
+ decoder: '',
1078
+ };
1079
+ }
1080
+
1081
+ if (!('tdnn' in config)) {
1082
+ config.tdnn = {
1083
+ model: '',
1084
+ };
1085
+ }
1086
+
1087
+ if (!('senseVoice' in config)) {
1088
+ config.senseVoice = {
1089
+ model: '',
1090
+ language: '',
1091
+ useInverseTextNormalization: 0,
1092
+ };
1093
+ }
1094
+
1095
+ if (!('canary' in config)) {
1096
+ config.canary = {
1097
+ encoder: '',
1098
+ decoder: '',
1099
+ srcLang: '',
1100
+ tgtLang: '',
1101
+ usePnc: 1,
1102
+ };
1103
+ }
1104
+
1105
+ const transducer =
1106
+ initSherpaOnnxOfflineTransducerModelConfig(config.transducer, Module);
1107
+
1108
+ const paraformer =
1109
+ initSherpaOnnxOfflineParaformerModelConfig(config.paraformer, Module);
1110
+
1111
+ const nemoCtc =
1112
+ initSherpaOnnxOfflineNemoEncDecCtcModelConfig(config.nemoCtc, Module);
1113
+
1114
+ const whisper =
1115
+ initSherpaOnnxOfflineWhisperModelConfig(config.whisper, Module);
1116
+
1117
+ const tdnn = initSherpaOnnxOfflineTdnnModelConfig(config.tdnn, Module);
1118
+
1119
+ const senseVoice =
1120
+ initSherpaOnnxOfflineSenseVoiceModelConfig(config.senseVoice, Module);
1121
+
1122
+ const moonshine =
1123
+ initSherpaOnnxOfflineMoonshineModelConfig(config.moonshine, Module);
1124
+
1125
+ const fireRedAsr =
1126
+ initSherpaOnnxOfflineFireRedAsrModelConfig(config.fireRedAsr, Module);
1127
+
1128
+ const dolphin =
1129
+ initSherpaOnnxOfflineDolphinModelConfig(config.dolphin, Module);
1130
+
1131
+ const zipformerCtc =
1132
+ initSherpaOnnxOfflineZipformerCtcModelConfig(config.zipformerCtc, Module);
1133
+
1134
+ const canary = initSherpaOnnxOfflineCanaryModelConfig(config.canary, Module);
1135
+
1136
+ const wenetCtc =
1137
+ initSherpaOnnxOfflineWenetCtcModelConfig(config.wenetCtc, Module);
1138
+
1139
+ const omnilingual = initSherpaOnnxOfflineOmnilingualAsrCtcModelConfig(
1140
+ config.omnilingual, Module);
1141
+
1142
+ const len = transducer.len + paraformer.len + nemoCtc.len + whisper.len +
1143
+ tdnn.len + 8 * 4 + senseVoice.len + moonshine.len + fireRedAsr.len +
1144
+ dolphin.len + zipformerCtc.len + canary.len + wenetCtc.len +
1145
+ omnilingual.len;
1146
+
1147
+ const ptr = Module._malloc(len);
1148
+
1149
+ let offset = 0;
1150
+ Module._CopyHeap(transducer.ptr, transducer.len, ptr + offset);
1151
+ offset += transducer.len;
1152
+
1153
+ Module._CopyHeap(paraformer.ptr, paraformer.len, ptr + offset);
1154
+ offset += paraformer.len;
1155
+
1156
+ Module._CopyHeap(nemoCtc.ptr, nemoCtc.len, ptr + offset);
1157
+ offset += nemoCtc.len;
1158
+
1159
+ Module._CopyHeap(whisper.ptr, whisper.len, ptr + offset);
1160
+ offset += whisper.len;
1161
+
1162
+ Module._CopyHeap(tdnn.ptr, tdnn.len, ptr + offset);
1163
+ offset += tdnn.len;
1164
+
1165
+ const tokensLen = Module.lengthBytesUTF8(config.tokens || '') + 1;
1166
+ const providerLen = Module.lengthBytesUTF8(config.provider || 'cpu') + 1;
1167
+ const modelTypeLen = Module.lengthBytesUTF8(config.modelType || '') + 1;
1168
+ const modelingUnitLen = Module.lengthBytesUTF8(config.modelingUnit || '') + 1;
1169
+ const bpeVocabLen = Module.lengthBytesUTF8(config.bpeVocab || '') + 1;
1170
+ const teleSpeechCtcLen =
1171
+ Module.lengthBytesUTF8(config.teleSpeechCtc || '') + 1;
1172
+
1173
+ const bufferLen = tokensLen + providerLen + modelTypeLen + modelingUnitLen +
1174
+ bpeVocabLen + teleSpeechCtcLen;
1175
+
1176
+ const buffer = Module._malloc(bufferLen);
1177
+
1178
+ offset = 0;
1179
+ Module.stringToUTF8(config.tokens, buffer, tokensLen);
1180
+ offset += tokensLen;
1181
+
1182
+ Module.stringToUTF8(config.provider || 'cpu', buffer + offset, providerLen);
1183
+ offset += providerLen;
1184
+
1185
+ Module.stringToUTF8(config.modelType || '', buffer + offset, modelTypeLen);
1186
+ offset += modelTypeLen;
1187
+
1188
+ Module.stringToUTF8(
1189
+ config.modelingUnit || '', buffer + offset, modelingUnitLen);
1190
+ offset += modelingUnitLen;
1191
+
1192
+ Module.stringToUTF8(config.bpeVocab || '', buffer + offset, bpeVocabLen);
1193
+ offset += bpeVocabLen;
1194
+
1195
+ Module.stringToUTF8(
1196
+ config.teleSpeechCtc || '', buffer + offset, teleSpeechCtcLen);
1197
+ offset += teleSpeechCtcLen;
1198
+
1199
+ offset =
1200
+ transducer.len + paraformer.len + nemoCtc.len + whisper.len + tdnn.len;
1201
+ Module.setValue(ptr + offset, buffer, 'i8*'); // tokens
1202
+ offset += 4;
1203
+
1204
+ Module.setValue(ptr + offset, config.numThreads || 1, 'i32');
1205
+ offset += 4;
1206
+
1207
+ Module.setValue(ptr + offset, config.debug ?? 1, 'i32');
1208
+ offset += 4;
1209
+
1210
+ Module.setValue(ptr + offset, buffer + tokensLen, 'i8*'); // provider
1211
+ offset += 4;
1212
+
1213
+ Module.setValue(
1214
+ ptr + offset, buffer + tokensLen + providerLen, 'i8*'); // modelType
1215
+ offset += 4;
1216
+
1217
+ Module.setValue(
1218
+ ptr + offset, buffer + tokensLen + providerLen + modelTypeLen,
1219
+ 'i8*'); // modelingUnit
1220
+ offset += 4;
1221
+
1222
+ Module.setValue(
1223
+ ptr + offset,
1224
+ buffer + tokensLen + providerLen + modelTypeLen + modelingUnitLen,
1225
+ 'i8*'); // bpeVocab
1226
+ offset += 4;
1227
+
1228
+ Module.setValue(
1229
+ ptr + offset,
1230
+ buffer + tokensLen + providerLen + modelTypeLen + modelingUnitLen +
1231
+ bpeVocabLen,
1232
+ 'i8*'); // teleSpeechCtc
1233
+ offset += 4;
1234
+
1235
+ Module._CopyHeap(senseVoice.ptr, senseVoice.len, ptr + offset);
1236
+ offset += senseVoice.len;
1237
+
1238
+ Module._CopyHeap(moonshine.ptr, moonshine.len, ptr + offset);
1239
+ offset += moonshine.len;
1240
+
1241
+ Module._CopyHeap(fireRedAsr.ptr, fireRedAsr.len, ptr + offset);
1242
+ offset += fireRedAsr.len;
1243
+
1244
+ Module._CopyHeap(dolphin.ptr, dolphin.len, ptr + offset);
1245
+ offset += dolphin.len;
1246
+
1247
+ Module._CopyHeap(zipformerCtc.ptr, zipformerCtc.len, ptr + offset);
1248
+ offset += zipformerCtc.len;
1249
+
1250
+ Module._CopyHeap(canary.ptr, canary.len, ptr + offset);
1251
+ offset += canary.len;
1252
+
1253
+ Module._CopyHeap(wenetCtc.ptr, wenetCtc.len, ptr + offset);
1254
+ offset += wenetCtc.len;
1255
+
1256
+ Module._CopyHeap(omnilingual.ptr, omnilingual.len, ptr + offset);
1257
+ offset += omnilingual.len;
1258
+
1259
+ return {
1260
+ buffer: buffer, ptr: ptr, len: len, transducer: transducer,
1261
+ paraformer: paraformer, nemoCtc: nemoCtc, whisper: whisper, tdnn: tdnn,
1262
+ senseVoice: senseVoice, moonshine: moonshine, fireRedAsr: fireRedAsr,
1263
+ dolphin: dolphin, zipformerCtc: zipformerCtc, canary: canary,
1264
+ wenetCtc: wenetCtc, omnilingual: omnilingual
1265
+ }
1266
+ }
1267
+
1268
+ function initSherpaOnnxOfflineRecognizerConfig(config, Module) {
1269
+ if (!('featConfig' in config)) {
1270
+ config.featConfig = {
1271
+ sampleRate: 16000,
1272
+ featureDim: 80,
1273
+ };
1274
+ }
1275
+
1276
+ if (!('lmConfig' in config)) {
1277
+ config.lmConfig = {
1278
+ model: '',
1279
+ scale: 1.0,
1280
+ };
1281
+ }
1282
+
1283
+ if (!('hr' in config)) {
1284
+ config.hr = {
1285
+ lexicon: '',
1286
+ ruleFsts: '',
1287
+ };
1288
+ }
1289
+
1290
+ const feat = initSherpaOnnxFeatureConfig(config.featConfig, Module);
1291
+ const model = initSherpaOnnxOfflineModelConfig(config.modelConfig, Module);
1292
+ const lm = initSherpaOnnxOfflineLMConfig(config.lmConfig, Module);
1293
+ const hr = initSherpaOnnxHomophoneReplacerConfig(config.hr, Module);
1294
+
1295
+ const len = feat.len + model.len + lm.len + 7 * 4 + hr.len;
1296
+ const ptr = Module._malloc(len);
1297
+
1298
+ let offset = 0;
1299
+ Module._CopyHeap(feat.ptr, feat.len, ptr + offset);
1300
+ offset += feat.len;
1301
+
1302
+ Module._CopyHeap(model.ptr, model.len, ptr + offset);
1303
+ offset += model.len;
1304
+
1305
+ Module._CopyHeap(lm.ptr, lm.len, ptr + offset);
1306
+ offset += lm.len;
1307
+
1308
+ const decodingMethodLen =
1309
+ Module.lengthBytesUTF8(config.decodingMethod || 'greedy_search') + 1;
1310
+ const hotwordsFileLen = Module.lengthBytesUTF8(config.hotwordsFile || '') + 1;
1311
+ const ruleFstsLen = Module.lengthBytesUTF8(config.ruleFsts || '') + 1;
1312
+ const ruleFarsLen = Module.lengthBytesUTF8(config.ruleFars || '') + 1;
1313
+ const bufferLen =
1314
+ decodingMethodLen + hotwordsFileLen + ruleFstsLen + ruleFarsLen;
1315
+ const buffer = Module._malloc(bufferLen);
1316
+
1317
+ offset = 0;
1318
+ Module.stringToUTF8(
1319
+ config.decodingMethod || 'greedy_search', buffer, decodingMethodLen);
1320
+ offset += decodingMethodLen;
1321
+
1322
+ Module.stringToUTF8(
1323
+ config.hotwordsFile || '', buffer + offset, hotwordsFileLen);
1324
+ offset += hotwordsFileLen;
1325
+
1326
+ Module.stringToUTF8(config.ruleFsts || '', buffer + offset, ruleFstsLen);
1327
+ offset += ruleFstsLen;
1328
+
1329
+ Module.stringToUTF8(config.ruleFars || '', buffer + offset, ruleFarsLen);
1330
+ offset += ruleFarsLen;
1331
+
1332
+ offset = feat.len + model.len + lm.len;
1333
+
1334
+ Module.setValue(ptr + offset, buffer, 'i8*'); // decoding method
1335
+ offset += 4;
1336
+
1337
+ Module.setValue(ptr + offset, config.maxActivePaths || 4, 'i32');
1338
+ offset += 4;
1339
+
1340
+ Module.setValue(ptr + offset, buffer + decodingMethodLen, 'i8*');
1341
+ offset += 4;
1342
+
1343
+ Module.setValue(ptr + offset, config.hotwordsScore || 1.5, 'float');
1344
+ offset += 4;
1345
+
1346
+ Module.setValue(
1347
+ ptr + offset, buffer + decodingMethodLen + hotwordsFileLen, 'i8*');
1348
+ offset += 4;
1349
+
1350
+ Module.setValue(
1351
+ ptr + offset, buffer + decodingMethodLen + hotwordsFileLen + ruleFstsLen,
1352
+ 'i8*');
1353
+ offset += 4;
1354
+
1355
+ Module.setValue(ptr + offset, config.blankPenalty || 0, 'float');
1356
+ offset += 4;
1357
+
1358
+ Module._CopyHeap(hr.ptr, hr.len, ptr + offset);
1359
+ offset += hr.len;
1360
+
1361
+ return {
1362
+ buffer: buffer, ptr: ptr, len: len, feat: feat, model: model, lm: lm,
1363
+ hr: hr,
1364
+ }
1365
+ }
1366
+
1367
+ class OfflineStream {
1368
+ constructor(handle, Module) {
1369
+ this.handle = handle;
1370
+ this.Module = Module;
1371
+ }
1372
+
1373
+ free() {
1374
+ if (this.handle) {
1375
+ this.Module._SherpaOnnxDestroyOfflineStream(this.handle);
1376
+ this.handle = null;
1377
+ }
1378
+ }
1379
+
1380
+ /**
1381
+ * @param sampleRate {Number}
1382
+ * @param samples {Float32Array} Containing samples in the range [-1, 1]
1383
+ */
1384
+ acceptWaveform(sampleRate, samples) {
1385
+ const pointer =
1386
+ this.Module._malloc(samples.length * samples.BYTES_PER_ELEMENT);
1387
+ this.Module.HEAPF32.set(samples, pointer / samples.BYTES_PER_ELEMENT);
1388
+ this.Module._SherpaOnnxAcceptWaveformOffline(
1389
+ this.handle, sampleRate, pointer, samples.length);
1390
+ this.Module._free(pointer);
1391
+ }
1392
+ };
1393
+
1394
+ class OfflineRecognizer {
1395
+ constructor(configObj, Module) {
1396
+ this.config = configObj;
1397
+ const config = initSherpaOnnxOfflineRecognizerConfig(configObj, Module);
1398
+ const handle = Module._SherpaOnnxCreateOfflineRecognizer(config.ptr);
1399
+ freeConfig(config, Module);
1400
+
1401
+ this.handle = handle;
1402
+ this.Module = Module;
1403
+ }
1404
+
1405
+ setConfig(configObj) {
1406
+ const config =
1407
+ initSherpaOnnxOfflineRecognizerConfig(configObj, this.Module);
1408
+ this.Module._SherpaOnnxOfflineRecognizerSetConfig(this.handle, config.ptr);
1409
+ freeConfig(config, this.Module);
1410
+ }
1411
+
1412
+ free() {
1413
+ this.Module._SherpaOnnxDestroyOfflineRecognizer(this.handle);
1414
+ this.handle = 0
1415
+ }
1416
+
1417
+ createStream() {
1418
+ const handle = this.Module._SherpaOnnxCreateOfflineStream(this.handle);
1419
+ return new OfflineStream(handle, this.Module);
1420
+ }
1421
+
1422
+ decode(stream) {
1423
+ this.Module._SherpaOnnxDecodeOfflineStream(this.handle, stream.handle);
1424
+ }
1425
+
1426
+ getResult(stream) {
1427
+ const r =
1428
+ this.Module._SherpaOnnxGetOfflineStreamResultAsJson(stream.handle);
1429
+ const jsonStr = this.Module.UTF8ToString(r);
1430
+ const ans = JSON.parse(jsonStr);
1431
+ this.Module._SherpaOnnxDestroyOfflineStreamResultJson(r);
1432
+
1433
+ return ans;
1434
+ }
1435
+ };
1436
+
1437
+ class OnlineStream {
1438
+ constructor(handle, Module) {
1439
+ this.handle = handle;
1440
+ this.pointer = null; // buffer
1441
+ this.n = 0; // buffer size
1442
+ this.Module = Module;
1443
+ }
1444
+
1445
+ free() {
1446
+ if (this.handle) {
1447
+ this.Module._SherpaOnnxDestroyOnlineStream(this.handle);
1448
+ this.handle = null;
1449
+ this.Module._free(this.pointer);
1450
+ this.pointer = null;
1451
+ this.n = 0;
1452
+ }
1453
+ }
1454
+
1455
+ /**
1456
+ * @param sampleRate {Number}
1457
+ * @param samples {Float32Array} Containing samples in the range [-1, 1]
1458
+ */
1459
+ acceptWaveform(sampleRate, samples) {
1460
+ if (this.n < samples.length) {
1461
+ this.Module._free(this.pointer);
1462
+ this.pointer =
1463
+ this.Module._malloc(samples.length * samples.BYTES_PER_ELEMENT);
1464
+ this.n = samples.length
1465
+ }
1466
+
1467
+ this.Module.HEAPF32.set(samples, this.pointer / samples.BYTES_PER_ELEMENT);
1468
+ this.Module._SherpaOnnxOnlineStreamAcceptWaveform(
1469
+ this.handle, sampleRate, this.pointer, samples.length);
1470
+ }
1471
+
1472
+ inputFinished() {
1473
+ this.Module._SherpaOnnxOnlineStreamInputFinished(this.handle);
1474
+ }
1475
+ };
1476
+
1477
+ class OnlineRecognizer {
1478
+ constructor(configObj, Module) {
1479
+ this.config = configObj;
1480
+ const config = initSherpaOnnxOnlineRecognizerConfig(configObj, Module)
1481
+ const handle = Module._SherpaOnnxCreateOnlineRecognizer(config.ptr);
1482
+
1483
+ freeConfig(config, Module);
1484
+
1485
+ this.handle = handle;
1486
+ this.Module = Module;
1487
+ }
1488
+
1489
+ free() {
1490
+ this.Module._SherpaOnnxDestroyOnlineRecognizer(this.handle);
1491
+ this.handle = 0
1492
+ }
1493
+
1494
+ createStream() {
1495
+ const handle = this.Module._SherpaOnnxCreateOnlineStream(this.handle);
1496
+ return new OnlineStream(handle, this.Module);
1497
+ }
1498
+
1499
+ isReady(stream) {
1500
+ return this.Module._SherpaOnnxIsOnlineStreamReady(
1501
+ this.handle, stream.handle) == 1;
1502
+ }
1503
+
1504
+ decode(stream) {
1505
+ this.Module._SherpaOnnxDecodeOnlineStream(this.handle, stream.handle);
1506
+ }
1507
+
1508
+ isEndpoint(stream) {
1509
+ return this.Module._SherpaOnnxOnlineStreamIsEndpoint(
1510
+ this.handle, stream.handle) == 1;
1511
+ }
1512
+
1513
+ reset(stream) {
1514
+ this.Module._SherpaOnnxOnlineStreamReset(this.handle, stream.handle);
1515
+ }
1516
+
1517
+ getResult(stream) {
1518
+ const r = this.Module._SherpaOnnxGetOnlineStreamResultAsJson(
1519
+ this.handle, stream.handle);
1520
+ const jsonStr = this.Module.UTF8ToString(r);
1521
+ const ans = JSON.parse(jsonStr);
1522
+ this.Module._SherpaOnnxDestroyOnlineStreamResultJson(r);
1523
+
1524
+ return ans;
1525
+ }
1526
+ }
1527
+
1528
+ // ESM exports for browser/Vite usage
1529
+ export {
1530
+ initSherpaOnnxOfflineRecognizerConfig,
1531
+ initSherpaOnnxOnlineRecognizerConfig,
1532
+ freeConfig,
1533
+ OfflineRecognizer,
1534
+ OfflineStream,
1535
+ OnlineRecognizer,
1536
+ OnlineStream,
1537
+ createOnlineRecognizer,
1538
+ };