@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,657 @@
1
+
2
+ function freeConfig(config, Module) {
3
+ if ('buffer' in config) {
4
+ Module._free(config.buffer);
5
+ }
6
+
7
+ if ('config' in config) {
8
+ freeConfig(config.config, Module)
9
+ }
10
+
11
+ if ('matcha' in config) {
12
+ freeConfig(config.matcha, Module)
13
+ }
14
+
15
+ if ('kokoro' in config) {
16
+ freeConfig(config.kokoro, Module)
17
+ }
18
+
19
+ if ('kitten' in config) {
20
+ freeConfig(config.kitten, Module)
21
+ }
22
+
23
+ if ('zipvoice' in config) {
24
+ freeConfig(config.zipvoice, Module)
25
+ }
26
+
27
+ Module._free(config.ptr);
28
+ }
29
+
30
+ // The user should free the returned pointers
31
+ function initSherpaOnnxOfflineTtsVitsModelConfig(config, Module) {
32
+ const modelLen = Module.lengthBytesUTF8(config.model || '') + 1;
33
+ const lexiconLen = Module.lengthBytesUTF8(config.lexicon || '') + 1;
34
+ const tokensLen = Module.lengthBytesUTF8(config.tokens || '') + 1;
35
+ const dataDirLen = Module.lengthBytesUTF8(config.dataDir || '') + 1;
36
+ const dictDir = ''
37
+ const dictDirLen = Module.lengthBytesUTF8(dictDir) + 1;
38
+
39
+ const n = modelLen + lexiconLen + tokensLen + dataDirLen + dictDirLen;
40
+
41
+ const buffer = Module._malloc(n);
42
+
43
+ const len = 8 * 4;
44
+ const ptr = Module._malloc(len);
45
+
46
+ let offset = 0;
47
+ Module.stringToUTF8(config.model || '', buffer + offset, modelLen);
48
+ offset += modelLen;
49
+
50
+ Module.stringToUTF8(config.lexicon || '', buffer + offset, lexiconLen);
51
+ offset += lexiconLen;
52
+
53
+ Module.stringToUTF8(config.tokens || '', buffer + offset, tokensLen);
54
+ offset += tokensLen;
55
+
56
+ Module.stringToUTF8(config.dataDir || '', buffer + offset, dataDirLen);
57
+ offset += dataDirLen;
58
+
59
+ Module.stringToUTF8(dictDir, buffer + offset, dictDirLen);
60
+ offset += dictDirLen;
61
+
62
+ offset = 0;
63
+ Module.setValue(ptr, buffer + offset, 'i8*');
64
+ offset += modelLen;
65
+
66
+ Module.setValue(ptr + 4, buffer + offset, 'i8*');
67
+ offset += lexiconLen;
68
+
69
+ Module.setValue(ptr + 8, buffer + offset, 'i8*');
70
+ offset += tokensLen;
71
+
72
+ Module.setValue(ptr + 12, buffer + offset, 'i8*');
73
+ offset += dataDirLen;
74
+
75
+ Module.setValue(ptr + 16, config.noiseScale || 0.667, 'float');
76
+ Module.setValue(ptr + 20, config.noiseScaleW || 0.8, 'float');
77
+ Module.setValue(ptr + 24, config.lengthScale || 1.0, 'float');
78
+ Module.setValue(ptr + 28, buffer + offset, 'i8*');
79
+ offset += dictDirLen;
80
+
81
+ return {
82
+ buffer: buffer, ptr: ptr, len: len,
83
+ }
84
+ }
85
+
86
+ function initSherpaOnnxOfflineTtsMatchaModelConfig(config, Module) {
87
+ const acousticModelLen = Module.lengthBytesUTF8(config.acousticModel) + 1;
88
+ const vocoderLen = Module.lengthBytesUTF8(config.vocoder) + 1;
89
+ const lexiconLen = Module.lengthBytesUTF8(config.lexicon || '') + 1;
90
+ const tokensLen = Module.lengthBytesUTF8(config.tokens || '') + 1;
91
+ const dataDirLen = Module.lengthBytesUTF8(config.dataDir || '') + 1;
92
+
93
+ const dictDir = '';
94
+ const dictDirLen = Module.lengthBytesUTF8(dictDir) + 1;
95
+
96
+ const n = acousticModelLen + vocoderLen + lexiconLen + tokensLen +
97
+ dataDirLen + dictDirLen;
98
+
99
+ const buffer = Module._malloc(n);
100
+
101
+ const len = 8 * 4;
102
+ const ptr = Module._malloc(len);
103
+
104
+ let offset = 0;
105
+ Module.stringToUTF8(
106
+ config.acousticModel || '', buffer + offset, acousticModelLen);
107
+ offset += acousticModelLen;
108
+
109
+ Module.stringToUTF8(config.vocoder || '', buffer + offset, vocoderLen);
110
+ offset += vocoderLen;
111
+
112
+ Module.stringToUTF8(config.lexicon || '', buffer + offset, lexiconLen);
113
+ offset += lexiconLen;
114
+
115
+ Module.stringToUTF8(config.tokens || '', buffer + offset, tokensLen);
116
+ offset += tokensLen;
117
+
118
+ Module.stringToUTF8(config.dataDir || '', buffer + offset, dataDirLen);
119
+ offset += dataDirLen;
120
+
121
+ Module.stringToUTF8(dictDir, buffer + offset, dictDirLen);
122
+ offset += dictDirLen;
123
+
124
+ offset = 0;
125
+ Module.setValue(ptr, buffer + offset, 'i8*');
126
+ offset += acousticModelLen;
127
+
128
+ Module.setValue(ptr + 4, buffer + offset, 'i8*');
129
+ offset += vocoderLen;
130
+
131
+ Module.setValue(ptr + 8, buffer + offset, 'i8*');
132
+ offset += lexiconLen;
133
+
134
+ Module.setValue(ptr + 12, buffer + offset, 'i8*');
135
+ offset += tokensLen;
136
+
137
+ Module.setValue(ptr + 16, buffer + offset, 'i8*');
138
+ offset += dataDirLen;
139
+
140
+ Module.setValue(ptr + 20, config.noiseScale || 0.667, 'float');
141
+ Module.setValue(ptr + 24, config.lengthScale || 1.0, 'float');
142
+ Module.setValue(ptr + 28, buffer + offset, 'i8*');
143
+ offset += dictDirLen;
144
+
145
+ return {
146
+ buffer: buffer, ptr: ptr, len: len,
147
+ }
148
+ }
149
+
150
+ function initSherpaOnnxOfflineTtsKokoroModelConfig(config, Module) {
151
+ const modelLen = Module.lengthBytesUTF8(config.model) + 1;
152
+ const voicesLen = Module.lengthBytesUTF8(config.voices) + 1;
153
+ const tokensLen = Module.lengthBytesUTF8(config.tokens || '') + 1;
154
+ const dataDirLen = Module.lengthBytesUTF8(config.dataDir || '') + 1;
155
+ const dictDir = '';
156
+ const dictDirLen = Module.lengthBytesUTF8(dictDir) + 1;
157
+ const lexiconLen = Module.lengthBytesUTF8(config.lexicon || '') + 1;
158
+ const langLen = Module.lengthBytesUTF8(config.lang || '') + 1;
159
+
160
+ const n = modelLen + voicesLen + tokensLen + dataDirLen + dictDirLen +
161
+ lexiconLen + langLen;
162
+
163
+ const buffer = Module._malloc(n);
164
+
165
+ const len = 8 * 4;
166
+ const ptr = Module._malloc(len);
167
+
168
+ let offset = 0;
169
+ Module.stringToUTF8(config.model || '', buffer + offset, modelLen);
170
+ offset += modelLen;
171
+
172
+ Module.stringToUTF8(config.voices || '', buffer + offset, voicesLen);
173
+ offset += voicesLen;
174
+
175
+ Module.stringToUTF8(config.tokens || '', buffer + offset, tokensLen);
176
+ offset += tokensLen;
177
+
178
+ Module.stringToUTF8(config.dataDir || '', buffer + offset, dataDirLen);
179
+ offset += dataDirLen;
180
+
181
+ Module.stringToUTF8(dictDir, buffer + offset, dictDirLen);
182
+ offset += dictDirLen;
183
+
184
+ Module.stringToUTF8(config.lexicon || '', buffer + offset, lexiconLen);
185
+ offset += lexiconLen;
186
+
187
+ Module.stringToUTF8(config.lang || '', buffer + offset, langLen);
188
+ offset += langLen;
189
+
190
+ offset = 0;
191
+ Module.setValue(ptr, buffer + offset, 'i8*');
192
+ offset += modelLen;
193
+
194
+ Module.setValue(ptr + 4, buffer + offset, 'i8*');
195
+ offset += voicesLen;
196
+
197
+ Module.setValue(ptr + 8, buffer + offset, 'i8*');
198
+ offset += tokensLen;
199
+
200
+ Module.setValue(ptr + 12, buffer + offset, 'i8*');
201
+ offset += dataDirLen;
202
+
203
+ Module.setValue(ptr + 16, config.lengthScale || 1.0, 'float');
204
+
205
+ Module.setValue(ptr + 20, buffer + offset, 'i8*');
206
+ offset += dictDirLen;
207
+
208
+ Module.setValue(ptr + 24, buffer + offset, 'i8*');
209
+ offset += lexiconLen;
210
+
211
+ Module.setValue(ptr + 28, buffer + offset, 'i8*');
212
+ offset += langLen;
213
+
214
+ return {
215
+ buffer: buffer, ptr: ptr, len: len,
216
+ }
217
+ }
218
+
219
+ function initSherpaOnnxOfflineTtsKittenModelConfig(config, Module) {
220
+ const modelLen = Module.lengthBytesUTF8(config.model) + 1;
221
+ const voicesLen = Module.lengthBytesUTF8(config.voices) + 1;
222
+ const tokensLen = Module.lengthBytesUTF8(config.tokens || '') + 1;
223
+ const dataDirLen = Module.lengthBytesUTF8(config.dataDir || '') + 1;
224
+
225
+ const n = modelLen + voicesLen + tokensLen + dataDirLen;
226
+
227
+ const buffer = Module._malloc(n);
228
+
229
+ const len = 5 * 4;
230
+ const ptr = Module._malloc(len);
231
+
232
+ let offset = 0;
233
+ Module.stringToUTF8(config.model || '', buffer + offset, modelLen);
234
+ offset += modelLen;
235
+
236
+ Module.stringToUTF8(config.voices || '', buffer + offset, voicesLen);
237
+ offset += voicesLen;
238
+
239
+ Module.stringToUTF8(config.tokens || '', buffer + offset, tokensLen);
240
+ offset += tokensLen;
241
+
242
+ Module.stringToUTF8(config.dataDir || '', buffer + offset, dataDirLen);
243
+ offset += dataDirLen;
244
+
245
+ offset = 0;
246
+ Module.setValue(ptr, buffer + offset, 'i8*');
247
+ offset += modelLen;
248
+
249
+ Module.setValue(ptr + 4, buffer + offset, 'i8*');
250
+ offset += voicesLen;
251
+
252
+ Module.setValue(ptr + 8, buffer + offset, 'i8*');
253
+ offset += tokensLen;
254
+
255
+ Module.setValue(ptr + 12, buffer + offset, 'i8*');
256
+ offset += dataDirLen;
257
+
258
+ Module.setValue(ptr + 16, config.lengthScale || 1.0, 'float');
259
+
260
+ return {
261
+ buffer: buffer, ptr: ptr, len: len,
262
+ }
263
+ }
264
+
265
+ function initSherpaOnnxOfflineTtsZipVoiceModelConfig(config, Module) {
266
+ const tokensLen = Module.lengthBytesUTF8(config.tokens || '') + 1;
267
+ const encoderLen = Module.lengthBytesUTF8(config.encoder || '') + 1;
268
+ const decoderLen = Module.lengthBytesUTF8(config.decoder || '') + 1;
269
+ const vocoderLen = Module.lengthBytesUTF8(config.vocoder || '') + 1;
270
+ const dataDirLen = Module.lengthBytesUTF8(config.dataDir || '') + 1;
271
+ const lexiconLen = Module.lengthBytesUTF8(config.lexicon || '') + 1;
272
+
273
+ const n = tokensLen + encoderLen + decoderLen + vocoderLen + dataDirLen +
274
+ lexiconLen;
275
+
276
+ const buffer = Module._malloc(n);
277
+
278
+ const len = 10 * 4;
279
+ const ptr = Module._malloc(len);
280
+
281
+ let offset = 0;
282
+ Module.stringToUTF8(config.tokens || '', buffer + offset, tokensLen);
283
+ offset += tokensLen;
284
+
285
+ Module.stringToUTF8(config.encoder || '', buffer + offset, encoderLen);
286
+ offset += encoderLen;
287
+
288
+ Module.stringToUTF8(config.decoder || '', buffer + offset, decoderLen);
289
+ offset += decoderLen;
290
+
291
+ Module.stringToUTF8(config.vocoder || '', buffer + offset, vocoderLen);
292
+ offset += vocoderLen;
293
+
294
+ Module.stringToUTF8(config.dataDir || '', buffer + offset, dataDirLen);
295
+ offset += dataDirLen;
296
+
297
+ Module.stringToUTF8(config.lexicon || '', buffer + offset, lexiconLen);
298
+ offset += lexiconLen;
299
+
300
+ offset = 0;
301
+ Module.setValue(ptr, buffer + offset, 'i8*');
302
+ offset += tokensLen;
303
+
304
+ Module.setValue(ptr + 4, buffer + offset, 'i8*');
305
+ offset += encoderLen;
306
+
307
+ Module.setValue(ptr + 8, buffer + offset, 'i8*');
308
+ offset += decoderLen;
309
+
310
+ Module.setValue(ptr + 12, buffer + offset, 'i8*');
311
+ offset += vocoderLen;
312
+
313
+ Module.setValue(ptr + 16, buffer + offset, 'i8*');
314
+ offset += dataDirLen;
315
+
316
+ Module.setValue(ptr + 20, buffer + offset, 'i8*');
317
+ offset += lexiconLen;
318
+
319
+ Module.setValue(ptr + 24, config.featScale || 0.1, 'float');
320
+ Module.setValue(ptr + 28, config.tShift || 0.5, 'float');
321
+ Module.setValue(ptr + 32, config.targetRMS || 0.1, 'float');
322
+ Module.setValue(ptr + 36, config.guidanceScale || 1.0, 'float');
323
+
324
+ return {
325
+ buffer: buffer, ptr: ptr, len: len,
326
+ }
327
+ }
328
+
329
+ function initSherpaOnnxOfflineTtsModelConfig(config, Module) {
330
+ if (!('offlineTtsVitsModelConfig' in config)) {
331
+ config.offlineTtsVitsModelConfig = {
332
+ model: '',
333
+ lexicon: '',
334
+ tokens: '',
335
+ noiseScale: 0.667,
336
+ noiseScaleW: 0.8,
337
+ lengthScale: 1.0,
338
+ dataDir: '',
339
+ };
340
+ }
341
+
342
+ if (!('offlineTtsMatchaModelConfig' in config)) {
343
+ config.offlineTtsMatchaModelConfig = {
344
+ acousticModel: '',
345
+ vocoder: '',
346
+ lexicon: '',
347
+ tokens: '',
348
+ noiseScale: 0.667,
349
+ lengthScale: 1.0,
350
+ dataDir: '',
351
+ };
352
+ }
353
+
354
+ if (!('offlineTtsKokoroModelConfig' in config)) {
355
+ config.offlineTtsKokoroModelConfig = {
356
+ model: '',
357
+ voices: '',
358
+ tokens: '',
359
+ lengthScale: 1.0,
360
+ dataDir: '',
361
+ lexicon: '',
362
+ lang: '',
363
+ };
364
+ }
365
+
366
+ if (!('offlineTtsKittenModelConfig' in config)) {
367
+ config.offlineTtsKittenModelConfig = {
368
+ model: '',
369
+ voices: '',
370
+ tokens: '',
371
+ lengthScale: 1.0,
372
+ };
373
+ }
374
+
375
+ if (!('offlineTtsZipVoiceModelConfig' in config)) {
376
+ config.offlineTtsZipVoiceModelConfig = {
377
+ tokens: '',
378
+ encoder: '',
379
+ decoder: '',
380
+ vocoder: '',
381
+ dataDir: '',
382
+ lexicon: '',
383
+ featScale: 0.1,
384
+ tShift: 0.5,
385
+ targetRMS: 0.1,
386
+ guidanceScale: 1.0,
387
+ };
388
+ }
389
+
390
+
391
+ const vitsModelConfig = initSherpaOnnxOfflineTtsVitsModelConfig(
392
+ config.offlineTtsVitsModelConfig, Module);
393
+
394
+ const matchaModelConfig = initSherpaOnnxOfflineTtsMatchaModelConfig(
395
+ config.offlineTtsMatchaModelConfig, Module);
396
+
397
+ const kokoroModelConfig = initSherpaOnnxOfflineTtsKokoroModelConfig(
398
+ config.offlineTtsKokoroModelConfig, Module);
399
+
400
+ const kittenModelConfig = initSherpaOnnxOfflineTtsKittenModelConfig(
401
+ config.offlineTtsKittenModelConfig, Module);
402
+
403
+ const zipVoiceModelConfig = initSherpaOnnxOfflineTtsZipVoiceModelConfig(
404
+ config.offlineTtsZipVoiceModelConfig, Module);
405
+
406
+ const len = vitsModelConfig.len + matchaModelConfig.len +
407
+ kokoroModelConfig.len + kittenModelConfig.len + zipVoiceModelConfig.len +
408
+ 3 * 4;
409
+
410
+ const ptr = Module._malloc(len);
411
+
412
+ let offset = 0;
413
+ Module._CopyHeap(vitsModelConfig.ptr, vitsModelConfig.len, ptr + offset);
414
+ offset += vitsModelConfig.len;
415
+
416
+ Module.setValue(ptr + offset, config.numThreads || 1, 'i32');
417
+ offset += 4;
418
+
419
+ Module.setValue(ptr + offset, config.debug || 0, 'i32');
420
+ offset += 4;
421
+
422
+ const providerLen = Module.lengthBytesUTF8(config.provider || 'cpu') + 1;
423
+ const buffer = Module._malloc(providerLen);
424
+ Module.stringToUTF8(config.provider || 'cpu', buffer, providerLen);
425
+ Module.setValue(ptr + offset, buffer, 'i8*');
426
+ offset += 4;
427
+
428
+ Module._CopyHeap(matchaModelConfig.ptr, matchaModelConfig.len, ptr + offset);
429
+ offset += matchaModelConfig.len;
430
+
431
+ Module._CopyHeap(kokoroModelConfig.ptr, kokoroModelConfig.len, ptr + offset);
432
+ offset += kokoroModelConfig.len;
433
+
434
+ Module._CopyHeap(kittenModelConfig.ptr, kittenModelConfig.len, ptr + offset);
435
+ offset += kittenModelConfig.len;
436
+
437
+ Module._CopyHeap(
438
+ zipVoiceModelConfig.ptr, zipVoiceModelConfig.len, ptr + offset);
439
+ offset += zipVoiceModelConfig.len;
440
+
441
+ return {
442
+ buffer: buffer, ptr: ptr, len: len, config: vitsModelConfig,
443
+ matcha: matchaModelConfig, kokoro: kokoroModelConfig,
444
+ kitten: kittenModelConfig, zipvoice: zipVoiceModelConfig,
445
+ }
446
+ }
447
+
448
+ function initSherpaOnnxOfflineTtsConfig(config, Module) {
449
+ const modelConfig =
450
+ initSherpaOnnxOfflineTtsModelConfig(config.offlineTtsModelConfig, Module);
451
+ const len = modelConfig.len + 4 * 4;
452
+ const ptr = Module._malloc(len);
453
+
454
+ let offset = 0;
455
+ Module._CopyHeap(modelConfig.ptr, modelConfig.len, ptr + offset);
456
+ offset += modelConfig.len;
457
+
458
+ const ruleFstsLen = Module.lengthBytesUTF8(config.ruleFsts || '') + 1;
459
+ const ruleFarsLen = Module.lengthBytesUTF8(config.ruleFars || '') + 1;
460
+
461
+ const buffer = Module._malloc(ruleFstsLen + ruleFarsLen);
462
+ Module.stringToUTF8(config.ruleFsts || '', buffer, ruleFstsLen);
463
+ Module.stringToUTF8(config.ruleFars || '', buffer + ruleFstsLen, ruleFarsLen);
464
+
465
+ Module.setValue(ptr + offset, buffer, 'i8*');
466
+ offset += 4;
467
+
468
+ Module.setValue(ptr + offset, config.maxNumSentences || 1, 'i32');
469
+ offset += 4;
470
+
471
+ Module.setValue(ptr + offset, buffer + ruleFstsLen, 'i8*');
472
+ offset += 4;
473
+
474
+ Module.setValue(ptr + offset, config.silenceScale || 0.2, 'float');
475
+ offset += 4;
476
+
477
+ return {
478
+ buffer: buffer, ptr: ptr, len: len, config: modelConfig,
479
+ }
480
+ }
481
+
482
+ class OfflineTts {
483
+ constructor(configObj, Module) {
484
+ console.log(configObj)
485
+ const config = initSherpaOnnxOfflineTtsConfig(configObj, Module)
486
+ const handle = Module._SherpaOnnxCreateOfflineTts(config.ptr);
487
+
488
+ freeConfig(config, Module);
489
+
490
+ this.handle = handle;
491
+ this.sampleRate = Module._SherpaOnnxOfflineTtsSampleRate(this.handle);
492
+ this.numSpeakers = Module._SherpaOnnxOfflineTtsNumSpeakers(this.handle);
493
+ this.Module = Module
494
+ }
495
+
496
+ free() {
497
+ this.Module._SherpaOnnxDestroyOfflineTts(this.handle);
498
+ this.handle = 0
499
+ }
500
+
501
+ // {
502
+ // text: "hello",
503
+ // sid: 1,
504
+ // speed: 1.0
505
+ // }
506
+ generate(config) {
507
+ const textLen = this.Module.lengthBytesUTF8(config.text) + 1;
508
+ const textPtr = this.Module._malloc(textLen);
509
+ this.Module.stringToUTF8(config.text, textPtr, textLen);
510
+
511
+ const h = this.Module._SherpaOnnxOfflineTtsGenerate(
512
+ this.handle, textPtr, config.sid, config.speed);
513
+
514
+ const numSamples = this.Module.HEAP32[h / 4 + 1];
515
+ const sampleRate = this.Module.HEAP32[h / 4 + 2];
516
+
517
+ const samplesPtr = this.Module.HEAP32[h / 4] / 4;
518
+ const samples = new Float32Array(numSamples);
519
+ for (let i = 0; i < numSamples; i++) {
520
+ samples[i] = this.Module.HEAPF32[samplesPtr + i];
521
+ }
522
+
523
+ this.Module._SherpaOnnxDestroyOfflineTtsGeneratedAudio(h);
524
+ return {samples: samples, sampleRate: sampleRate};
525
+ }
526
+ save(filename, audio) {
527
+ const samples = audio.samples;
528
+ const sampleRate = audio.sampleRate;
529
+ const ptr = this.Module._malloc(samples.length * 4);
530
+ for (let i = 0; i < samples.length; i++) {
531
+ this.Module.HEAPF32[ptr / 4 + i] = samples[i];
532
+ }
533
+
534
+ const filenameLen = this.Module.lengthBytesUTF8(filename) + 1;
535
+ const buffer = this.Module._malloc(filenameLen);
536
+ this.Module.stringToUTF8(filename, buffer, filenameLen);
537
+ this.Module._SherpaOnnxWriteWave(ptr, samples.length, sampleRate, buffer);
538
+ this.Module._free(buffer);
539
+ this.Module._free(ptr);
540
+ }
541
+ }
542
+
543
+ function createOfflineTts(Module, myConfig) {
544
+ const vits = {
545
+ model: '',
546
+ lexicon: '',
547
+ tokens: '',
548
+ dataDir: '',
549
+ noiseScale: 0.667,
550
+ noiseScaleW: 0.8,
551
+ lengthScale: 1.0,
552
+ };
553
+
554
+ const matcha = {
555
+ acousticModel: '',
556
+ vocoder: '',
557
+ lexicon: '',
558
+ tokens: '',
559
+ dataDir: '',
560
+ noiseScale: 0.667,
561
+ lengthScale: 1.0,
562
+ };
563
+
564
+ const offlineTtsKokoroModelConfig = {
565
+ model: '',
566
+ voices: '',
567
+ tokens: '',
568
+ dataDir: '',
569
+ lengthScale: 1.0,
570
+ lexicon: '',
571
+ lang: '',
572
+ };
573
+
574
+ const offlineTtsKittenModelConfig = {
575
+ model: '',
576
+ voices: '',
577
+ tokens: '',
578
+ dataDir: '',
579
+ lengthScale: 1.0,
580
+ };
581
+
582
+ let ruleFsts = '';
583
+
584
+ let type = 0;
585
+ switch (type) {
586
+ case 0:
587
+ // vits
588
+ vits.model = './model.onnx';
589
+ vits.tokens = './tokens.txt';
590
+ vits.dataDir = './espeak-ng-data';
591
+ break;
592
+ case 1:
593
+ // matcha zh-en
594
+ // https://k2-fsa.github.io/sherpa/onnx/tts/all/Chinese-English/matcha-icefall-zh-en.html
595
+ matcha.acousticModel = './model-steps-3.onnx';
596
+ matcha.vocoder = './vocos-16khz-univ.onnx';
597
+ matcha.lexicon = './lexicon.txt';
598
+ matcha.tokens = './tokens.txt';
599
+ matcha.dataDir = './espeak-ng-data';
600
+ ruleFsts = './phone-zh.fst,./date-zh.fst,./number-zh.fst';
601
+ break;
602
+ case 2:
603
+ // matcha zh
604
+ // https://k2-fsa.github.io/sherpa/onnx/tts/all/Chinese/matcha-icefall-zh-baker.html
605
+ matcha.acousticModel = './model-steps-3.onnx';
606
+ matcha.vocoder = './vocos-22khz-univ.onnx';
607
+ matcha.lexicon = './lexicon.txt';
608
+ matcha.tokens = './tokens.txt';
609
+ ruleFsts = './phone.fst,./date.fst,./number.fst';
610
+ break;
611
+ case 3:
612
+ // matcha en
613
+ // https://k2-fsa.github.io/sherpa/onnx/tts/all/English/matcha-icefall-en_US-ljspeech.html
614
+ matcha.acousticModel = './model-steps-3.onnx';
615
+ matcha.vocoder = './vocos-22khz-univ.onnx';
616
+ matcha.tokens = './tokens.txt';
617
+ matcha.dataDir = './espeak-ng-data';
618
+ break;
619
+ }
620
+
621
+ const offlineTtsModelConfig = {
622
+ offlineTtsVitsModelConfig: vits,
623
+ offlineTtsMatchaModelConfig: matcha,
624
+ offlineTtsKokoroModelConfig: offlineTtsKokoroModelConfig,
625
+ offlineTtsKittenModelConfig: offlineTtsKittenModelConfig,
626
+ numThreads: 1,
627
+ debug: 1,
628
+ provider: 'cpu',
629
+ };
630
+
631
+ let offlineTtsConfig = {
632
+ offlineTtsModelConfig: offlineTtsModelConfig,
633
+ ruleFsts: ruleFsts,
634
+ ruleFars: '',
635
+ maxNumSentences: 1,
636
+ }
637
+
638
+ if (myConfig) {
639
+ offlineTtsConfig = myConfig;
640
+ }
641
+
642
+ return new OfflineTts(offlineTtsConfig, Module);
643
+ }
644
+
645
+ if (typeof process == 'object' && typeof process.versions == 'object' &&
646
+ typeof process.versions.node == 'string') {
647
+ module.exports = {
648
+ createOfflineTts,
649
+ };
650
+ }
651
+
652
+ export {
653
+ initSherpaOnnxOfflineTtsConfig,
654
+ freeConfig,
655
+ createOfflineTts,
656
+ OfflineTts,
657
+ };