react-native-sherpa-onnx 0.3.6 → 0.3.7
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.
- package/LICENSE +1 -0
- package/README.md +89 -21
- package/SherpaOnnx.podspec +3 -0
- package/THIRD_PARTY_LICENSES/README.md +62 -0
- package/THIRD_PARTY_LICENSES/ffmpeg.txt +502 -0
- package/THIRD_PARTY_LICENSES/libarchive.txt +65 -0
- package/THIRD_PARTY_LICENSES/nvidia_omla.txt +181 -0
- package/THIRD_PARTY_LICENSES/onnxruntime.txt +21 -0
- package/THIRD_PARTY_LICENSES/opus.txt +44 -0
- package/THIRD_PARTY_LICENSES/sherpa-onnx.txt +201 -0
- package/THIRD_PARTY_LICENSES/shine.txt +482 -0
- package/THIRD_PARTY_LICENSES/zstd.txt +30 -0
- package/android/build.gradle +7 -3
- package/android/prebuilt-download.gradle +344 -152
- package/android/prebuilt-versions.gradle +1 -1
- package/android/src/main/assets/model_licenses/asr-models-license-status.csv +409 -0
- package/android/src/main/assets/model_licenses/qnn-asr-models-license-status.csv +695 -0
- package/android/src/main/assets/model_licenses/tts-models-license-status.csv +596 -0
- package/android/src/main/cpp/CMakeLists.txt +28 -10
- package/android/src/main/cpp/jni/archive/sherpa-onnx-archive-helper.cpp +2 -2
- package/android/src/main/cpp/jni/audio/sherpa-onnx-audio-convert-jni.cpp +268 -2
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect-tts.cpp +6 -2
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-validate-tts.cpp +4 -2
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxArchiveHelper.kt +40 -10
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxModule.kt +99 -0
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxOnlineSttHelper.kt +4 -1
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxTtsHelper.kt +112 -97
- package/ios/Resources/model_licenses/asr-models-license-status.csv +409 -0
- package/ios/Resources/model_licenses/qnn-asr-models-license-status.csv +695 -0
- package/ios/Resources/model_licenses/tts-models-license-status.csv +596 -0
- package/ios/SherpaOnnx+OnlineSTT.mm +2 -0
- package/ios/SherpaOnnx+PcmLiveStream.mm +2 -29
- package/ios/SherpaOnnx+TTS.mm +178 -20
- package/ios/SherpaOnnx.mm +54 -0
- package/ios/SherpaOnnxAudioConvert.h +10 -0
- package/ios/SherpaOnnxAudioConvert.mm +257 -1
- package/ios/archive/sherpa-onnx-archive-helper.h +3 -0
- package/ios/archive/sherpa-onnx-archive-helper.mm +39 -6
- package/ios/model_detect/sherpa-onnx-model-detect-tts.mm +13 -2
- package/ios/model_detect/sherpa-onnx-validate-tts.mm +4 -2
- package/ios/online_stt/sherpa-onnx-online-stt-wrapper.h +1 -0
- package/ios/online_stt/sherpa-onnx-online-stt-wrapper.mm +4 -0
- package/ios/tts/sherpa-onnx-tts-wrapper.h +37 -0
- package/ios/tts/sherpa-onnx-tts-wrapper.mm +149 -3
- package/lib/module/NativeSherpaOnnx.js.map +1 -1
- package/lib/module/audio/index.js +8 -0
- package/lib/module/audio/index.js.map +1 -1
- package/lib/module/download/ModelDownloadManager.js +10 -929
- package/lib/module/download/ModelDownloadManager.js.map +1 -1
- package/lib/module/download/activeModelOperations.js +26 -0
- package/lib/module/download/activeModelOperations.js.map +1 -0
- package/lib/module/download/background-downloader.d.js +2 -0
- package/lib/module/download/background-downloader.d.js.map +1 -0
- package/lib/module/download/bulkPurge.js +72 -0
- package/lib/module/download/bulkPurge.js.map +1 -0
- package/lib/module/download/checksumPrompt.js +19 -0
- package/lib/module/download/checksumPrompt.js.map +1 -0
- package/lib/module/download/constants.js +7 -0
- package/lib/module/download/constants.js.map +1 -0
- package/lib/module/download/downloadEvents.js +35 -0
- package/lib/module/download/downloadEvents.js.map +1 -0
- package/lib/module/download/downloadTask.js +385 -0
- package/lib/module/download/downloadTask.js.map +1 -0
- package/lib/module/download/ensureModel.js +89 -0
- package/lib/module/download/ensureModel.js.map +1 -0
- package/lib/module/download/index.js +4 -4
- package/lib/module/download/index.js.map +1 -1
- package/lib/module/download/localModels.js +151 -0
- package/lib/module/download/localModels.js.map +1 -0
- package/lib/module/download/modelExtraction.js +174 -0
- package/lib/module/download/modelExtraction.js.map +1 -0
- package/lib/module/download/paths.js +98 -0
- package/lib/module/download/paths.js.map +1 -0
- package/lib/module/download/postDownloadProcessing.js +206 -0
- package/lib/module/download/postDownloadProcessing.js.map +1 -0
- package/lib/module/download/protectedModelKeys.js +31 -0
- package/lib/module/download/protectedModelKeys.js.map +1 -0
- package/lib/module/download/registry.js +267 -0
- package/lib/module/download/registry.js.map +1 -0
- package/lib/module/download/retry.js +59 -0
- package/lib/module/download/retry.js.map +1 -0
- package/lib/module/download/types.js +17 -0
- package/lib/module/download/types.js.map +1 -0
- package/lib/module/download/validation.js +101 -5
- package/lib/module/download/validation.js.map +1 -1
- package/lib/module/{download → extraction}/extractTarBz2.js +3 -1
- package/lib/module/extraction/extractTarBz2.js.map +1 -0
- package/lib/module/{download → extraction}/extractTarZst.js +3 -1
- package/lib/module/extraction/extractTarZst.js.map +1 -0
- package/lib/module/extraction/index.js +3 -4
- package/lib/module/extraction/index.js.map +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/licenses.js +63 -0
- package/lib/module/licenses.js.map +1 -0
- package/lib/module/stt/index.js +16 -2
- package/lib/module/stt/index.js.map +1 -1
- package/lib/module/stt/streaming.js +2 -0
- package/lib/module/stt/streaming.js.map +1 -1
- package/lib/module/stt/streamingTypes.js.map +1 -1
- package/lib/module/stt/types.js.map +1 -1
- package/lib/module/tts/index.js +20 -2
- package/lib/module/tts/index.js.map +1 -1
- package/lib/module/tts/streaming.js +4 -0
- package/lib/module/tts/streaming.js.map +1 -1
- package/lib/module/tts/types.js.map +1 -1
- package/lib/module/utils.js +16 -1
- package/lib/module/utils.js.map +1 -1
- package/lib/typescript/src/NativeSherpaOnnx.d.ts +33 -5
- package/lib/typescript/src/NativeSherpaOnnx.d.ts.map +1 -1
- package/lib/typescript/src/audio/index.d.ts +10 -0
- package/lib/typescript/src/audio/index.d.ts.map +1 -1
- package/lib/typescript/src/download/ModelDownloadManager.d.ts +10 -108
- package/lib/typescript/src/download/ModelDownloadManager.d.ts.map +1 -1
- package/lib/typescript/src/download/activeModelOperations.d.ts +6 -0
- package/lib/typescript/src/download/activeModelOperations.d.ts.map +1 -0
- package/lib/typescript/src/download/bulkPurge.d.ts +14 -0
- package/lib/typescript/src/download/bulkPurge.d.ts.map +1 -0
- package/lib/typescript/src/download/checksumPrompt.d.ts +3 -0
- package/lib/typescript/src/download/checksumPrompt.d.ts.map +1 -0
- package/lib/typescript/src/download/constants.d.ts +5 -0
- package/lib/typescript/src/download/constants.d.ts.map +1 -0
- package/lib/typescript/src/download/downloadEvents.d.ts +6 -0
- package/lib/typescript/src/download/downloadEvents.d.ts.map +1 -0
- package/lib/typescript/src/download/downloadTask.d.ts +20 -0
- package/lib/typescript/src/download/downloadTask.d.ts.map +1 -0
- package/lib/typescript/src/download/ensureModel.d.ts +26 -0
- package/lib/typescript/src/download/ensureModel.d.ts.map +1 -0
- package/lib/typescript/src/download/index.d.ts +7 -7
- package/lib/typescript/src/download/index.d.ts.map +1 -1
- package/lib/typescript/src/download/localModels.d.ts +15 -0
- package/lib/typescript/src/download/localModels.d.ts.map +1 -0
- package/lib/typescript/src/download/modelExtraction.d.ts +36 -0
- package/lib/typescript/src/download/modelExtraction.d.ts.map +1 -0
- package/lib/typescript/src/download/paths.d.ts +28 -0
- package/lib/typescript/src/download/paths.d.ts.map +1 -0
- package/lib/typescript/src/download/postDownloadProcessing.d.ts +19 -0
- package/lib/typescript/src/download/postDownloadProcessing.d.ts.map +1 -0
- package/lib/typescript/src/download/protectedModelKeys.d.ts +6 -0
- package/lib/typescript/src/download/protectedModelKeys.d.ts.map +1 -0
- package/lib/typescript/src/download/registry.d.ts +14 -0
- package/lib/typescript/src/download/registry.d.ts.map +1 -0
- package/lib/typescript/src/download/retry.d.ts +15 -0
- package/lib/typescript/src/download/retry.d.ts.map +1 -0
- package/lib/typescript/src/download/types.d.ts +96 -0
- package/lib/typescript/src/download/types.d.ts.map +1 -0
- package/lib/typescript/src/download/validation.d.ts +19 -0
- package/lib/typescript/src/download/validation.d.ts.map +1 -1
- package/lib/typescript/src/extraction/extractTarBz2.d.ts.map +1 -0
- package/lib/typescript/src/extraction/extractTarZst.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/licenses.d.ts +10 -0
- package/lib/typescript/src/licenses.d.ts.map +1 -0
- package/lib/typescript/src/stt/index.d.ts +4 -1
- package/lib/typescript/src/stt/index.d.ts.map +1 -1
- package/lib/typescript/src/stt/streaming.d.ts.map +1 -1
- package/lib/typescript/src/stt/streamingTypes.d.ts +5 -0
- package/lib/typescript/src/stt/streamingTypes.d.ts.map +1 -1
- package/lib/typescript/src/stt/types.d.ts +3 -1
- package/lib/typescript/src/stt/types.d.ts.map +1 -1
- package/lib/typescript/src/tts/index.d.ts +3 -1
- package/lib/typescript/src/tts/index.d.ts.map +1 -1
- package/lib/typescript/src/tts/streaming.d.ts.map +1 -1
- package/lib/typescript/src/tts/types.d.ts +6 -5
- package/lib/typescript/src/tts/types.d.ts.map +1 -1
- package/lib/typescript/src/utils.d.ts +5 -0
- package/lib/typescript/src/utils.d.ts.map +1 -1
- package/package.json +6 -1
- package/scripts/{check-model-csvs.sh → ci/check-model-csvs.sh} +9 -2
- package/scripts/ci/collect_all_sherpa_model_streams.sh +101 -0
- package/scripts/ci/collect_one_sherpa_release_stream.sh +189 -0
- package/scripts/ci/sherpa_asr_model_release_streams.json +21 -0
- package/scripts/ci/sherpa_tts_model_release_streams.json +13 -0
- package/scripts/ci/update_model_license_csv.sh +765 -0
- package/scripts/setup-ios-framework.sh +14 -11
- package/scripts/update_commercial_use.js +73 -0
- package/src/NativeSherpaOnnx.ts +36 -5
- package/src/audio/index.ts +20 -0
- package/src/download/ModelDownloadManager.ts +55 -1343
- package/src/download/activeModelOperations.ts +38 -0
- package/src/download/background-downloader.d.ts +43 -0
- package/src/download/bulkPurge.ts +102 -0
- package/src/download/checksumPrompt.ts +25 -0
- package/src/download/constants.ts +5 -0
- package/src/download/downloadEvents.ts +55 -0
- package/src/download/downloadTask.ts +497 -0
- package/src/download/ensureModel.ts +124 -0
- package/src/download/index.ts +19 -4
- package/src/download/localModels.ts +234 -0
- package/src/download/modelExtraction.ts +244 -0
- package/src/download/paths.ts +134 -0
- package/src/download/postDownloadProcessing.ts +292 -0
- package/src/download/protectedModelKeys.ts +30 -0
- package/src/download/registry.ts +404 -0
- package/src/download/retry.ts +76 -0
- package/src/download/types.ts +120 -0
- package/src/download/validation.ts +114 -8
- package/src/{download → extraction}/extractTarBz2.ts +3 -1
- package/src/{download → extraction}/extractTarZst.ts +3 -1
- package/src/extraction/index.ts +3 -7
- package/src/index.tsx +1 -0
- package/src/licenses.ts +100 -0
- package/src/stt/index.ts +20 -2
- package/src/stt/streaming.ts +3 -0
- package/src/stt/streamingTypes.ts +5 -0
- package/src/stt/types.ts +3 -1
- package/src/tts/index.ts +30 -2
- package/src/tts/streaming.ts +10 -0
- package/src/tts/types.ts +6 -5
- package/src/utils.ts +22 -1
- package/third_party/sherpa-onnx-prebuilt/ANDROID_RELEASE_TAG +1 -1
- package/third_party/sherpa-onnx-prebuilt/IOS_RELEASE_TAG +1 -1
- package/android/src/main/cpp/jni/tts/sherpa-onnx-tts-zipvoice-jni.cpp +0 -301
- package/android/src/main/java/com/sherpaonnx/ZipvoiceTtsWrapper.kt +0 -187
- package/lib/module/download/extractTarBz2.js.map +0 -1
- package/lib/module/download/extractTarZst.js.map +0 -1
- package/lib/typescript/src/download/extractTarBz2.d.ts.map +0 -1
- package/lib/typescript/src/download/extractTarZst.d.ts.map +0 -1
- package/scripts/check-qnn-support.sh +0 -78
- /package/lib/typescript/src/{download → extraction}/extractTarBz2.d.ts +0 -0
- /package/lib/typescript/src/{download → extraction}/extractTarZst.d.ts +0 -0
|
@@ -38,6 +38,7 @@ class TtsWrapper::Impl {
|
|
|
38
38
|
public:
|
|
39
39
|
bool initialized = false;
|
|
40
40
|
std::string modelDir;
|
|
41
|
+
TtsModelKind modelKind = TtsModelKind::kUnknown;
|
|
41
42
|
std::optional<sherpa_onnx::cxx::OfflineTts> tts;
|
|
42
43
|
};
|
|
43
44
|
|
|
@@ -86,6 +87,7 @@ TtsInitializeResult TtsWrapper::initialize(
|
|
|
86
87
|
|
|
87
88
|
auto detect = DetectTtsModel(modelDir, modelType);
|
|
88
89
|
if (!detect.ok) {
|
|
90
|
+
result.error = detect.error;
|
|
89
91
|
LOGE("%s", detect.error.c_str());
|
|
90
92
|
return result;
|
|
91
93
|
}
|
|
@@ -144,12 +146,24 @@ TtsInitializeResult TtsWrapper::initialize(
|
|
|
144
146
|
config.model.zipvoice.vocoder = detect.paths.vocoder;
|
|
145
147
|
config.model.zipvoice.tokens = detect.paths.tokens;
|
|
146
148
|
config.model.zipvoice.data_dir = detect.paths.dataDir;
|
|
149
|
+
if (!detect.paths.lexicon.empty()) {
|
|
150
|
+
config.model.zipvoice.lexicon = detect.paths.lexicon;
|
|
151
|
+
}
|
|
152
|
+
// Limit peak RAM (same idea as Android Zipvoice init).
|
|
153
|
+
config.model.num_threads = 1;
|
|
147
154
|
break;
|
|
148
155
|
case TtsModelKind::kPocket:
|
|
149
|
-
|
|
150
|
-
|
|
156
|
+
config.model.pocket.lm_flow = detect.paths.lmFlow;
|
|
157
|
+
config.model.pocket.lm_main = detect.paths.lmMain;
|
|
158
|
+
config.model.pocket.encoder = detect.paths.encoder;
|
|
159
|
+
config.model.pocket.decoder = detect.paths.decoder;
|
|
160
|
+
config.model.pocket.text_conditioner = detect.paths.textConditioner;
|
|
161
|
+
config.model.pocket.vocab_json = detect.paths.vocabJson;
|
|
162
|
+
config.model.pocket.token_scores_json = detect.paths.tokenScoresJson;
|
|
163
|
+
break;
|
|
151
164
|
case TtsModelKind::kUnknown:
|
|
152
165
|
default:
|
|
166
|
+
result.error = "TTS: Unknown model type: " + modelType;
|
|
153
167
|
LOGE("TTS: Unknown model type: %s", modelType.c_str());
|
|
154
168
|
return result;
|
|
155
169
|
}
|
|
@@ -167,16 +181,35 @@ TtsInitializeResult TtsWrapper::initialize(
|
|
|
167
181
|
config.silence_scale = *silenceScale;
|
|
168
182
|
}
|
|
169
183
|
|
|
184
|
+
// Log paths passed to sherpa-onnx C++ API to diagnose /usr/share/espeak-ng-data fallback.
|
|
185
|
+
LOGI("TTS: modelDir=%s", modelDir.c_str());
|
|
186
|
+
switch (detect.selectedKind) {
|
|
187
|
+
case TtsModelKind::kVits:
|
|
188
|
+
LOGI("TTS: vits data_dir=%s (empty=%d)", detect.paths.dataDir.empty() ? "(empty)" : detect.paths.dataDir.c_str(), (int)detect.paths.dataDir.empty());
|
|
189
|
+
break;
|
|
190
|
+
case TtsModelKind::kMatcha:
|
|
191
|
+
LOGI("TTS: matcha data_dir=%s (empty=%d)", detect.paths.dataDir.empty() ? "(empty)" : detect.paths.dataDir.c_str(), (int)detect.paths.dataDir.empty());
|
|
192
|
+
break;
|
|
193
|
+
case TtsModelKind::kKokoro:
|
|
194
|
+
case TtsModelKind::kKitten:
|
|
195
|
+
case TtsModelKind::kZipvoice:
|
|
196
|
+
LOGI("TTS: data_dir=%s (empty=%d)", detect.paths.dataDir.empty() ? "(empty)" : detect.paths.dataDir.c_str(), (int)detect.paths.dataDir.empty());
|
|
197
|
+
break;
|
|
198
|
+
default:
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
170
201
|
LOGI("TTS: Creating OfflineTts instance...");
|
|
171
202
|
pImpl->tts = sherpa_onnx::cxx::OfflineTts::Create(config);
|
|
172
203
|
|
|
173
204
|
if (!pImpl->tts.has_value()) {
|
|
174
|
-
|
|
205
|
+
result.error = "TTS: Failed to create OfflineTts instance (e.g. missing espeak-ng data or invalid model)";
|
|
206
|
+
LOGE("%s", result.error.c_str());
|
|
175
207
|
return result;
|
|
176
208
|
}
|
|
177
209
|
|
|
178
210
|
pImpl->initialized = true;
|
|
179
211
|
pImpl->modelDir = modelDir;
|
|
212
|
+
pImpl->modelKind = detect.selectedKind;
|
|
180
213
|
|
|
181
214
|
LOGI("TTS: Initialization successful");
|
|
182
215
|
LOGI("TTS: Sample rate: %d Hz", pImpl->tts.value().SampleRate());
|
|
@@ -186,9 +219,11 @@ TtsInitializeResult TtsWrapper::initialize(
|
|
|
186
219
|
result.detectedModels = detect.detectedModels;
|
|
187
220
|
return result;
|
|
188
221
|
} catch (const std::exception& e) {
|
|
222
|
+
result.error = std::string("TTS init exception: ") + e.what();
|
|
189
223
|
LOGE("TTS: Exception during initialization: %s", e.what());
|
|
190
224
|
return result;
|
|
191
225
|
} catch (...) {
|
|
226
|
+
result.error = "TTS: Unknown exception during initialization";
|
|
192
227
|
LOGE("TTS: Unknown exception during initialization");
|
|
193
228
|
return result;
|
|
194
229
|
}
|
|
@@ -234,6 +269,55 @@ TtsWrapper::AudioResult TtsWrapper::generate(
|
|
|
234
269
|
}
|
|
235
270
|
}
|
|
236
271
|
|
|
272
|
+
TtsWrapper::AudioResult TtsWrapper::generate(
|
|
273
|
+
const std::string& text,
|
|
274
|
+
int32_t sid,
|
|
275
|
+
float speed,
|
|
276
|
+
const std::optional<VoiceCloneOptions>& cloning
|
|
277
|
+
) {
|
|
278
|
+
if (!cloning.has_value() || cloning->reference_audio.empty() ||
|
|
279
|
+
cloning->reference_sample_rate <= 0) {
|
|
280
|
+
return generate(text, sid, speed);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
AudioResult result;
|
|
284
|
+
result.sampleRate = 0;
|
|
285
|
+
|
|
286
|
+
if (!pImpl->initialized || !pImpl->tts.has_value()) {
|
|
287
|
+
LOGE("TTS: Not initialized. Call initialize() first.");
|
|
288
|
+
return result;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
if (text.empty()) {
|
|
292
|
+
LOGE("TTS: Input text is empty");
|
|
293
|
+
return result;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
try {
|
|
297
|
+
sherpa_onnx::cxx::GenerationConfig gc;
|
|
298
|
+
gc.silence_scale = cloning->silence_scale;
|
|
299
|
+
gc.speed = speed;
|
|
300
|
+
gc.sid = sid;
|
|
301
|
+
gc.reference_audio = cloning->reference_audio;
|
|
302
|
+
gc.reference_sample_rate = cloning->reference_sample_rate;
|
|
303
|
+
gc.reference_text = cloning->reference_text;
|
|
304
|
+
gc.num_steps = cloning->num_steps;
|
|
305
|
+
gc.extra = cloning->extra;
|
|
306
|
+
|
|
307
|
+
auto audio = pImpl->tts.value().Generate(text, gc);
|
|
308
|
+
result.samples = std::move(audio.samples);
|
|
309
|
+
result.sampleRate = audio.sample_rate;
|
|
310
|
+
LOGI("TTS: Generated (voice clone) %zu samples at %d Hz", result.samples.size(), result.sampleRate);
|
|
311
|
+
return result;
|
|
312
|
+
} catch (const std::exception& e) {
|
|
313
|
+
LOGE("TTS: Exception during generation (clone): %s", e.what());
|
|
314
|
+
return result;
|
|
315
|
+
} catch (...) {
|
|
316
|
+
LOGE("TTS: Unknown exception during generation (clone)");
|
|
317
|
+
return result;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
237
321
|
bool TtsWrapper::generateStream(
|
|
238
322
|
const std::string& text,
|
|
239
323
|
int32_t sid,
|
|
@@ -279,6 +363,63 @@ bool TtsWrapper::generateStream(
|
|
|
279
363
|
}
|
|
280
364
|
}
|
|
281
365
|
|
|
366
|
+
bool TtsWrapper::generateStream(
|
|
367
|
+
const std::string& text,
|
|
368
|
+
int32_t sid,
|
|
369
|
+
float speed,
|
|
370
|
+
const TtsStreamCallback& callback,
|
|
371
|
+
const std::optional<VoiceCloneOptions>& cloning
|
|
372
|
+
) {
|
|
373
|
+
if (!cloning.has_value() || cloning->reference_audio.empty() ||
|
|
374
|
+
cloning->reference_sample_rate <= 0) {
|
|
375
|
+
return generateStream(text, sid, speed, callback);
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
if (!pImpl->initialized || !pImpl->tts.has_value()) {
|
|
379
|
+
LOGE("TTS: Not initialized. Call initialize() first.");
|
|
380
|
+
return false;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
if (text.empty()) {
|
|
384
|
+
LOGE("TTS: Input text is empty");
|
|
385
|
+
return false;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
try {
|
|
389
|
+
auto callbackCopy = callback;
|
|
390
|
+
auto shim = [](const float *samples, int32_t numSamples, float progress, void *arg) -> int32_t {
|
|
391
|
+
auto *cb = reinterpret_cast<TtsStreamCallback*>(arg);
|
|
392
|
+
if (!cb || !(*cb)) return 0;
|
|
393
|
+
return (*cb)(samples, numSamples, progress);
|
|
394
|
+
};
|
|
395
|
+
|
|
396
|
+
sherpa_onnx::cxx::GenerationConfig gc;
|
|
397
|
+
gc.silence_scale = cloning->silence_scale;
|
|
398
|
+
gc.speed = speed;
|
|
399
|
+
gc.sid = sid;
|
|
400
|
+
gc.reference_audio = cloning->reference_audio;
|
|
401
|
+
gc.reference_sample_rate = cloning->reference_sample_rate;
|
|
402
|
+
gc.reference_text = cloning->reference_text;
|
|
403
|
+
gc.num_steps = cloning->num_steps;
|
|
404
|
+
gc.extra = cloning->extra;
|
|
405
|
+
|
|
406
|
+
pImpl->tts.value().Generate(
|
|
407
|
+
text,
|
|
408
|
+
gc,
|
|
409
|
+
callbackCopy ? shim : nullptr,
|
|
410
|
+
callbackCopy ? &callbackCopy : nullptr
|
|
411
|
+
);
|
|
412
|
+
|
|
413
|
+
return true;
|
|
414
|
+
} catch (const std::exception& e) {
|
|
415
|
+
LOGE("TTS: Exception during streaming generation (clone): %s", e.what());
|
|
416
|
+
return false;
|
|
417
|
+
} catch (...) {
|
|
418
|
+
LOGE("TTS: Unknown exception during streaming generation (clone)");
|
|
419
|
+
return false;
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
|
|
282
423
|
int32_t TtsWrapper::getSampleRate() const {
|
|
283
424
|
if (!pImpl->initialized || !pImpl->tts.has_value()) {
|
|
284
425
|
LOGE("TTS: Not initialized. Call initialize() first.");
|
|
@@ -304,10 +445,15 @@ void TtsWrapper::release() {
|
|
|
304
445
|
pImpl->tts.reset();
|
|
305
446
|
pImpl->initialized = false;
|
|
306
447
|
pImpl->modelDir.clear();
|
|
448
|
+
pImpl->modelKind = TtsModelKind::kUnknown;
|
|
307
449
|
LOGI("TTS: Resources released");
|
|
308
450
|
}
|
|
309
451
|
}
|
|
310
452
|
|
|
453
|
+
TtsModelKind TtsWrapper::getModelKind() const {
|
|
454
|
+
return pImpl->modelKind;
|
|
455
|
+
}
|
|
456
|
+
|
|
311
457
|
bool TtsWrapper::saveToWavFile(
|
|
312
458
|
const std::vector<float>& samples,
|
|
313
459
|
int32_t sampleRate,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeSherpaOnnx.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;;AAEpE;;
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeSherpaOnnx.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;;AAEpE;;AA+qBA,eAAeA,mBAAmB,CAACC,YAAY,CAAO,YAAY,CAAC","ignoreList":[]}
|
|
@@ -73,4 +73,12 @@ export function convertAudioToFormat(inputPath, outputPath, format, outputSample
|
|
|
73
73
|
export function convertAudioToWav16k(inputPath, outputPath) {
|
|
74
74
|
return SherpaOnnx.convertAudioToWav16k(inputPath, outputPath);
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Decode a supported audio file to mono float PCM in [-1, 1] plus sample rate.
|
|
78
|
+
* Same decode coverage as {@link convertAudioToFormat} (FFmpeg-backed on Android when not WAV).
|
|
79
|
+
* @param targetSampleRateHz - Resample to this rate when > 0; use native decoded rate when 0 or omitted.
|
|
80
|
+
*/
|
|
81
|
+
export function decodeAudioFileToFloatSamples(inputPath, targetSampleRateHz) {
|
|
82
|
+
return SherpaOnnx.decodeAudioFileToFloatSamples(inputPath, targetSampleRateHz ?? 0);
|
|
83
|
+
}
|
|
76
84
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Buffer","DeviceEventEmitter","SherpaOnnx","base64PcmToFloatArray","base64","bytes","from","view","DataView","buffer","byteOffset","byteLength","len","out","Float32Array","i","getInt16","createPcmLiveStream","options","sampleRate","channelCount","bufferSizeFrames","start","startPcmLiveStream","stop","stopPcmLiveStream","onData","callback","sub","addListener","event","base64Pcm","sr","samples","remove","onError","message","convertAudioToFormat","inputPath","outputPath","format","outputSampleRateHz","convertAudioToWav16k"],"sourceRoot":"../../../src","sources":["audio/index.ts"],"mappings":";;AAAA,SAASA,MAAM,QAAQ,QAAQ;AAC/B,SAASC,kBAAkB,QAAQ,cAAc;AACjD,OAAOC,UAAU,MAAM,wBAAqB;;AAE5C;AACA;AACA;AACA;AACA,SAASC,qBAAqBA,CAACC,MAAc,EAAgB;EAC3D,MAAMC,KAAK,GAAGL,MAAM,CAACM,IAAI,CAACF,MAAM,EAAE,QAAQ,CAAC;EAC3C,MAAMG,IAAI,GAAG,IAAIC,QAAQ,CAACH,KAAK,CAACI,MAAM,EAAEJ,KAAK,CAACK,UAAU,EAAEL,KAAK,CAACM,UAAU,CAAC;EAC3E,MAAMC,GAAG,GAAGP,KAAK,CAACM,UAAU,GAAG,CAAC;EAChC,MAAME,GAAG,GAAG,IAAIC,YAAY,CAACF,GAAG,CAAC;EACjC,KAAK,IAAIG,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,GAAG,EAAEG,CAAC,EAAE,EAAE;IAC5BF,GAAG,CAACE,CAAC,CAAC,GAAGR,IAAI,CAACS,QAAQ,CAACD,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,KAAK;EAC7C;EACA,OAAOF,GAAG;AACZ;AAiBA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASI,mBAAmBA,CACjCC,OAA8B,EACT;EACrB,MAAMC,UAAU,GAAGD,OAAO,EAAEC,UAAU,IAAI,KAAK;EAC/C,MAAMC,YAAY,GAAGF,OAAO,EAAEE,YAAY,IAAI,CAAC;EAC/C,MAAMC,gBAAgB,GAAGH,OAAO,EAAEG,gBAAgB,IAAI,CAAC;EAEvD,OAAO;IACLC,KAAK,EAAEA,CAAA,KACLpB,UAAU,CAACqB,kBAAkB,CAAC;MAC5BJ,UAAU;MACVC,YAAY;MACZC;IACF,CAAC,CAAC;IAEJG,IAAI,EAAEA,CAAA,KAAMtB,UAAU,CAACuB,iBAAiB,CAAC,CAAC;IAE1CC,MAAM,EAAGC,QAA6D,IAAK;MACzE,MAAMC,GAAG,GAAG3B,kBAAkB,CAAC4B,WAAW,CACxC,mBAAmB,EAClBC,KAAkD,IAAK;QACtD,MAAM1B,MAAM,GAAG0B,KAAK,EAAEC,SAAS,IAAI,EAAE;QACrC,MAAMC,EAAE,GAAGF,KAAK,EAAEX,UAAU,IAAIA,UAAU;QAC1C,IAAIf,MAAM,EAAE;UACV,MAAM6B,OAAO,GAAG9B,qBAAqB,CAACC,MAAM,CAAC;UAC7CuB,QAAQ,CAACM,OAAO,EAAED,EAAE,CAAC;QACvB;MACF,CACF,CAAC;MACD,OAAO,MAAMJ,GAAG,CAACM,MAAM,CAAC,CAAC;IAC3B,CAAC;IAEDC,OAAO,EAAGR,QAAmC,IAAK;MAChD,MAAMC,GAAG,GAAG3B,kBAAkB,CAAC4B,WAAW,CACxC,oBAAoB,EACnBC,KAA2B,IAAK;QAC/BH,QAAQ,CAACG,KAAK,EAAEM,OAAO,IAAI,eAAe,CAAC;MAC7C,CACF,CAAC;MACD,OAAO,MAAMR,GAAG,CAACM,MAAM,CAAC,CAAC;IAC3B;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASG,oBAAoBA,CAClCC,SAAiB,EACjBC,UAAkB,EAClBC,MAAc,EACdC,kBAA2B,EACZ;EACf,OAAOvC,UAAU,CAACmC,oBAAoB,CACpCC,SAAS,EACTC,UAAU,EACVC,MAAM,EACNC,kBAAkB,IAAI,CACxB,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAClCJ,SAAiB,EACjBC,UAAkB,EACH;EACf,OAAOrC,UAAU,CAACwC,oBAAoB,CAACJ,SAAS,EAAEC,UAAU,CAAC;AAC/D","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Buffer","DeviceEventEmitter","SherpaOnnx","base64PcmToFloatArray","base64","bytes","from","view","DataView","buffer","byteOffset","byteLength","len","out","Float32Array","i","getInt16","createPcmLiveStream","options","sampleRate","channelCount","bufferSizeFrames","start","startPcmLiveStream","stop","stopPcmLiveStream","onData","callback","sub","addListener","event","base64Pcm","sr","samples","remove","onError","message","convertAudioToFormat","inputPath","outputPath","format","outputSampleRateHz","convertAudioToWav16k","decodeAudioFileToFloatSamples","targetSampleRateHz"],"sourceRoot":"../../../src","sources":["audio/index.ts"],"mappings":"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","ignoreList":[]}
|