react-native-sherpa-onnx 0.3.7 → 0.3.8

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 (55) hide show
  1. package/README.md +3 -0
  2. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect-tts.cpp +31 -4
  3. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect.h +9 -1
  4. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-tts-wrapper.cpp +7 -0
  5. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-validate-tts.cpp +14 -0
  6. package/android/src/main/java/com/sherpaonnx/SherpaOnnxTtsHelper.kt +15 -0
  7. package/ios/SherpaOnnx+TTS.mm +1 -0
  8. package/ios/model_detect/sherpa-onnx-model-detect-tts.mm +36 -4
  9. package/ios/model_detect/sherpa-onnx-model-detect.h +9 -1
  10. package/ios/model_detect/sherpa-onnx-validate-tts.mm +14 -0
  11. package/ios/tts/sherpa-onnx-tts-wrapper.mm +9 -0
  12. package/lib/module/download/ModelDownloadManager.js +1 -1
  13. package/lib/module/download/ModelDownloadManager.js.map +1 -1
  14. package/lib/module/download/background-downloader-types.js +2 -0
  15. package/lib/module/download/background-downloader-types.js.map +1 -0
  16. package/lib/module/download/downloadTask.js +54 -1
  17. package/lib/module/download/downloadTask.js.map +1 -1
  18. package/lib/module/download/index.js +1 -1
  19. package/lib/module/download/index.js.map +1 -1
  20. package/lib/module/download/registry.js +1 -0
  21. package/lib/module/download/registry.js.map +1 -1
  22. package/lib/module/tts/index.js +1 -1
  23. package/lib/module/tts/index.js.map +1 -1
  24. package/lib/module/tts/streaming.js +1 -1
  25. package/lib/module/tts/streaming.js.map +1 -1
  26. package/lib/module/tts/types.js +4 -1
  27. package/lib/module/tts/types.js.map +1 -1
  28. package/lib/typescript/src/NativeSherpaOnnx.d.ts +1 -1
  29. package/lib/typescript/src/download/ModelDownloadManager.d.ts +2 -1
  30. package/lib/typescript/src/download/ModelDownloadManager.d.ts.map +1 -1
  31. package/lib/typescript/src/download/background-downloader-types.d.ts +64 -0
  32. package/lib/typescript/src/download/background-downloader-types.d.ts.map +1 -0
  33. package/lib/typescript/src/download/downloadTask.d.ts +10 -0
  34. package/lib/typescript/src/download/downloadTask.d.ts.map +1 -1
  35. package/lib/typescript/src/download/index.d.ts +2 -2
  36. package/lib/typescript/src/download/index.d.ts.map +1 -1
  37. package/lib/typescript/src/download/registry.d.ts.map +1 -1
  38. package/lib/typescript/src/tts/index.d.ts +1 -1
  39. package/lib/typescript/src/tts/index.d.ts.map +1 -1
  40. package/lib/typescript/src/tts/streaming.d.ts.map +1 -1
  41. package/lib/typescript/src/tts/types.d.ts +6 -1
  42. package/lib/typescript/src/tts/types.d.ts.map +1 -1
  43. package/package.json +1 -1
  44. package/src/NativeSherpaOnnx.ts +1 -1
  45. package/src/download/ModelDownloadManager.ts +2 -0
  46. package/src/download/background-downloader-types.ts +73 -0
  47. package/src/download/downloadTask.ts +68 -0
  48. package/src/download/index.ts +2 -0
  49. package/src/download/registry.ts +1 -0
  50. package/src/tts/index.ts +3 -0
  51. package/src/tts/streaming.ts +2 -0
  52. package/src/tts/types.ts +9 -0
  53. package/lib/module/download/background-downloader.d.js +0 -2
  54. package/lib/module/download/background-downloader.d.js.map +0 -1
  55. package/src/download/background-downloader.d.ts +0 -43
package/README.md CHANGED
@@ -78,6 +78,8 @@ If you use the [download manager](docs/download-manager.md) to fetch models at r
78
78
 
79
79
  Full step-by-step: [Download manager – Setup (iOS & Android)](docs/download-manager.md#setup-ios--android). Expo users can use the library’s config plugin to apply this automatically.
80
80
 
81
+ **Android:** Foreground service permissions (Play Console), visible download notifications, and **`POST_NOTIFICATIONS` (API 33+)** are covered in [Download manager – Android: foreground service & notifications](docs/download-manager.md#android-foreground-service--notifications).
82
+
81
83
  ## Table of contents
82
84
 
83
85
  - [Bundled sherpa-onnx version](#bundled-sherpa-onnx-version)
@@ -176,6 +178,7 @@ For **real-time (streaming) recognition** from a microphone or audio stream, use
176
178
  | **KittenTTS** | `'kitten'` | Lightweight, multi-speaker. Folder name should contain **kitten** (not kokoro) for auto-detection. | [Download](https://github.com/k2-fsa/sherpa-onnx/releases/tag/tts-models) |
177
179
  | **Zipvoice** | `'zipvoice'` | Standard TTS with **`sid`**. **Voice cloning** (reference audio + `referenceText`): batch via **`generateSpeech`** only—streaming TTS does not support reference audio for Zipvoice. Default **`numSteps`** when omitted is **5** on **Android and iOS** (matches sherpa-onnx `GenerationConfig` / Kotlin helper). Cloning is **supported on Android & iOS**. Encoder + decoder + vocoder. | [Download](https://k2-fsa.github.io/sherpa/onnx/tts/pretrained_models/zipvoice.html) |
178
180
  | **Pocket** | `'pocket'` | Flow-matching TTS. **Voice cloning** on **Android:** batch and streaming TTS. **iOS:** cloning is experimental. Detected by lm_flow, lm_main, text_conditioner, vocab/token_scores. | [Download](https://github.com/k2-fsa/sherpa-onnx/releases/tag/tts-models) |
181
+ | **Supertonic** | `'supertonic'` | Lightning-fast, on-device text-to-speech system designed for extreme performance with minimal computational overhead. | [Download](https://github.com/k2-fsa/sherpa-onnx/releases/tag/tts-models) |
179
182
 
180
183
  For **streaming TTS** (incremental generation, low latency), use `createStreamingTTS()` with supported model types. See [Streaming Text-to-Speech](./docs/tts-streaming.md).
181
184
 
@@ -2,7 +2,7 @@
2
2
  * sherpa-onnx-model-detect-tts.cpp
3
3
  *
4
4
  * Purpose: Detects TTS model type and fills TtsModelPaths from a model directory. Used by
5
- * nativeDetectTtsModel (module-jni). Supports Vits, Matcha, Kokoro, Kitten, Pocket, Zipvoice.
5
+ * nativeDetectTtsModel (module-jni). Supports Vits, Matcha, Kokoro, Kitten, Pocket, Zipvoice, Supertonic.
6
6
  *
7
7
  * --- Detection pipeline (overview) ---
8
8
  *
@@ -56,6 +56,7 @@ TtsModelKind ParseTtsModelType(const std::string& modelType) {
56
56
  if (modelType == "kitten") return TtsModelKind::kKitten;
57
57
  if (modelType == "pocket") return TtsModelKind::kPocket;
58
58
  if (modelType == "zipvoice") return TtsModelKind::kZipvoice;
59
+ if (modelType == "supertonic") return TtsModelKind::kSupertonic;
59
60
  return TtsModelKind::kUnknown;
60
61
  }
61
62
 
@@ -68,6 +69,7 @@ static bool CapabilitySupportsTtsKind(
68
69
  bool hasMatcha,
69
70
  bool hasPocket,
70
71
  bool hasZipvoice,
72
+ bool hasSupertonic,
71
73
  bool hasVoicesFile,
72
74
  bool hasDataDir
73
75
  ) {
@@ -83,6 +85,8 @@ static bool CapabilitySupportsTtsKind(
83
85
  return hasPocket;
84
86
  case TtsModelKind::kZipvoice:
85
87
  return hasZipvoice;
88
+ case TtsModelKind::kSupertonic:
89
+ return hasSupertonic;
86
90
  default:
87
91
  return false;
88
92
  }
@@ -108,6 +112,7 @@ static std::vector<TtsModelKind> GetKindsFromDirNameTts(const std::string& model
108
112
  if (lower.find("matcha") != std::string::npos) add(TtsModelKind::kMatcha);
109
113
  if (lower.find("pocket") != std::string::npos) add(TtsModelKind::kPocket);
110
114
  if (lower.find("zipvoice") != std::string::npos) add(TtsModelKind::kZipvoice);
115
+ if (lower.find("supertonic") != std::string::npos) add(TtsModelKind::kSupertonic);
111
116
  if (lower.find("kokoro") != std::string::npos) add(TtsModelKind::kKokoro);
112
117
  if (lower.find("kitten") != std::string::npos) add(TtsModelKind::kKitten);
113
118
  if (lower.find("vits") != std::string::npos) add(TtsModelKind::kVits);
@@ -143,16 +148,27 @@ static TtsDetectResult DetectTtsModelFromFiles(
143
148
  std::string textConditioner = FindOnnxByAnyToken(files, {"text_conditioner", "text-conditioner"}, std::nullopt);
144
149
  std::string vocabJsonFile = FindFileByName(files, "vocab.json");
145
150
  std::string tokenScoresJsonFile = FindFileByName(files, "token_scores.json");
151
+ std::string durationPredictor = FindOnnxByAnyToken(files, {"duration_predictor", "duration-predictor"}, std::nullopt);
152
+ std::string textEncoderSupertonic = FindOnnxByAnyToken(files, {"text_encoder", "text-encoder"}, std::nullopt);
153
+ std::string vectorEstimator = FindOnnxByAnyToken(files, {"vector_estimator", "vector-estimator"}, std::nullopt);
154
+ std::string ttsJsonFile = FindFileByName(files, "tts.json");
155
+ std::string unicodeIndexerFile = FindFileByName(files, "unicode_indexer.bin");
156
+ std::string voiceStyleFile = FindFileByName(files, "voice.bin");
146
157
 
147
158
  std::vector<std::string> modelExcludes = {
148
- "acoustic", "vocoder", "encoder", "decoder", "joiner"
159
+ "acoustic", "vocoder", "encoder", "decoder", "joiner",
160
+ // Supertonic component models are not VITS monolithic model.onnx files.
161
+ "duration_predictor", "duration-predictor",
162
+ "text_encoder", "text-encoder",
163
+ "vector_estimator", "vector-estimator"
149
164
  };
150
165
  std::string ttsModel = FindOnnxByAnyToken(files, {"model"}, std::nullopt);
151
166
  if (ttsModel.empty()) {
152
167
  ttsModel = FindLargestOnnxExcludingTokens(files, modelExcludes);
153
168
  }
154
169
 
155
- bool hasVits = !ttsModel.empty();
170
+ // VITS requires both model.onnx-like file and tokens.txt
171
+ bool hasVits = !ttsModel.empty() && !tokensFile.empty();
156
172
  std::string modelDirLower = ToLower(modelDir);
157
173
  bool isLikelyMatcha = modelDirLower.find("matcha") != std::string::npos;
158
174
  bool hasMatcha = (!acousticModel.empty() && !vocoder.empty())
@@ -169,6 +185,9 @@ static TtsDetectResult DetectTtsModelFromFiles(
169
185
  }
170
186
  bool hasPocket = !lmFlow.empty() && !lmMain.empty() && !encoder.empty() && !decoder.empty() &&
171
187
  !textConditioner.empty() && !vocabJsonFile.empty() && !tokenScoresJsonFile.empty();
188
+ bool hasSupertonic = !durationPredictor.empty() && !textEncoderSupertonic.empty() &&
189
+ !vectorEstimator.empty() && !vocoder.empty() && !ttsJsonFile.empty() &&
190
+ !unicodeIndexerFile.empty() && !voiceStyleFile.empty();
172
191
  bool hasDataDir = !dataDirPath.empty();
173
192
 
174
193
  bool isLikelyKitten = modelDirLower.find("kitten") != std::string::npos;
@@ -177,6 +196,7 @@ static TtsDetectResult DetectTtsModelFromFiles(
177
196
  if (hasMatcha) result.detectedModels.push_back({"matcha", modelDir});
178
197
  if (hasPocket) result.detectedModels.push_back({"pocket", modelDir});
179
198
  if (hasZipvoice && !hasMatcha) result.detectedModels.push_back({"zipvoice", modelDir});
199
+ if (hasSupertonic) result.detectedModels.push_back({"supertonic", modelDir});
180
200
  if (hasVoicesFile) {
181
201
  if (isLikelyKitten && !isLikelyKokoro) {
182
202
  result.detectedModels.push_back({"kitten", modelDir});
@@ -205,7 +225,7 @@ static TtsDetectResult DetectTtsModelFromFiles(
205
225
  std::vector<TtsModelKind> nameCandidates = GetKindsFromDirNameTts(modelDir);
206
226
  if (!nameCandidates.empty()) {
207
227
  for (TtsModelKind k : nameCandidates) {
208
- if (CapabilitySupportsTtsKind(k, hasVits, hasMatcha, hasPocket, hasZipvoice,
228
+ if (CapabilitySupportsTtsKind(k, hasVits, hasMatcha, hasPocket, hasZipvoice, hasSupertonic,
209
229
  hasVoicesFile, hasDataDir)) {
210
230
  selected = k;
211
231
  break;
@@ -216,6 +236,7 @@ static TtsDetectResult DetectTtsModelFromFiles(
216
236
  if (hasMatcha) selected = TtsModelKind::kMatcha;
217
237
  else if (hasPocket) selected = TtsModelKind::kPocket;
218
238
  else if (hasZipvoice) selected = TtsModelKind::kZipvoice;
239
+ else if (hasSupertonic) selected = TtsModelKind::kSupertonic;
219
240
  else if (hasVoicesFile) {
220
241
  if (isLikelyKitten && !isLikelyKokoro) selected = TtsModelKind::kKitten;
221
242
  else if (isLikelyKokoro && !isLikelyKitten) selected = TtsModelKind::kKokoro;
@@ -256,6 +277,12 @@ static TtsDetectResult DetectTtsModelFromFiles(
256
277
  result.paths.textConditioner = textConditioner;
257
278
  result.paths.vocabJson = vocabJsonFile;
258
279
  result.paths.tokenScoresJson = tokenScoresJsonFile;
280
+ result.paths.durationPredictor = durationPredictor;
281
+ result.paths.textEncoder = textEncoderSupertonic;
282
+ result.paths.vectorEstimator = vectorEstimator;
283
+ result.paths.ttsJson = ttsJsonFile;
284
+ result.paths.unicodeIndexer = unicodeIndexerFile;
285
+ result.paths.voiceStyle = voiceStyleFile;
259
286
 
260
287
  auto validation = ValidateTtsPaths(selected, result.paths, modelDir);
261
288
  if (!validation.ok) {
@@ -38,7 +38,8 @@ enum class TtsModelKind {
38
38
  kKokoro,
39
39
  kKitten,
40
40
  kPocket,
41
- kZipvoice
41
+ kZipvoice,
42
+ kSupertonic
42
43
  };
43
44
 
44
45
  struct SttModelPaths {
@@ -154,6 +155,13 @@ struct TtsModelPaths {
154
155
  std::string textConditioner;
155
156
  std::string vocabJson;
156
157
  std::string tokenScoresJson;
158
+ // Supertonic TTS
159
+ std::string durationPredictor;
160
+ std::string textEncoder;
161
+ std::string vectorEstimator;
162
+ std::string ttsJson;
163
+ std::string unicodeIndexer;
164
+ std::string voiceStyle;
157
165
  };
158
166
 
159
167
  struct SttDetectResult {
@@ -20,6 +20,7 @@ const char* TtsModelKindToString(TtsModelKind k) {
20
20
  case TtsModelKind::kKitten: return "kitten";
21
21
  case TtsModelKind::kPocket: return "pocket";
22
22
  case TtsModelKind::kZipvoice: return "zipvoice";
23
+ case TtsModelKind::kSupertonic: return "supertonic";
23
24
  default: return "unknown";
24
25
  }
25
26
  }
@@ -78,6 +79,12 @@ jobject TtsDetectResultToJava(JNIEnv* env, const TtsDetectResult& result) {
78
79
  PutString(env, pathsMap, mapPut, "textConditioner", result.paths.textConditioner);
79
80
  PutString(env, pathsMap, mapPut, "vocabJson", result.paths.vocabJson);
80
81
  PutString(env, pathsMap, mapPut, "tokenScoresJson", result.paths.tokenScoresJson);
82
+ PutString(env, pathsMap, mapPut, "durationPredictor", result.paths.durationPredictor);
83
+ PutString(env, pathsMap, mapPut, "textEncoder", result.paths.textEncoder);
84
+ PutString(env, pathsMap, mapPut, "vectorEstimator", result.paths.vectorEstimator);
85
+ PutString(env, pathsMap, mapPut, "ttsJson", result.paths.ttsJson);
86
+ PutString(env, pathsMap, mapPut, "unicodeIndexer", result.paths.unicodeIndexer);
87
+ PutString(env, pathsMap, mapPut, "voiceStyle", result.paths.voiceStyle);
81
88
  jstring keyPaths = env->NewStringUTF("paths");
82
89
  env->CallObjectMethod(map, mapPut, keyPaths, pathsMap);
83
90
  env->DeleteLocalRef(keyPaths);
@@ -59,6 +59,16 @@ static const TtsFieldRequirement kZipvoiceReqs[] = {
59
59
  {"lexicon", &TtsModelPaths::lexicon, true},
60
60
  };
61
61
 
62
+ static const TtsFieldRequirement kSupertonicReqs[] = {
63
+ {"durationPredictor", &TtsModelPaths::durationPredictor, true},
64
+ {"textEncoder", &TtsModelPaths::textEncoder, true},
65
+ {"vectorEstimator", &TtsModelPaths::vectorEstimator, true},
66
+ {"vocoder", &TtsModelPaths::vocoder, true},
67
+ {"ttsJson", &TtsModelPaths::ttsJson, true},
68
+ {"unicodeIndexer", &TtsModelPaths::unicodeIndexer, true},
69
+ {"voiceStyle", &TtsModelPaths::voiceStyle, true},
70
+ };
71
+
62
72
  // ============================================================
63
73
 
64
74
  static const TtsFieldRequirement* GetRequirements(TtsModelKind kind, size_t& count) {
@@ -79,6 +89,9 @@ static const TtsFieldRequirement* GetRequirements(TtsModelKind kind, size_t& cou
79
89
  case TtsModelKind::kZipvoice:
80
90
  count = std::size(kZipvoiceReqs);
81
91
  return kZipvoiceReqs;
92
+ case TtsModelKind::kSupertonic:
93
+ count = std::size(kSupertonicReqs);
94
+ return kSupertonicReqs;
82
95
  default:
83
96
  count = 0;
84
97
  return nullptr;
@@ -93,6 +106,7 @@ static const char* TtsKindToName(TtsModelKind k) {
93
106
  case TtsModelKind::kKitten: return "Kitten";
94
107
  case TtsModelKind::kPocket: return "Pocket";
95
108
  case TtsModelKind::kZipvoice: return "Zipvoice";
109
+ case TtsModelKind::kSupertonic: return "Supertonic";
96
110
  default: return "Unknown";
97
111
  }
98
112
  }
@@ -31,6 +31,7 @@ import com.k2fsa.sherpa.onnx.OfflineTtsMatchaModelConfig
31
31
  import com.k2fsa.sherpa.onnx.OfflineTtsKokoroModelConfig
32
32
  import com.k2fsa.sherpa.onnx.OfflineTtsKittenModelConfig
33
33
  import com.k2fsa.sherpa.onnx.OfflineTtsZipVoiceModelConfig
34
+ import com.k2fsa.sherpa.onnx.OfflineTtsSupertonicModelConfig
34
35
  import java.io.File
35
36
  import java.io.FileInputStream
36
37
  import java.io.FileOutputStream
@@ -1062,6 +1063,20 @@ internal class SherpaOnnxTtsHelper(
1062
1063
  debug = debug,
1063
1064
  provider = prov
1064
1065
  )
1066
+ "supertonic" -> OfflineTtsModelConfig(
1067
+ supertonic = OfflineTtsSupertonicModelConfig(
1068
+ durationPredictor = path(paths, "durationPredictor"),
1069
+ textEncoder = path(paths, "textEncoder"),
1070
+ vectorEstimator = path(paths, "vectorEstimator"),
1071
+ vocoder = path(paths, "vocoder"),
1072
+ ttsJson = path(paths, "ttsJson"),
1073
+ unicodeIndexer = path(paths, "unicodeIndexer"),
1074
+ voiceStyle = path(paths, "voiceStyle")
1075
+ ),
1076
+ numThreads = numThreads,
1077
+ debug = debug,
1078
+ provider = prov
1079
+ )
1065
1080
  else -> {
1066
1081
  if (path(paths, "acousticModel").isNotEmpty()) {
1067
1082
  OfflineTtsModelConfig(
@@ -58,6 +58,7 @@ static NSString *ttsModelKindToNSString(sherpaonnx::TtsModelKind kind) {
58
58
  case K::kKitten: return @"kitten";
59
59
  case K::kPocket: return @"pocket";
60
60
  case K::kZipvoice: return @"zipvoice";
61
+ case K::kSupertonic: return @"supertonic";
61
62
  default: return @"unknown";
62
63
  }
63
64
  }
@@ -2,7 +2,7 @@
2
2
  * sherpa-onnx-model-detect-tts.mm
3
3
  *
4
4
  * Purpose: Detects TTS (text-to-speech) model type and fills TtsModelPaths from a model directory.
5
- * Used by the TTS wrapper on iOS. Supports Vits, Matcha, Kokoro, Kitten, Pocket, Zipvoice.
5
+ * Used by the TTS wrapper on iOS. Supports Vits, Matcha, Kokoro, Kitten, Pocket, Zipvoice, Supertonic.
6
6
  *
7
7
  * --- Detection pipeline (overview) ---
8
8
  *
@@ -58,6 +58,7 @@ TtsModelKind ParseTtsModelType(const std::string& modelType) {
58
58
  if (modelType == "kitten") return TtsModelKind::kKitten;
59
59
  if (modelType == "pocket") return TtsModelKind::kPocket;
60
60
  if (modelType == "zipvoice") return TtsModelKind::kZipvoice;
61
+ if (modelType == "supertonic") return TtsModelKind::kSupertonic;
61
62
  return TtsModelKind::kUnknown;
62
63
  }
63
64
 
@@ -70,6 +71,7 @@ static bool CapabilitySupportsTtsKind(
70
71
  bool hasMatcha,
71
72
  bool hasPocket,
72
73
  bool hasZipvoice,
74
+ bool hasSupertonic,
73
75
  bool hasVoicesFile,
74
76
  bool hasDataDir
75
77
  ) {
@@ -85,6 +87,8 @@ static bool CapabilitySupportsTtsKind(
85
87
  return hasPocket;
86
88
  case TtsModelKind::kZipvoice:
87
89
  return hasZipvoice;
90
+ case TtsModelKind::kSupertonic:
91
+ return hasSupertonic;
88
92
  default:
89
93
  return false;
90
94
  }
@@ -109,6 +113,7 @@ static std::vector<TtsModelKind> GetKindsFromDirNameTts(const std::string& model
109
113
  if (lower.find("matcha") != std::string::npos) add(TtsModelKind::kMatcha);
110
114
  if (lower.find("pocket") != std::string::npos) add(TtsModelKind::kPocket);
111
115
  if (lower.find("zipvoice") != std::string::npos) add(TtsModelKind::kZipvoice);
116
+ if (lower.find("supertonic") != std::string::npos) add(TtsModelKind::kSupertonic);
112
117
  if (lower.find("kokoro") != std::string::npos) add(TtsModelKind::kKokoro);
113
118
  if (lower.find("kitten") != std::string::npos) add(TtsModelKind::kKitten);
114
119
  if (lower.find("vits") != std::string::npos) add(TtsModelKind::kVits);
@@ -154,14 +159,27 @@ TtsDetectResult DetectTtsModel(const std::string& modelDir, const std::string& m
154
159
  std::string textConditioner = FindOnnxByAnyToken(files, {"text_conditioner", "text-conditioner"}, std::nullopt);
155
160
  std::string vocabJsonFile = FindFileByName(files, "vocab.json");
156
161
  std::string tokenScoresJsonFile = FindFileByName(files, "token_scores.json");
162
+ std::string durationPredictor = FindOnnxByAnyToken(files, {"duration_predictor", "duration-predictor"}, std::nullopt);
163
+ std::string textEncoderSupertonic = FindOnnxByAnyToken(files, {"text_encoder", "text-encoder"}, std::nullopt);
164
+ std::string vectorEstimator = FindOnnxByAnyToken(files, {"vector_estimator", "vector-estimator"}, std::nullopt);
165
+ std::string ttsJsonFile = FindFileByName(files, "tts.json");
166
+ std::string unicodeIndexerFile = FindFileByName(files, "unicode_indexer.bin");
167
+ std::string voiceStyleFile = FindFileByName(files, "voice.bin");
157
168
 
158
- std::vector<std::string> modelExcludes = {"acoustic", "vocoder", "encoder", "decoder", "joiner"};
169
+ std::vector<std::string> modelExcludes = {
170
+ "acoustic", "vocoder", "encoder", "decoder", "joiner",
171
+ // Supertonic component models are not VITS monolithic model.onnx files.
172
+ "duration_predictor", "duration-predictor",
173
+ "text_encoder", "text-encoder",
174
+ "vector_estimator", "vector-estimator"
175
+ };
159
176
  std::string ttsModel = FindOnnxByAnyToken(files, {"model"}, std::nullopt);
160
177
  if (ttsModel.empty()) {
161
178
  ttsModel = FindLargestOnnxExcludingTokens(files, modelExcludes);
162
179
  }
163
180
 
164
- bool hasVits = !ttsModel.empty();
181
+ // VITS requires both model.onnx-like file and tokens.txt
182
+ bool hasVits = !ttsModel.empty() && !tokensFile.empty();
165
183
  std::string modelDirLower = ToLower(modelDir);
166
184
  bool isLikelyMatcha = modelDirLower.find("matcha") != std::string::npos;
167
185
  bool hasMatcha = (!acousticModel.empty() && !vocoder.empty())
@@ -178,6 +196,9 @@ TtsDetectResult DetectTtsModel(const std::string& modelDir, const std::string& m
178
196
  }
179
197
  bool hasPocket = !lmFlow.empty() && !lmMain.empty() && !encoder.empty() && !decoder.empty() &&
180
198
  !textConditioner.empty() && !vocabJsonFile.empty() && !tokenScoresJsonFile.empty();
199
+ bool hasSupertonic = !durationPredictor.empty() && !textEncoderSupertonic.empty() &&
200
+ !vectorEstimator.empty() && !vocoder.empty() && !ttsJsonFile.empty() &&
201
+ !unicodeIndexerFile.empty() && !voiceStyleFile.empty();
181
202
  bool hasDataDir = !dataDirPath.empty();
182
203
 
183
204
  bool isLikelyKitten = modelDirLower.find("kitten") != std::string::npos;
@@ -192,6 +213,9 @@ TtsDetectResult DetectTtsModel(const std::string& modelDir, const std::string& m
192
213
  if (hasZipvoice && !hasMatcha) {
193
214
  result.detectedModels.push_back({"zipvoice", modelDir});
194
215
  }
216
+ if (hasSupertonic) {
217
+ result.detectedModels.push_back({"supertonic", modelDir});
218
+ }
195
219
  if (hasVoicesFile) {
196
220
  if (isLikelyKitten && !isLikelyKokoro) {
197
221
  result.detectedModels.push_back({"kitten", modelDir});
@@ -228,7 +252,7 @@ TtsDetectResult DetectTtsModel(const std::string& modelDir, const std::string& m
228
252
  std::vector<TtsModelKind> nameCandidates = GetKindsFromDirNameTts(modelDir);
229
253
  if (!nameCandidates.empty()) {
230
254
  for (TtsModelKind k : nameCandidates) {
231
- if (CapabilitySupportsTtsKind(k, hasVits, hasMatcha, hasPocket, hasZipvoice,
255
+ if (CapabilitySupportsTtsKind(k, hasVits, hasMatcha, hasPocket, hasZipvoice, hasSupertonic,
232
256
  hasVoicesFile, hasDataDir)) {
233
257
  selected = k;
234
258
  break;
@@ -243,6 +267,8 @@ TtsDetectResult DetectTtsModel(const std::string& modelDir, const std::string& m
243
267
  selected = TtsModelKind::kPocket;
244
268
  } else if (hasZipvoice) {
245
269
  selected = TtsModelKind::kZipvoice;
270
+ } else if (hasSupertonic) {
271
+ selected = TtsModelKind::kSupertonic;
246
272
  } else if (hasVoicesFile) {
247
273
  if (isLikelyKitten && !isLikelyKokoro) {
248
274
  selected = TtsModelKind::kKitten;
@@ -289,6 +315,12 @@ TtsDetectResult DetectTtsModel(const std::string& modelDir, const std::string& m
289
315
  result.paths.textConditioner = textConditioner;
290
316
  result.paths.vocabJson = vocabJsonFile;
291
317
  result.paths.tokenScoresJson = tokenScoresJsonFile;
318
+ result.paths.durationPredictor = durationPredictor;
319
+ result.paths.textEncoder = textEncoderSupertonic;
320
+ result.paths.vectorEstimator = vectorEstimator;
321
+ result.paths.ttsJson = ttsJsonFile;
322
+ result.paths.unicodeIndexer = unicodeIndexerFile;
323
+ result.paths.voiceStyle = voiceStyleFile;
292
324
 
293
325
  auto validation = ValidateTtsPaths(selected, result.paths, modelDir);
294
326
  if (!validation.ok) {
@@ -37,7 +37,8 @@ enum class TtsModelKind {
37
37
  kKokoro,
38
38
  kKitten,
39
39
  kPocket,
40
- kZipvoice
40
+ kZipvoice,
41
+ kSupertonic
41
42
  };
42
43
 
43
44
  struct SttModelPaths {
@@ -150,6 +151,13 @@ struct TtsModelPaths {
150
151
  std::string textConditioner;
151
152
  std::string vocabJson;
152
153
  std::string tokenScoresJson;
154
+ // Supertonic TTS
155
+ std::string durationPredictor;
156
+ std::string textEncoder;
157
+ std::string vectorEstimator;
158
+ std::string ttsJson;
159
+ std::string unicodeIndexer;
160
+ std::string voiceStyle;
153
161
  };
154
162
 
155
163
  struct SttDetectResult {
@@ -59,6 +59,16 @@ static const TtsFieldRequirement kZipvoiceReqs[] = {
59
59
  {"lexicon", &TtsModelPaths::lexicon, true},
60
60
  };
61
61
 
62
+ static const TtsFieldRequirement kSupertonicReqs[] = {
63
+ {"durationPredictor", &TtsModelPaths::durationPredictor, true},
64
+ {"textEncoder", &TtsModelPaths::textEncoder, true},
65
+ {"vectorEstimator", &TtsModelPaths::vectorEstimator, true},
66
+ {"vocoder", &TtsModelPaths::vocoder, true},
67
+ {"ttsJson", &TtsModelPaths::ttsJson, true},
68
+ {"unicodeIndexer", &TtsModelPaths::unicodeIndexer, true},
69
+ {"voiceStyle", &TtsModelPaths::voiceStyle, true},
70
+ };
71
+
62
72
  // ============================================================
63
73
 
64
74
  static const TtsFieldRequirement* GetRequirements(TtsModelKind kind, size_t& count) {
@@ -79,6 +89,9 @@ static const TtsFieldRequirement* GetRequirements(TtsModelKind kind, size_t& cou
79
89
  case TtsModelKind::kZipvoice:
80
90
  count = std::size(kZipvoiceReqs);
81
91
  return kZipvoiceReqs;
92
+ case TtsModelKind::kSupertonic:
93
+ count = std::size(kSupertonicReqs);
94
+ return kSupertonicReqs;
82
95
  default:
83
96
  count = 0;
84
97
  return nullptr;
@@ -93,6 +106,7 @@ static const char* TtsKindToName(TtsModelKind k) {
93
106
  case TtsModelKind::kKitten: return "Kitten";
94
107
  case TtsModelKind::kPocket: return "Pocket";
95
108
  case TtsModelKind::kZipvoice: return "Zipvoice";
109
+ case TtsModelKind::kSupertonic: return "Supertonic";
96
110
  default: return "Unknown";
97
111
  }
98
112
  }
@@ -161,6 +161,15 @@ TtsInitializeResult TtsWrapper::initialize(
161
161
  config.model.pocket.vocab_json = detect.paths.vocabJson;
162
162
  config.model.pocket.token_scores_json = detect.paths.tokenScoresJson;
163
163
  break;
164
+ case TtsModelKind::kSupertonic:
165
+ config.model.supertonic.duration_predictor = detect.paths.durationPredictor;
166
+ config.model.supertonic.text_encoder = detect.paths.textEncoder;
167
+ config.model.supertonic.vector_estimator = detect.paths.vectorEstimator;
168
+ config.model.supertonic.vocoder = detect.paths.vocoder;
169
+ config.model.supertonic.tts_json = detect.paths.ttsJson;
170
+ config.model.supertonic.unicode_indexer = detect.paths.unicodeIndexer;
171
+ config.model.supertonic.voice_style = detect.paths.voiceStyle;
172
+ break;
164
173
  case TtsModelKind::kUnknown:
165
174
  default:
166
175
  result.error = "TTS: Unknown model type: " + modelType;
@@ -5,7 +5,7 @@ export { ModelCategory } from "./types.js";
5
5
  export { subscribeDownloadProgress, subscribeModelsListUpdated } from "./downloadEvents.js";
6
6
  export { listModelsByCategory, refreshModelsByCategory, getModelsCacheStatusByCategory, getModelByIdByCategory } from "./registry.js";
7
7
  export { listDownloadedModelsByCategory, isModelDownloadedByCategory, getLocalModelPathByCategory, updateModelLastUsed, listDownloadedModelsWithMetadata, cleanupLeastRecentlyUsed, deleteModelByCategory, clearModelCacheByCategory, getDownloadStorageBase } from "./localModels.js";
8
- export { downloadModelByCategory, getIncompleteDownloads, resumeDownload, deleteIncompleteDownload } from "./downloadTask.js";
8
+ export { configureModelDownloadBackgroundDownloader, downloadModelByCategory, getIncompleteDownloads, resumeDownload, deleteIncompleteDownload } from "./downloadTask.js";
9
9
  export { extractModelByCategory, getIncompleteExtractions, resumeExtraction, deleteIncompleteExtraction } from "./modelExtraction.js";
10
10
  export { ensureModelByCategory } from "./ensureModel.js";
11
11
  export { getProtectedModelKeysForBulkDelete } from "./protectedModelKeys.js";
@@ -1 +1 @@
1
- {"version":3,"names":["ModelCategory","subscribeDownloadProgress","subscribeModelsListUpdated","listModelsByCategory","refreshModelsByCategory","getModelsCacheStatusByCategory","getModelByIdByCategory","listDownloadedModelsByCategory","isModelDownloadedByCategory","getLocalModelPathByCategory","updateModelLastUsed","listDownloadedModelsWithMetadata","cleanupLeastRecentlyUsed","deleteModelByCategory","clearModelCacheByCategory","getDownloadStorageBase","downloadModelByCategory","getIncompleteDownloads","resumeDownload","deleteIncompleteDownload","extractModelByCategory","getIncompleteExtractions","resumeExtraction","deleteIncompleteExtraction","ensureModelByCategory","getProtectedModelKeysForBulkDelete","purgeDownloadedModelArtifacts"],"sourceRoot":"../../../src","sources":["download/ModelDownloadManager.ts"],"mappings":";;AAAA;AACA,SACEA,aAAa,QAaR,YAAS;AAChB,SACEC,yBAAyB,EACzBC,0BAA0B,QACrB,qBAAkB;AACzB,SACEC,oBAAoB,EACpBC,uBAAuB,EACvBC,8BAA8B,EAC9BC,sBAAsB,QACjB,eAAY;AACnB,SACEC,8BAA8B,EAC9BC,2BAA2B,EAC3BC,2BAA2B,EAC3BC,mBAAmB,EACnBC,gCAAgC,EAChCC,wBAAwB,EACxBC,qBAAqB,EACrBC,yBAAyB,EACzBC,sBAAsB,QACjB,kBAAe;AACtB,SACEC,uBAAuB,EACvBC,sBAAsB,EACtBC,cAAc,EACdC,wBAAwB,QACnB,mBAAgB;AACvB,SACEC,sBAAsB,EACtBC,wBAAwB,EACxBC,gBAAgB,EAChBC,0BAA0B,QACrB,sBAAmB;AAC1B,SAASC,qBAAqB,QAAQ,kBAAe;AAErD,SAASC,kCAAkC,QAAQ,yBAAsB;AACzE,SACEC,6BAA6B,QAExB,gBAAa","ignoreList":[]}
1
+ {"version":3,"names":["ModelCategory","subscribeDownloadProgress","subscribeModelsListUpdated","listModelsByCategory","refreshModelsByCategory","getModelsCacheStatusByCategory","getModelByIdByCategory","listDownloadedModelsByCategory","isModelDownloadedByCategory","getLocalModelPathByCategory","updateModelLastUsed","listDownloadedModelsWithMetadata","cleanupLeastRecentlyUsed","deleteModelByCategory","clearModelCacheByCategory","getDownloadStorageBase","configureModelDownloadBackgroundDownloader","downloadModelByCategory","getIncompleteDownloads","resumeDownload","deleteIncompleteDownload","extractModelByCategory","getIncompleteExtractions","resumeExtraction","deleteIncompleteExtraction","ensureModelByCategory","getProtectedModelKeysForBulkDelete","purgeDownloadedModelArtifacts"],"sourceRoot":"../../../src","sources":["download/ModelDownloadManager.ts"],"mappings":";;AAAA;AACA,SACEA,aAAa,QAaR,YAAS;AAChB,SACEC,yBAAyB,EACzBC,0BAA0B,QACrB,qBAAkB;AACzB,SACEC,oBAAoB,EACpBC,uBAAuB,EACvBC,8BAA8B,EAC9BC,sBAAsB,QACjB,eAAY;AACnB,SACEC,8BAA8B,EAC9BC,2BAA2B,EAC3BC,2BAA2B,EAC3BC,mBAAmB,EACnBC,gCAAgC,EAChCC,wBAAwB,EACxBC,qBAAqB,EACrBC,yBAAyB,EACzBC,sBAAsB,QACjB,kBAAe;AACtB,SACEC,0CAA0C,EAC1CC,uBAAuB,EACvBC,sBAAsB,EACtBC,cAAc,EACdC,wBAAwB,QACnB,mBAAgB;AAEvB,SACEC,sBAAsB,EACtBC,wBAAwB,EACxBC,gBAAgB,EAChBC,0BAA0B,QACrB,sBAAmB;AAC1B,SAASC,qBAAqB,QAAQ,kBAAe;AAErD,SAASC,kCAAkC,QAAQ,yBAAsB;AACzE,SACEC,6BAA6B,QAExB,gBAAa","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=background-downloader-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../../src","sources":["download/background-downloader-types.ts"],"mappings":"","ignoreList":[]}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import { createDownloadTask, completeHandler, getExistingDownloadTasks } from '@kesha-antonov/react-native-background-downloader';
3
+ import { Platform } from 'react-native';
4
+ import { createDownloadTask, completeHandler, getExistingDownloadTasks, setConfig } from '@kesha-antonov/react-native-background-downloader';
4
5
  import { exists, readFile, mkdir, writeFile, stat, unlink } from '@dr.pogodin/react-native-fs';
5
6
  import { checkDiskSpace, removeDirectoryRecursive } from "./validation.js";
6
7
  import { getModelsBaseDir, getModelDir, getArchivePath, getReadyMarkerPath, getDownloadStatePath, getNativeAssetExtractedModelDir, getTarArchivePath, getOnnxPath } from "./paths.js";
@@ -12,6 +13,56 @@ function makeDownloadTaskId(category, id) {
12
13
  return `${category}:${id}`;
13
14
  }
14
15
  const activeDownloadTasks = new Map();
16
+ let androidDownloaderNotificationConfigApplied = false;
17
+ let didWarnConfigFailure = false;
18
+ function warnBackgroundDownloaderConfigFailure(context, error) {
19
+ if (didWarnConfigFailure) return;
20
+ didWarnConfigFailure = true;
21
+ const reason = error instanceof Error ? error.message : String(error);
22
+ console.warn(`[Download] Background downloader config failed (${context}): ${reason}`);
23
+ }
24
+ /**
25
+ * Apply your own `@kesha-antonov/react-native-background-downloader` `setConfig` **before** the first
26
+ * model download. When called, the SDK will **not** overwrite it with built-in defaults on first download.
27
+ *
28
+ * Safe to call at app startup (e.g. `App.tsx`). Other `setConfig` options (e.g. headers) are forwarded
29
+ * where the native module supports them on each platform.
30
+ */
31
+ export function configureModelDownloadBackgroundDownloader(options) {
32
+ try {
33
+ setConfig(options);
34
+ androidDownloaderNotificationConfigApplied = true;
35
+ } catch (error) {
36
+ // Keep fallback default config enabled if custom config fails.
37
+ warnBackgroundDownloaderConfigFailure('custom', error);
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Library default is showNotificationsEnabled: false (silent empty FGS notification).
43
+ * Enable visible notifications unless the host app already called `configureModelDownloadBackgroundDownloader`.
44
+ */
45
+ function ensureAndroidBackgroundDownloaderNotifications() {
46
+ if (androidDownloaderNotificationConfigApplied) return;
47
+ if (Platform.OS !== 'android') return;
48
+ try {
49
+ setConfig({
50
+ showNotificationsEnabled: true,
51
+ notificationsGrouping: {
52
+ enabled: false,
53
+ mode: 'individual',
54
+ texts: {
55
+ downloadTitle: 'Model download',
56
+ downloadStarting: 'Starting download…',
57
+ downloadProgress: 'Downloading… {progress}%'
58
+ }
59
+ }
60
+ });
61
+ androidDownloaderNotificationConfigApplied = true;
62
+ } catch (error) {
63
+ warnBackgroundDownloaderConfigFailure('default', error);
64
+ }
65
+ }
15
66
  export async function downloadModelByCategory(category, id, opts) {
16
67
  const isAborted = () => Boolean(opts?.signal?.aborted);
17
68
  if (opts?.signal?.aborted) {
@@ -51,6 +102,7 @@ export async function downloadModelByCategory(category, id, opts) {
51
102
  if (!diskSpaceCheck.success) {
52
103
  throw new Error(`Insufficient disk space: ${diskSpaceCheck.message}`);
53
104
  }
105
+ ensureAndroidBackgroundDownloaderNotifications();
54
106
  const statePath = getDownloadStatePath(category, id);
55
107
  if (opts?.overwrite) {
56
108
  if (await exists(modelDir)) await unlink(modelDir);
@@ -246,6 +298,7 @@ export async function getIncompleteDownloads(category) {
246
298
  return states;
247
299
  }
248
300
  export async function resumeDownload(category, id, opts) {
301
+ ensureAndroidBackgroundDownloaderNotifications();
249
302
  const taskId = makeDownloadTaskId(category, id);
250
303
  const existingTasks = await getExistingDownloadTasks();
251
304
  const existing = existingTasks.find(t => t.id === taskId);
@@ -1 +1 @@
1
- {"version":3,"names":["createDownloadTask","completeHandler","getExistingDownloadTasks","exists","readFile","mkdir","writeFile","stat","unlink","checkDiskSpace","removeDirectoryRecursive","getModelsBaseDir","getModelDir","getArchivePath","getReadyMarkerPath","getDownloadStatePath","getNativeAssetExtractedModelDir","getTarArchivePath","getOnnxPath","emitDownloadProgress","runPostDownloadProcessing","getModelByIdByCategory","listDownloadedModelsByCategory","makeDownloadTaskId","category","id","activeDownloadTasks","Map","downloadModelByCategory","opts","isAborted","Boolean","signal","aborted","abortError","Error","name","model","baseDir","downloadPath","archiveExt","isArchive","modelDir","sleep","ms","Promise","resolve","setTimeout","cleanupPartial","cleanupPartialWithRetry","attempt","console","warn","diskSpaceCheck","bytes","success","message","statePath","overwrite","readyMarkerExists","downloadState","modelId","phase","startedAt","Date","toISOString","archivePath","totalBytes","JSON","stringify","taskId","reject","abortHandler","cleanup","removeEventListener","undefined","delete","task","url","downloadUrl","destination","metadata","progress","bytesDownloaded","bytesTotal","total","percent","onProgress","done","result","onChecksumIssue","deleteArchiveAfterExtract","getDownloadedList","e","error","errorCode","String","set","stop","err","addEventListener","start","archiveStat","size","getIncompleteDownloads","prefix","states","existingTasks","startsWith","slice","length","readyPath","raw","fromFile","parse","meta","st","push","resumeDownload","existing","find","t","resume","catch","deleteIncompleteDownload","tarPath","onnxPath","getActiveDownloadTaskKeys","keys"],"sourceRoot":"../../../src","sources":["download/downloadTask.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Platform","createDownloadTask","completeHandler","getExistingDownloadTasks","setConfig","exists","readFile","mkdir","writeFile","stat","unlink","checkDiskSpace","removeDirectoryRecursive","getModelsBaseDir","getModelDir","getArchivePath","getReadyMarkerPath","getDownloadStatePath","getNativeAssetExtractedModelDir","getTarArchivePath","getOnnxPath","emitDownloadProgress","runPostDownloadProcessing","getModelByIdByCategory","listDownloadedModelsByCategory","makeDownloadTaskId","category","id","activeDownloadTasks","Map","androidDownloaderNotificationConfigApplied","didWarnConfigFailure","warnBackgroundDownloaderConfigFailure","context","error","reason","Error","message","String","console","warn","configureModelDownloadBackgroundDownloader","options","ensureAndroidBackgroundDownloaderNotifications","OS","showNotificationsEnabled","notificationsGrouping","enabled","mode","texts","downloadTitle","downloadStarting","downloadProgress","downloadModelByCategory","opts","isAborted","Boolean","signal","aborted","abortError","name","model","baseDir","downloadPath","archiveExt","isArchive","modelDir","sleep","ms","Promise","resolve","setTimeout","cleanupPartial","cleanupPartialWithRetry","attempt","diskSpaceCheck","bytes","success","statePath","overwrite","readyMarkerExists","downloadState","modelId","phase","startedAt","Date","toISOString","archivePath","totalBytes","JSON","stringify","taskId","reject","abortHandler","cleanup","removeEventListener","undefined","delete","task","url","downloadUrl","destination","metadata","progress","bytesDownloaded","bytesTotal","total","percent","onProgress","done","result","onChecksumIssue","deleteArchiveAfterExtract","getDownloadedList","e","errorCode","set","stop","err","addEventListener","start","archiveStat","size","getIncompleteDownloads","prefix","states","existingTasks","startsWith","slice","length","readyPath","raw","fromFile","parse","meta","st","push","resumeDownload","existing","find","t","resume","catch","deleteIncompleteDownload","tarPath","onnxPath","getActiveDownloadTaskKeys","keys"],"sourceRoot":"../../../src","sources":["download/downloadTask.ts"],"mappings":"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","ignoreList":[]}