react-native-sherpa-onnx 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/README.md +232 -236
  2. package/SherpaOnnx.podspec +68 -64
  3. package/android/build.gradle +182 -192
  4. package/android/codegen.gradle +57 -0
  5. package/android/prebuilt-download.gradle +428 -0
  6. package/android/prebuilt-versions.gradle +43 -0
  7. package/android/proguard-rules.pro +10 -0
  8. package/android/src/main/assets/testModels/add_mul_add.onnx +28 -0
  9. package/android/src/main/assets/testModels/nnapi_internal_uint8_support.onnx +0 -0
  10. package/android/src/main/assets/testModels/qnn_multi_ctx_embed.onnx +0 -0
  11. package/android/src/main/cpp/CMakeLists.txt +166 -129
  12. package/android/src/main/cpp/CMakePresets.json +54 -0
  13. package/android/src/main/cpp/crypto/sha256.cpp +174 -0
  14. package/android/src/main/cpp/crypto/sha256.h +16 -0
  15. package/android/src/main/cpp/jni/archive/sherpa-onnx-archive-helper.cpp +404 -0
  16. package/android/src/main/cpp/jni/archive/sherpa-onnx-archive-helper.h +56 -0
  17. package/android/src/main/cpp/jni/archive/sherpa-onnx-archive-jni.cpp +181 -0
  18. package/android/src/main/cpp/jni/audio/sherpa-onnx-audio-convert-jni.cpp +888 -0
  19. package/{ios → android/src/main/cpp/jni/model_detect}/sherpa-onnx-common.h +18 -18
  20. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-detect-jni-common.cpp +86 -0
  21. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-detect-jni-common.h +20 -0
  22. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect-helper.cpp +423 -0
  23. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect-helper.h +55 -0
  24. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect-stt.cpp +399 -0
  25. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect-tts.cpp +238 -0
  26. package/{ios → android/src/main/cpp/jni/model_detect}/sherpa-onnx-model-detect.h +122 -89
  27. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-stt-wrapper.cpp +99 -0
  28. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-stt-wrapper.h +16 -0
  29. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-tts-wrapper.cpp +78 -0
  30. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-tts-wrapper.h +16 -0
  31. package/android/src/main/cpp/jni/module/sherpa-onnx-module-jni.cpp +190 -0
  32. package/android/src/main/cpp/jni/tts/sherpa-onnx-tts-zipvoice-jni.cpp +301 -0
  33. package/android/src/main/java/com/sherpaonnx/SherpaOnnxArchiveHelper.kt +94 -0
  34. package/android/src/main/java/com/sherpaonnx/{SherpaOnnxCoreHelper.kt → SherpaOnnxAssetHelper.kt} +350 -236
  35. package/android/src/main/java/com/sherpaonnx/SherpaOnnxModule.kt +791 -483
  36. package/android/src/main/java/com/sherpaonnx/SherpaOnnxSttHelper.kt +699 -109
  37. package/android/src/main/java/com/sherpaonnx/SherpaOnnxTtsHelper.kt +1123 -668
  38. package/android/src/main/java/com/sherpaonnx/ZipvoiceTtsWrapper.kt +187 -0
  39. package/ios/SherpaOnnx+Assets.h +11 -0
  40. package/ios/SherpaOnnx+Assets.mm +325 -0
  41. package/ios/SherpaOnnx+STT.mm +455 -118
  42. package/ios/SherpaOnnx+TTS.mm +1101 -712
  43. package/ios/SherpaOnnx.h +17 -6
  44. package/ios/SherpaOnnx.mm +206 -311
  45. package/ios/SherpaOnnx.xcconfig +19 -19
  46. package/ios/SherpaOnnxCoreMLHelper.swift +24 -0
  47. package/ios/archive/sherpa-onnx-archive-helper.h +21 -0
  48. package/ios/archive/sherpa-onnx-archive-helper.mm +296 -0
  49. package/ios/libarchive_darwin_config.h +153 -0
  50. package/{android/src/main/cpp/jni → ios/model_detect}/sherpa-onnx-common.h +18 -18
  51. package/ios/model_detect/sherpa-onnx-model-detect-helper.h +49 -0
  52. package/ios/model_detect/sherpa-onnx-model-detect-helper.mm +210 -0
  53. package/ios/model_detect/sherpa-onnx-model-detect-stt.mm +344 -0
  54. package/ios/model_detect/sherpa-onnx-model-detect-tts.mm +201 -0
  55. package/{android/src/main/cpp/jni → ios/model_detect}/sherpa-onnx-model-detect.h +117 -89
  56. package/ios/scripts/patch-libarchive-includes.sh +61 -0
  57. package/ios/scripts/setup-ios-libarchive.sh +98 -0
  58. package/ios/stt/sherpa-onnx-stt-wrapper.h +129 -0
  59. package/ios/stt/sherpa-onnx-stt-wrapper.mm +523 -0
  60. package/ios/{sherpa-onnx-tts-wrapper.h → tts/sherpa-onnx-tts-wrapper.h} +90 -85
  61. package/ios/{sherpa-onnx-tts-wrapper.mm → tts/sherpa-onnx-tts-wrapper.mm} +376 -345
  62. package/lib/module/NativeSherpaOnnx.js +3 -0
  63. package/lib/module/NativeSherpaOnnx.js.map +1 -1
  64. package/lib/module/audio/index.js +22 -0
  65. package/lib/module/audio/index.js.map +1 -0
  66. package/lib/module/diarization/index.js +1 -1
  67. package/lib/module/diarization/index.js.map +1 -1
  68. package/lib/module/download/ModelDownloadManager.js +918 -0
  69. package/lib/module/download/ModelDownloadManager.js.map +1 -0
  70. package/lib/module/download/extractTarBz2.js +53 -0
  71. package/lib/module/download/extractTarBz2.js.map +1 -0
  72. package/lib/module/download/index.js +6 -0
  73. package/lib/module/download/index.js.map +1 -0
  74. package/lib/module/download/validation.js +178 -0
  75. package/lib/module/download/validation.js.map +1 -0
  76. package/lib/module/enhancement/index.js +1 -1
  77. package/lib/module/enhancement/index.js.map +1 -1
  78. package/lib/module/index.js +41 -3
  79. package/lib/module/index.js.map +1 -1
  80. package/lib/module/separation/index.js +1 -1
  81. package/lib/module/separation/index.js.map +1 -1
  82. package/lib/module/stt/index.js +127 -60
  83. package/lib/module/stt/index.js.map +1 -1
  84. package/lib/module/stt/sttModelLanguages.js +512 -0
  85. package/lib/module/stt/sttModelLanguages.js.map +1 -0
  86. package/lib/module/stt/types.js +53 -1
  87. package/lib/module/stt/types.js.map +1 -1
  88. package/lib/module/tts/index.js +216 -289
  89. package/lib/module/tts/index.js.map +1 -1
  90. package/lib/module/tts/types.js +86 -1
  91. package/lib/module/tts/types.js.map +1 -1
  92. package/lib/module/types.js.map +1 -1
  93. package/lib/module/utils.js +86 -73
  94. package/lib/module/utils.js.map +1 -1
  95. package/lib/module/vad/index.js +1 -1
  96. package/lib/module/vad/index.js.map +1 -1
  97. package/lib/typescript/src/NativeSherpaOnnx.d.ts +192 -38
  98. package/lib/typescript/src/NativeSherpaOnnx.d.ts.map +1 -1
  99. package/lib/typescript/src/audio/index.d.ts +13 -0
  100. package/lib/typescript/src/audio/index.d.ts.map +1 -0
  101. package/lib/typescript/src/diarization/index.d.ts +3 -2
  102. package/lib/typescript/src/diarization/index.d.ts.map +1 -1
  103. package/lib/typescript/src/download/ModelDownloadManager.d.ts +108 -0
  104. package/lib/typescript/src/download/ModelDownloadManager.d.ts.map +1 -0
  105. package/lib/typescript/src/download/extractTarBz2.d.ts +14 -0
  106. package/lib/typescript/src/download/extractTarBz2.d.ts.map +1 -0
  107. package/lib/typescript/src/download/index.d.ts +7 -0
  108. package/lib/typescript/src/download/index.d.ts.map +1 -0
  109. package/lib/typescript/src/download/validation.d.ts +57 -0
  110. package/lib/typescript/src/download/validation.d.ts.map +1 -0
  111. package/lib/typescript/src/enhancement/index.d.ts +3 -2
  112. package/lib/typescript/src/enhancement/index.d.ts.map +1 -1
  113. package/lib/typescript/src/index.d.ts +26 -2
  114. package/lib/typescript/src/index.d.ts.map +1 -1
  115. package/lib/typescript/src/separation/index.d.ts +3 -2
  116. package/lib/typescript/src/separation/index.d.ts.map +1 -1
  117. package/lib/typescript/src/stt/index.d.ts +31 -43
  118. package/lib/typescript/src/stt/index.d.ts.map +1 -1
  119. package/lib/typescript/src/stt/sttModelLanguages.d.ts +52 -0
  120. package/lib/typescript/src/stt/sttModelLanguages.d.ts.map +1 -0
  121. package/lib/typescript/src/stt/types.d.ts +196 -9
  122. package/lib/typescript/src/stt/types.d.ts.map +1 -1
  123. package/lib/typescript/src/tts/index.d.ts +25 -211
  124. package/lib/typescript/src/tts/index.d.ts.map +1 -1
  125. package/lib/typescript/src/tts/types.d.ts +148 -25
  126. package/lib/typescript/src/tts/types.d.ts.map +1 -1
  127. package/lib/typescript/src/types.d.ts +0 -32
  128. package/lib/typescript/src/types.d.ts.map +1 -1
  129. package/lib/typescript/src/utils.d.ts +28 -13
  130. package/lib/typescript/src/utils.d.ts.map +1 -1
  131. package/lib/typescript/src/vad/index.d.ts +3 -2
  132. package/lib/typescript/src/vad/index.d.ts.map +1 -1
  133. package/package.json +250 -222
  134. package/scripts/check-qnn-support.sh +78 -0
  135. package/scripts/setup-ios-framework.sh +379 -282
  136. package/src/NativeSherpaOnnx.ts +474 -251
  137. package/src/audio/index.ts +32 -0
  138. package/src/diarization/index.ts +4 -2
  139. package/src/download/ModelDownloadManager.ts +1325 -0
  140. package/src/download/extractTarBz2.ts +78 -0
  141. package/src/download/index.ts +43 -0
  142. package/src/download/validation.ts +279 -0
  143. package/src/enhancement/index.ts +4 -2
  144. package/src/index.tsx +78 -27
  145. package/src/separation/index.ts +4 -2
  146. package/src/stt/index.ts +249 -89
  147. package/src/stt/sttModelLanguages.ts +237 -0
  148. package/src/stt/types.ts +263 -9
  149. package/src/tts/index.ts +470 -458
  150. package/src/tts/types.ts +373 -218
  151. package/src/types.ts +0 -44
  152. package/src/utils.ts +145 -131
  153. package/src/vad/index.ts +4 -2
  154. package/third_party/ffmpeg_prebuilt/ANDROID_RELEASE_TAG +1 -0
  155. package/third_party/libarchive_prebuilt/ANDROID_RELEASE_TAG +1 -0
  156. package/third_party/libarchive_prebuilt/IOS_RELEASE_TAG +1 -0
  157. package/third_party/sherpa-onnx-prebuilt/ANDROID_RELEASE_TAG +1 -0
  158. package/third_party/sherpa-onnx-prebuilt/IOS_RELEASE_TAG +1 -0
  159. package/android/src/main/cpp/include/sherpa-onnx/c-api/c-api.h +0 -1918
  160. package/android/src/main/cpp/include/sherpa-onnx/c-api/cxx-api.h +0 -841
  161. package/android/src/main/cpp/jni/sherpa-onnx-model-detect.cpp +0 -541
  162. package/android/src/main/cpp/jni/sherpa-onnx-stt-jni.cpp +0 -336
  163. package/android/src/main/cpp/jni/sherpa-onnx-stt-wrapper.cpp +0 -222
  164. package/android/src/main/cpp/jni/sherpa-onnx-stt-wrapper.h +0 -68
  165. package/android/src/main/cpp/jni/sherpa-onnx-tts-jni.cpp +0 -823
  166. package/android/src/main/cpp/jni/sherpa-onnx-tts-wrapper.cpp +0 -387
  167. package/android/src/main/cpp/jni/sherpa-onnx-tts-wrapper.h +0 -147
  168. package/ios/Frameworks/sherpa_onnx.xcframework.zip +0 -0
  169. package/ios/include/sherpa-onnx/c-api/c-api.h +0 -1918
  170. package/ios/include/sherpa-onnx/c-api/cxx-api.h +0 -841
  171. package/ios/sherpa-onnx-model-detect.mm +0 -441
  172. package/ios/sherpa-onnx-stt-wrapper.h +0 -48
  173. package/ios/sherpa-onnx-stt-wrapper.mm +0 -201
  174. package/scripts/copy-headers.js +0 -184
  175. package/scripts/setup-assets.js +0 -323
@@ -1,342 +1,269 @@
1
1
  "use strict";
2
2
 
3
- import { NativeEventEmitter } from 'react-native';
3
+ import { DeviceEventEmitter } from 'react-native';
4
4
  import SherpaOnnx from "../NativeSherpaOnnx.js";
5
5
  import { resolveModelPath } from "../utils.js";
6
+ let ttsInstanceCounter = 0;
6
7
 
7
- /**
8
- * Initialize Text-to-Speech (TTS) with model directory.
9
- *
10
- * Supports multiple model source types:
11
- * - Asset models (bundled in app)
12
- * - File system models (downloaded or user-provided)
13
- * - Auto-detection (tries asset first, then file system)
14
- *
15
- * Supported model types (auto-detected or explicit):
16
- * - VITS (includes Piper, Coqui, MeloTTS, MMS)
17
- * - Matcha (acoustic model + vocoder)
18
- * - Kokoro (multi-speaker, multi-language)
19
- * - KittenTTS (lightweight, multi-speaker)
20
- * - Zipvoice (voice cloning capable)
21
- *
22
- * @param options - TTS initialization options or model path configuration
23
- * @returns Promise resolving to result with success and detected models
24
- * @example
25
- * ```typescript
26
- * // Simple string (auto-detect)
27
- * const result = await initializeTTS('models/sherpa-onnx-vits-piper-en_US-lessac-medium');
28
- * console.log('Detected models:', result.detectedModels);
29
- *
30
- * // Asset model
31
- * const result = await initializeTTS({
32
- * modelPath: { type: 'asset', path: 'models/vits-piper-en' }
33
- * });
34
- *
35
- * // File system model with options
36
- * const result = await initializeTTS({
37
- * modelPath: { type: 'file', path: '/path/to/model' },
38
- * numThreads: 4,
39
- * debug: true
40
- * });
41
- *
42
- * // With explicit model type
43
- * const result = await initializeTTS({
44
- * modelPath: { type: 'asset', path: 'models/kokoro-en' },
45
- * modelType: 'kokoro'
46
- * });
47
- * ```
8
+ /**
9
+ * Flatten model-specific options for the given model type to native init/update params.
10
+ * When modelType is 'auto' or missing, returns undefined for all (native uses defaults).
48
11
  */
49
- export async function initializeTTS(options) {
50
- // Handle both object syntax and direct path syntax
12
+ function flattenTtsModelOptionsForNative(modelType, modelOptions) {
13
+ if (!modelOptions || !modelType || modelType === 'auto' || modelType === 'zipvoice' // Zipvoice does not use noise/length scale; native uses its own defaults
14
+ ) return {
15
+ noiseScale: undefined,
16
+ noiseScaleW: undefined,
17
+ lengthScale: undefined
18
+ };
19
+ const block = modelType === 'vits' ? modelOptions.vits : modelType === 'matcha' ? modelOptions.matcha : modelType === 'kokoro' ? modelOptions.kokoro : modelType === 'kitten' ? modelOptions.kitten : modelType === 'pocket' ? modelOptions.pocket : undefined;
20
+ if (!block) return {
21
+ noiseScale: undefined,
22
+ noiseScaleW: undefined,
23
+ lengthScale: undefined
24
+ };
25
+ const out = {
26
+ noiseScale: undefined,
27
+ noiseScaleW: undefined,
28
+ lengthScale: undefined
29
+ };
30
+ const n = block;
31
+ if (n.noiseScale !== undefined && typeof n.noiseScale === 'number') out.noiseScale = n.noiseScale;
32
+ if (n.noiseScaleW !== undefined && typeof n.noiseScaleW === 'number') out.noiseScaleW = n.noiseScaleW;
33
+ if (n.lengthScale !== undefined && typeof n.lengthScale === 'number') out.lengthScale = n.lengthScale;
34
+ return out;
35
+ }
36
+
37
+ /**
38
+ * Detect TTS model type and structure without initializing the engine.
39
+ * Uses the same native file-based detection as createTTS. Stateless; no instance required.
40
+ *
41
+ * @param modelPath - Model path configuration (asset, file, or auto)
42
+ * @param options - Optional modelType (default: 'auto')
43
+ * @returns Object with success, detectedModels (array of { type, modelDir }), and modelType (primary detected type)
44
+ * @example
45
+ * ```typescript
46
+ * const result = await detectTtsModel({ type: 'asset', path: 'models/vits-piper-en' });
47
+ * if (result.success) console.log('Detected type:', result.modelType, result.detectedModels);
48
+ * ```
49
+ */
50
+ export async function detectTtsModel(modelPath, options) {
51
+ const resolvedPath = await resolveModelPath(modelPath);
52
+ return SherpaOnnx.detectTtsModel(resolvedPath, options?.modelType);
53
+ }
54
+
55
+ /**
56
+ * Convert TtsGenerationOptions to a flat object for the native bridge.
57
+ * Flattens referenceAudio { samples, sampleRate } to referenceAudio array + referenceSampleRate.
58
+ */
59
+ function toNativeTtsOptions(options) {
60
+ if (options == null) return {};
61
+ const out = {};
62
+ if (options.sid !== undefined) out.sid = options.sid;
63
+ if (options.speed !== undefined) out.speed = options.speed;
64
+ if (options.silenceScale !== undefined) out.silenceScale = options.silenceScale;
65
+ if (options.referenceAudio != null) {
66
+ out.referenceAudio = options.referenceAudio.samples;
67
+ out.referenceSampleRate = options.referenceAudio.sampleRate;
68
+ }
69
+ if (options.referenceText !== undefined) out.referenceText = options.referenceText;
70
+ if (options.numSteps !== undefined) out.numSteps = options.numSteps;
71
+ if (options.extra != null && Object.keys(options.extra).length > 0) out.extra = options.extra;
72
+ return out;
73
+ }
74
+
75
+ // TTS stream events are sent from native via sendEventWithName; use DeviceEventEmitter
76
+ // so we don't need NativeEventEmitter (which expects addListener/removeListeners on the module).
77
+ /**
78
+ * Create a TTS engine instance. Call destroy() on the returned engine when done to free native resources.
79
+ *
80
+ * @param options - TTS initialization options or model path configuration
81
+ * @returns Promise resolving to a TtsEngine instance
82
+ * @example
83
+ * ```typescript
84
+ * const tts = await createTTS({
85
+ * modelPath: { type: 'asset', path: 'models/vits-piper-en' },
86
+ * modelType: 'vits',
87
+ * modelOptions: { vits: { noiseScale: 0.667 } },
88
+ * });
89
+ * const audio = await tts.generateSpeech('Hello world');
90
+ * await tts.destroy();
91
+ * ```
92
+ */
93
+ export async function createTTS(options) {
94
+ const instanceId = `tts_${++ttsInstanceCounter}`;
51
95
  let modelPath;
52
96
  let modelType;
97
+ let provider;
53
98
  let numThreads;
54
99
  let debug;
55
- let noiseScale;
56
- let noiseScaleW;
57
- let lengthScale;
58
- if (typeof options === 'object' && 'modelPath' in options) {
100
+ let modelOptions;
101
+ let ruleFsts;
102
+ let ruleFars;
103
+ let maxNumSentences;
104
+ let silenceScale;
105
+ if ('modelPath' in options) {
59
106
  modelPath = options.modelPath;
60
107
  modelType = options.modelType;
108
+ provider = options.provider;
61
109
  numThreads = options.numThreads;
62
110
  debug = options.debug;
63
- noiseScale = options.noiseScale;
64
- noiseScaleW = options.noiseScaleW;
65
- lengthScale = options.lengthScale;
111
+ modelOptions = options.modelOptions;
112
+ ruleFsts = options.ruleFsts;
113
+ ruleFars = options.ruleFars;
114
+ maxNumSentences = options.maxNumSentences;
115
+ silenceScale = options.silenceScale;
66
116
  } else {
67
117
  modelPath = options;
68
118
  modelType = undefined;
119
+ provider = undefined;
69
120
  numThreads = undefined;
70
121
  debug = undefined;
71
- noiseScale = undefined;
72
- noiseScaleW = undefined;
73
- lengthScale = undefined;
122
+ modelOptions = undefined;
123
+ ruleFsts = undefined;
124
+ ruleFars = undefined;
125
+ maxNumSentences = undefined;
126
+ silenceScale = undefined;
74
127
  }
128
+ const flat = flattenTtsModelOptionsForNative(modelType, modelOptions);
75
129
  const resolvedPath = await resolveModelPath(modelPath);
76
- return SherpaOnnx.initializeTts(resolvedPath, modelType ?? 'auto', numThreads ?? 2, debug ?? false, noiseScale, noiseScaleW, lengthScale);
77
- }
78
-
79
- /**
80
- * Update TTS parameters by re-initializing with stored config.
81
- */
82
- export async function updateTtsParams(options) {
83
- const noiseArg = options.noiseScale === undefined ? Number.NaN : options.noiseScale;
84
- const noiseWArg = options.noiseScaleW === undefined ? Number.NaN : options.noiseScaleW;
85
- const lengthArg = options.lengthScale === undefined ? Number.NaN : options.lengthScale;
86
- return SherpaOnnx.updateTtsParams(noiseArg, noiseWArg, lengthArg);
87
- }
88
-
89
- /**
90
- * Generate speech from text.
91
- *
92
- * Returns raw audio samples as float array in range [-1.0, 1.0].
93
- * You can save these samples to a WAV file, stream them, or process them further.
94
- *
95
- * @param text - Text to convert to speech
96
- * @param options - Synthesis options (speaker ID, speed)
97
- * @returns Promise resolving to generated audio data
98
- * @example
99
- * ```typescript
100
- * // Basic usage
101
- * const audio = await generateSpeech('Hello, world!');
102
- * console.log(`Generated ${audio.samples.length} samples at ${audio.sampleRate} Hz`);
103
- *
104
- * // With options
105
- * const audio = await generateSpeech('Hello, world!', {
106
- * sid: 0, // Speaker ID (for multi-speaker models)
107
- * speed: 1.2 // 20% faster
108
- * });
109
- *
110
- * // Slower speech
111
- * const audio = await generateSpeech('Speak slowly', { speed: 0.8 });
112
- * ```
113
- */
114
- export async function generateSpeech(text, options) {
115
- return SherpaOnnx.generateTts(text, options?.sid ?? 0, options?.speed ?? 1.0);
116
- }
117
-
118
- /**
119
- * Generate speech from text and return subtitle/timestamp metadata.
120
- *
121
- * Timestamps are estimated based on the output duration when models do not
122
- * provide native timing information.
123
- */
124
- export async function generateSpeechWithTimestamps(text, options) {
125
- return SherpaOnnx.generateTtsWithTimestamps(text, options?.sid ?? 0, options?.speed ?? 1.0);
126
- }
127
- const nativeTtsEventModule = SherpaOnnx && typeof SherpaOnnx.addListener === 'function' && typeof SherpaOnnx.removeListeners === 'function' ? SherpaOnnx : undefined;
128
- const ttsEventEmitter = new NativeEventEmitter(nativeTtsEventModule);
129
- /**
130
- * Generate speech in streaming mode (emits chunk events).
131
- *
132
- * Returns an unsubscribe function to remove event listeners.
133
- */
134
- export async function generateSpeechStream(text, options, handlers) {
135
- const subscriptions = [ttsEventEmitter.addListener('ttsStreamChunk', event => {
136
- handlers.onChunk?.(event);
137
- }), ttsEventEmitter.addListener('ttsStreamEnd', event => {
138
- handlers.onEnd?.(event);
139
- }), ttsEventEmitter.addListener('ttsStreamError', event => {
140
- handlers.onError?.(event);
141
- })];
142
- try {
143
- await SherpaOnnx.generateTtsStream(text, options?.sid ?? 0, options?.speed ?? 1.0);
144
- } catch (error) {
145
- // Clean up listeners if native call fails
146
- subscriptions.forEach(sub => sub.remove());
147
- throw error;
130
+ const result = await SherpaOnnx.initializeTts(instanceId, resolvedPath, modelType ?? 'auto', numThreads ?? 2, debug ?? false, flat.noiseScale, flat.noiseScaleW, flat.lengthScale, ruleFsts, ruleFars, maxNumSentences, silenceScale, provider);
131
+ if (!result.success) {
132
+ throw new Error(`TTS initialization failed: ${JSON.stringify(result.detectedModels ?? [])}`);
148
133
  }
149
- return () => {
150
- subscriptions.forEach(sub => sub.remove());
134
+ const firstDetected = result.detectedModels?.[0];
135
+ const effectiveModelType = modelType && modelType !== 'auto' ? modelType : firstDetected?.type;
136
+ let destroyed = false;
137
+ const guard = () => {
138
+ if (destroyed) {
139
+ throw new Error(`TTS instance ${instanceId} has been destroyed; cannot call methods on it.`);
140
+ }
151
141
  };
152
- }
153
-
154
- /**
155
- * Cancel ongoing streaming TTS generation.
156
- */
157
- export function cancelSpeechStream() {
158
- return SherpaOnnx.cancelTtsStream();
159
- }
160
-
161
- /**
162
- * Start PCM playback for streaming TTS.
163
- */
164
- export function startTtsPcmPlayer(sampleRate, channels) {
165
- return SherpaOnnx.startTtsPcmPlayer(sampleRate, channels);
166
- }
167
-
168
- /**
169
- * Write PCM samples to the streaming TTS player.
170
- */
171
- export function writeTtsPcmChunk(samples) {
172
- return SherpaOnnx.writeTtsPcmChunk(samples);
173
- }
174
-
175
- /**
176
- * Stop PCM playback for streaming TTS.
177
- */
178
- export function stopTtsPcmPlayer() {
179
- return SherpaOnnx.stopTtsPcmPlayer();
180
- }
181
-
182
- /**
183
- * Get TTS model information.
184
- *
185
- * Returns the sample rate and number of available speakers/voices.
186
- * Call this after initialization to check model capabilities.
187
- *
188
- * @returns Promise resolving to model information
189
- * @example
190
- * ```typescript
191
- * await initializeTTS('models/kokoro-en');
192
- * const info = await getModelInfo();
193
- *
194
- * console.log(`Sample rate: ${info.sampleRate} Hz`);
195
- * console.log(`Available speakers: ${info.numSpeakers}`);
196
- *
197
- * if (info.numSpeakers > 1) {
198
- * // Multi-speaker model, can use different voices
199
- * const audio = await generateSpeech('Hello', { sid: 1 });
200
- * }
201
- * ```
202
- */
203
- export async function getModelInfo() {
204
- const [sampleRate, numSpeakers] = await Promise.all([SherpaOnnx.getTtsSampleRate(), SherpaOnnx.getTtsNumSpeakers()]);
205
- return {
206
- sampleRate,
207
- numSpeakers
142
+ const engine = {
143
+ get instanceId() {
144
+ return instanceId;
145
+ },
146
+ async generateSpeech(text, opts) {
147
+ guard();
148
+ return SherpaOnnx.generateTts(instanceId, text, toNativeTtsOptions(opts));
149
+ },
150
+ async generateSpeechWithTimestamps(text, opts) {
151
+ guard();
152
+ return SherpaOnnx.generateTtsWithTimestamps(instanceId, text, toNativeTtsOptions(opts));
153
+ },
154
+ async generateSpeechStream(text, opts, handlers) {
155
+ guard();
156
+ const subscriptions = [DeviceEventEmitter.addListener('ttsStreamChunk', event => {
157
+ const e = event;
158
+ if (e.instanceId != null && e.instanceId !== instanceId) return;
159
+ handlers.onChunk?.(e);
160
+ }), DeviceEventEmitter.addListener('ttsStreamEnd', event => {
161
+ const e = event;
162
+ if (e.instanceId != null && e.instanceId !== instanceId) return;
163
+ handlers.onEnd?.(e);
164
+ }), DeviceEventEmitter.addListener('ttsStreamError', event => {
165
+ const e = event;
166
+ if (e.instanceId != null && e.instanceId !== instanceId) return;
167
+ handlers.onError?.(e);
168
+ })];
169
+ try {
170
+ await SherpaOnnx.generateTtsStream(instanceId, text, toNativeTtsOptions(opts));
171
+ } catch (error) {
172
+ subscriptions.forEach(sub => sub.remove());
173
+ throw error;
174
+ }
175
+ return () => {
176
+ subscriptions.forEach(sub => sub.remove());
177
+ };
178
+ },
179
+ async cancelSpeechStream() {
180
+ guard();
181
+ return SherpaOnnx.cancelTtsStream(instanceId);
182
+ },
183
+ async startPcmPlayer(sampleRate, channels) {
184
+ guard();
185
+ return SherpaOnnx.startTtsPcmPlayer(instanceId, sampleRate, channels);
186
+ },
187
+ async writePcmChunk(samples) {
188
+ guard();
189
+ return SherpaOnnx.writeTtsPcmChunk(instanceId, samples);
190
+ },
191
+ async stopPcmPlayer() {
192
+ guard();
193
+ return SherpaOnnx.stopTtsPcmPlayer(instanceId);
194
+ },
195
+ async updateParams(opts) {
196
+ guard();
197
+ const effectiveModelTypeForUpdate = opts.modelType && opts.modelType !== 'auto' ? opts.modelType : effectiveModelType;
198
+ const flatOpts = flattenTtsModelOptionsForNative(effectiveModelTypeForUpdate, opts.modelOptions);
199
+ const noiseArg = flatOpts.noiseScale === undefined ? Number.NaN : flatOpts.noiseScale;
200
+ const noiseWArg = flatOpts.noiseScaleW === undefined ? Number.NaN : flatOpts.noiseScaleW;
201
+ const lengthArg = flatOpts.lengthScale === undefined ? Number.NaN : flatOpts.lengthScale;
202
+ return SherpaOnnx.updateTtsParams(instanceId, noiseArg, noiseWArg, lengthArg);
203
+ },
204
+ async getModelInfo() {
205
+ guard();
206
+ const [sampleRate, numSpeakers] = await Promise.all([SherpaOnnx.getTtsSampleRate(instanceId), SherpaOnnx.getTtsNumSpeakers(instanceId)]);
207
+ return {
208
+ sampleRate,
209
+ numSpeakers
210
+ };
211
+ },
212
+ async getSampleRate() {
213
+ guard();
214
+ return SherpaOnnx.getTtsSampleRate(instanceId);
215
+ },
216
+ async getNumSpeakers() {
217
+ guard();
218
+ return SherpaOnnx.getTtsNumSpeakers(instanceId);
219
+ },
220
+ async destroy() {
221
+ if (destroyed) return;
222
+ destroyed = true;
223
+ await SherpaOnnx.unloadTts(instanceId);
224
+ }
208
225
  };
226
+ return engine;
209
227
  }
210
228
 
211
- /**
212
- * Get the sample rate of the initialized TTS model.
213
- *
214
- * @returns Promise resolving to sample rate in Hz
215
- * @example
216
- * ```typescript
217
- * const sampleRate = await getSampleRate();
218
- * console.log(`Model outputs audio at ${sampleRate} Hz`);
219
- * ```
220
- */
221
- export function getSampleRate() {
222
- return SherpaOnnx.getTtsSampleRate();
223
- }
224
-
225
- /**
226
- * Get the number of speakers/voices available in the model.
227
- *
228
- * @returns Promise resolving to number of speakers
229
- * - 0 or 1: Single-speaker model
230
- * - >1: Multi-speaker model
231
- * @example
232
- * ```typescript
233
- * const numSpeakers = await getNumSpeakers();
234
- *
235
- * if (numSpeakers > 1) {
236
- * console.log(`Model has ${numSpeakers} different voices`);
237
- * // Generate with different voices
238
- * for (let i = 0; i < numSpeakers; i++) {
239
- * const audio = await generateSpeech('Hello', { sid: i });
240
- * // ... use audio
241
- * }
242
- * }
243
- * ```
244
- */
245
- export function getNumSpeakers() {
246
- return SherpaOnnx.getTtsNumSpeakers();
247
- }
248
-
249
- /**
250
- * Release TTS resources.
251
- *
252
- * Call this when you're done using TTS to free up memory.
253
- * After calling this, you must call `initializeTTS()` again before
254
- * using TTS functions.
255
- *
256
- * @example
257
- * ```typescript
258
- * await initializeTTS('models/vits-piper-en');
259
- * const audio = await generateSpeech('Hello');
260
- * // ... use audio
261
- * await unloadTTS(); // Free resources
262
- * ```
263
- */
264
- export function unloadTTS() {
265
- return SherpaOnnx.unloadTts();
266
- }
229
+ // ========== Module-level utilities (stateless, no instance required) ==========
267
230
 
268
- /**
269
- * Save generated TTS audio to a WAV file.
270
- *
271
- * @param audio - Generated audio from generateSpeech()
272
- * @param filePath - Absolute path where to save the WAV file
273
- * @returns Promise resolving to the file path where audio was saved
274
- * @example
275
- * ```typescript
276
- * import { Platform } from 'react-native';
277
- * import RNFS from 'react-native-fs';
278
- *
279
- * const audio = await generateSpeech('Hello, world!');
280
- *
281
- * // Save to documents directory
282
- * const documentsPath = Platform.OS === 'ios'
283
- * ? RNFS.DocumentDirectoryPath
284
- * : RNFS.ExternalDirectoryPath;
285
- * const filePath = `${documentsPath}/speech_${Date.now()}.wav`;
286
- *
287
- * const savedPath = await saveAudioToFile(audio, filePath);
288
- * console.log('Audio saved to:', savedPath);
289
- * ```
231
+ /**
232
+ * Save generated TTS audio to a WAV file.
290
233
  */
291
234
  export function saveAudioToFile(audio, filePath) {
292
235
  return SherpaOnnx.saveTtsAudioToFile(audio.samples, audio.sampleRate, filePath);
293
236
  }
294
237
 
295
- /**
296
- * Save generated TTS audio to a WAV file via Android SAF content URI.
297
- *
298
- * @param audio - Generated audio from generateSpeech()
299
- * @param directoryUri - Directory content URI from SAF
300
- * @param filename - Desired file name
301
- * @returns Promise resolving to content URI of the saved file
238
+ /**
239
+ * Save generated TTS audio to a WAV file via Android SAF content URI.
302
240
  */
303
241
  export function saveAudioToContentUri(audio, directoryUri, filename) {
304
242
  return SherpaOnnx.saveTtsAudioToContentUri(audio.samples, audio.sampleRate, directoryUri, filename);
305
243
  }
306
244
 
307
- /**
308
- * Save a text file via Android SAF content URI.
309
- *
310
- * @param text - Text content to write
311
- * @param directoryUri - Directory content URI from SAF
312
- * @param filename - Desired file name
313
- * @param mimeType - MIME type (default: text/plain)
314
- * @returns Promise resolving to content URI of the saved file
245
+ /**
246
+ * Save a text file via Android SAF content URI.
315
247
  */
316
248
  export function saveTextToContentUri(text, directoryUri, filename, mimeType = 'text/plain') {
317
249
  return SherpaOnnx.saveTtsTextToContentUri(text, directoryUri, filename, mimeType);
318
250
  }
319
251
 
320
- /**
321
- * Copy a SAF content URI to a cache file for local playback (Android only).
322
- *
323
- * @param fileUri - Content URI of the saved WAV file
324
- * @param filename - Desired cache filename
325
- * @returns Promise resolving to absolute path of the cached file
252
+ /**
253
+ * Copy a SAF content URI to a cache file for local playback (Android only).
326
254
  */
327
255
  export function copyContentUriToCache(fileUri, filename) {
328
256
  return SherpaOnnx.copyTtsContentUriToCache(fileUri, filename);
329
257
  }
330
258
 
331
- /**
332
- * Share a TTS audio file (file path or content URI).
333
- *
334
- * @param fileUri - File path or content URI
335
- * @param mimeType - MIME type (default: audio/wav)
259
+ /**
260
+ * Share a TTS audio file (file path or content URI).
336
261
  */
337
262
  export function shareAudioFile(fileUri, mimeType = 'audio/wav') {
338
263
  return SherpaOnnx.shareTtsAudio(fileUri, mimeType);
339
264
  }
340
265
 
341
- // Export types
266
+ // Export types and runtime type list
267
+
268
+ export { TTS_MODEL_TYPES } from "./types.js";
342
269
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["NativeEventEmitter","SherpaOnnx","resolveModelPath","initializeTTS","options","modelPath","modelType","numThreads","debug","noiseScale","noiseScaleW","lengthScale","undefined","resolvedPath","initializeTts","updateTtsParams","noiseArg","Number","NaN","noiseWArg","lengthArg","generateSpeech","text","generateTts","sid","speed","generateSpeechWithTimestamps","generateTtsWithTimestamps","nativeTtsEventModule","addListener","removeListeners","ttsEventEmitter","generateSpeechStream","handlers","subscriptions","event","onChunk","onEnd","onError","generateTtsStream","error","forEach","sub","remove","cancelSpeechStream","cancelTtsStream","startTtsPcmPlayer","sampleRate","channels","writeTtsPcmChunk","samples","stopTtsPcmPlayer","getModelInfo","numSpeakers","Promise","all","getTtsSampleRate","getTtsNumSpeakers","getSampleRate","getNumSpeakers","unloadTTS","unloadTts","saveAudioToFile","audio","filePath","saveTtsAudioToFile","saveAudioToContentUri","directoryUri","filename","saveTtsAudioToContentUri","saveTextToContentUri","mimeType","saveTtsTextToContentUri","copyContentUriToCache","fileUri","copyTtsContentUriToCache","shareAudioFile","shareTtsAudio"],"sourceRoot":"..\\..\\..\\src","sources":["tts/index.ts"],"mappings":"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OAAO,eAAeC,YAAYA,CAAA,EAA0B;EAC1D,MAAM,CAACL,UAAU,EAAEM,WAAW,CAAC,GAAG,MAAMC,OAAO,CAACC,GAAG,CAAC,CAClDtD,UAAU,CAACuD,gBAAgB,CAAC,CAAC,EAC7BvD,UAAU,CAACwD,iBAAiB,CAAC,CAAC,CAC/B,CAAC;EAEF,OAAO;IACLV,UAAU;IACVM;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASK,aAAaA,CAAA,EAAoB;EAC/C,OAAOzD,UAAU,CAACuD,gBAAgB,CAAC,CAAC;AACtC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,cAAcA,CAAA,EAAoB;EAChD,OAAO1D,UAAU,CAACwD,iBAAiB,CAAC,CAAC;AACvC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,SAASA,CAAA,EAAkB;EACzC,OAAO3D,UAAU,CAAC4D,SAAS,CAAC,CAAC;AAC/B;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAC7BC,KAAqB,EACrBC,QAAgB,EACC;EACjB,OAAO/D,UAAU,CAACgE,kBAAkB,CAClCF,KAAK,CAACb,OAAO,EACba,KAAK,CAAChB,UAAU,EAChBiB,QACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,qBAAqBA,CACnCH,KAAqB,EACrBI,YAAoB,EACpBC,QAAgB,EACC;EACjB,OAAOnE,UAAU,CAACoE,wBAAwB,CACxCN,KAAK,CAACb,OAAO,EACba,KAAK,CAAChB,UAAU,EAChBoB,YAAY,EACZC,QACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,oBAAoBA,CAClChD,IAAY,EACZ6C,YAAoB,EACpBC,QAAgB,EAChBG,QAAQ,GAAG,YAAY,EACN;EACjB,OAAOtE,UAAU,CAACuE,uBAAuB,CACvClD,IAAI,EACJ6C,YAAY,EACZC,QAAQ,EACRG,QACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,qBAAqBA,CACnCC,OAAe,EACfN,QAAgB,EACC;EACjB,OAAOnE,UAAU,CAAC0E,wBAAwB,CAACD,OAAO,EAAEN,QAAQ,CAAC;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASQ,cAAcA,CAC5BF,OAAe,EACfH,QAAQ,GAAG,WAAW,EACP;EACf,OAAOtE,UAAU,CAAC4E,aAAa,CAACH,OAAO,EAAEH,QAAQ,CAAC;AACpD;;AAEA","ignoreList":[]}
1
+ {"version":3,"names":["DeviceEventEmitter","SherpaOnnx","resolveModelPath","ttsInstanceCounter","flattenTtsModelOptionsForNative","modelType","modelOptions","noiseScale","undefined","noiseScaleW","lengthScale","block","vits","matcha","kokoro","kitten","pocket","out","n","detectTtsModel","modelPath","options","resolvedPath","toNativeTtsOptions","sid","speed","silenceScale","referenceAudio","samples","referenceSampleRate","sampleRate","referenceText","numSteps","extra","Object","keys","length","createTTS","instanceId","provider","numThreads","debug","ruleFsts","ruleFars","maxNumSentences","flat","result","initializeTts","success","Error","JSON","stringify","detectedModels","firstDetected","effectiveModelType","type","destroyed","guard","engine","generateSpeech","text","opts","generateTts","generateSpeechWithTimestamps","generateTtsWithTimestamps","generateSpeechStream","handlers","subscriptions","addListener","event","e","onChunk","onEnd","onError","generateTtsStream","error","forEach","sub","remove","cancelSpeechStream","cancelTtsStream","startPcmPlayer","channels","startTtsPcmPlayer","writePcmChunk","writeTtsPcmChunk","stopPcmPlayer","stopTtsPcmPlayer","updateParams","effectiveModelTypeForUpdate","flatOpts","noiseArg","Number","NaN","noiseWArg","lengthArg","updateTtsParams","getModelInfo","numSpeakers","Promise","all","getTtsSampleRate","getTtsNumSpeakers","getSampleRate","getNumSpeakers","destroy","unloadTts","saveAudioToFile","audio","filePath","saveTtsAudioToFile","saveAudioToContentUri","directoryUri","filename","saveTtsAudioToContentUri","saveTextToContentUri","mimeType","saveTtsTextToContentUri","copyContentUriToCache","fileUri","copyTtsContentUriToCache","shareAudioFile","shareTtsAudio","TTS_MODEL_TYPES"],"sourceRoot":"../../../src","sources":["tts/index.ts"],"mappings":"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","ignoreList":[]}