react-native-sherpa-onnx 0.3.9 → 0.4.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 (69) hide show
  1. package/README.md +17 -4
  2. package/SherpaOnnx.podspec +1 -0
  3. package/android/prebuilt-download.gradle +67 -27
  4. package/android/prebuilt-versions.gradle +1 -1
  5. package/android/src/main/assets/model_licenses/speech-enhancement-models-license-status.csv +7 -0
  6. package/android/src/main/cpp/CMakeLists.txt +3 -0
  7. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-enhancement-wrapper.cpp +68 -0
  8. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-enhancement-wrapper.h +17 -0
  9. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect-enhancement.cpp +119 -0
  10. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect.h +31 -0
  11. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-validate-enhancement.cpp +68 -0
  12. package/android/src/main/cpp/jni/model_detect/sherpa-onnx-validate-enhancement.h +30 -0
  13. package/android/src/main/cpp/jni/module/sherpa-onnx-module-jni.cpp +21 -0
  14. package/android/src/main/java/com/sherpaonnx/SherpaOnnxAssetHelper.kt +6 -0
  15. package/android/src/main/java/com/sherpaonnx/SherpaOnnxEnhancementHelper.kt +377 -0
  16. package/android/src/main/java/com/sherpaonnx/SherpaOnnxModule.kt +106 -0
  17. package/ios/Resources/model_licenses/speech-enhancement-models-license-status.csv +7 -0
  18. package/ios/SherpaOnnx+Assets.mm +5 -0
  19. package/ios/SherpaOnnx+Enhancement.mm +435 -0
  20. package/ios/enhancement/sherpa-onnx-enhancement-wrapper.h +85 -0
  21. package/ios/enhancement/sherpa-onnx-enhancement-wrapper.mm +218 -0
  22. package/ios/model_detect/sherpa-onnx-model-detect-enhancement.mm +92 -0
  23. package/ios/model_detect/sherpa-onnx-model-detect.h +23 -0
  24. package/ios/model_detect/sherpa-onnx-validate-enhancement.h +30 -0
  25. package/ios/model_detect/sherpa-onnx-validate-enhancement.mm +69 -0
  26. package/lib/module/NativeSherpaOnnx.js.map +1 -1
  27. package/lib/module/download/localModels.js +2 -3
  28. package/lib/module/download/localModels.js.map +1 -1
  29. package/lib/module/download/paths.js +2 -1
  30. package/lib/module/download/paths.js.map +1 -1
  31. package/lib/module/enhancement/index.js +63 -48
  32. package/lib/module/enhancement/index.js.map +1 -1
  33. package/lib/module/enhancement/streaming.js +60 -0
  34. package/lib/module/enhancement/streaming.js.map +1 -0
  35. package/lib/module/enhancement/streamingTypes.js +4 -0
  36. package/lib/module/enhancement/streamingTypes.js.map +1 -0
  37. package/lib/module/enhancement/types.js +4 -0
  38. package/lib/module/enhancement/types.js.map +1 -0
  39. package/lib/module/licenses.js +9 -3
  40. package/lib/module/licenses.js.map +1 -1
  41. package/lib/typescript/src/NativeSherpaOnnx.d.ts +45 -0
  42. package/lib/typescript/src/NativeSherpaOnnx.d.ts.map +1 -1
  43. package/lib/typescript/src/download/localModels.d.ts.map +1 -1
  44. package/lib/typescript/src/download/paths.d.ts +2 -1
  45. package/lib/typescript/src/download/paths.d.ts.map +1 -1
  46. package/lib/typescript/src/enhancement/index.d.ts +9 -46
  47. package/lib/typescript/src/enhancement/index.d.ts.map +1 -1
  48. package/lib/typescript/src/enhancement/streaming.d.ts +6 -0
  49. package/lib/typescript/src/enhancement/streaming.d.ts.map +1 -0
  50. package/lib/typescript/src/enhancement/streamingTypes.d.ts +12 -0
  51. package/lib/typescript/src/enhancement/streamingTypes.d.ts.map +1 -0
  52. package/lib/typescript/src/enhancement/types.d.ts +31 -0
  53. package/lib/typescript/src/enhancement/types.d.ts.map +1 -0
  54. package/lib/typescript/src/licenses.d.ts.map +1 -1
  55. package/package.json +1 -1
  56. package/scripts/ci/check-model-csvs.sh +27 -2
  57. package/scripts/ci/collect_all_sherpa_model_streams.sh +3 -1
  58. package/scripts/ci/collect_one_sherpa_release_stream.sh +3 -1
  59. package/scripts/ci/sherpa_speech_enhancement_model_release_streams.json +13 -0
  60. package/scripts/ci/update_model_license_csv.sh +1 -1
  61. package/src/NativeSherpaOnnx.ts +71 -0
  62. package/src/download/localModels.ts +1 -3
  63. package/src/download/paths.ts +2 -1
  64. package/src/enhancement/index.ts +120 -58
  65. package/src/enhancement/streaming.ts +105 -0
  66. package/src/enhancement/streamingTypes.ts +14 -0
  67. package/src/enhancement/types.ts +36 -0
  68. package/src/licenses.ts +13 -2
  69. package/third_party/sherpa-onnx-prebuilt/ANDROID_RELEASE_TAG +1 -1
@@ -0,0 +1,218 @@
1
+ #include "sherpa-onnx-enhancement-wrapper.h"
2
+
3
+ #include "sherpa-onnx-model-detect.h"
4
+
5
+ #include <optional>
6
+
7
+ #include "sherpa-onnx/c-api/cxx-api.h"
8
+
9
+ namespace sherpaonnx {
10
+ namespace {
11
+
12
+ std::string EnhancementKindToString(EnhancementModelKind kind) {
13
+ switch (kind) {
14
+ case EnhancementModelKind::kGtcrn:
15
+ return "gtcrn";
16
+ case EnhancementModelKind::kDpdfNet:
17
+ return "dpdfnet";
18
+ default:
19
+ return "unknown";
20
+ }
21
+ }
22
+
23
+ sherpa_onnx::cxx::OfflineSpeechDenoiserModelConfig BuildModelConfig(
24
+ const EnhancementDetectResult& detect,
25
+ int32_t numThreads,
26
+ const std::optional<std::string>& provider,
27
+ bool debug
28
+ ) {
29
+ sherpa_onnx::cxx::OfflineSpeechDenoiserModelConfig cfg;
30
+ cfg.num_threads = numThreads;
31
+ cfg.debug = debug;
32
+ if (provider.has_value() && !provider->empty()) {
33
+ cfg.provider = *provider;
34
+ }
35
+ switch (detect.selectedKind) {
36
+ case EnhancementModelKind::kGtcrn:
37
+ cfg.gtcrn.model = detect.paths.model;
38
+ break;
39
+ case EnhancementModelKind::kDpdfNet:
40
+ cfg.dpdfnet.model = detect.paths.model;
41
+ break;
42
+ default:
43
+ break;
44
+ }
45
+ return cfg;
46
+ }
47
+
48
+ EnhancedAudioResult ToEnhancedAudioResult(
49
+ const sherpa_onnx::cxx::DenoisedAudio& audio
50
+ ) {
51
+ EnhancedAudioResult out;
52
+ out.samples = audio.samples;
53
+ out.sampleRate = audio.sample_rate;
54
+ return out;
55
+ }
56
+
57
+ } // namespace
58
+
59
+ class EnhancementWrapper::Impl {
60
+ public:
61
+ bool initialized = false;
62
+ std::optional<sherpa_onnx::cxx::OfflineSpeechDenoiser> denoiser;
63
+ };
64
+
65
+ EnhancementWrapper::EnhancementWrapper() : pImpl(std::make_unique<Impl>()) {}
66
+
67
+ EnhancementWrapper::~EnhancementWrapper() { release(); }
68
+
69
+ EnhancementInitializeResult EnhancementWrapper::initialize(
70
+ const std::string& modelDir,
71
+ const std::string& modelType,
72
+ int32_t numThreads,
73
+ const std::optional<std::string>& provider,
74
+ bool debug
75
+ ) {
76
+ EnhancementInitializeResult result;
77
+ if (pImpl->initialized) {
78
+ release();
79
+ }
80
+ if (modelDir.empty()) {
81
+ result.error = "Enhancement model directory is empty";
82
+ return result;
83
+ }
84
+
85
+ auto detect = DetectEnhancementModel(modelDir, modelType);
86
+ result.detectedModels = detect.detectedModels;
87
+ result.modelType = EnhancementKindToString(detect.selectedKind);
88
+ if (!detect.ok) {
89
+ result.error = detect.error;
90
+ return result;
91
+ }
92
+
93
+ sherpa_onnx::cxx::OfflineSpeechDenoiserConfig config;
94
+ config.model = BuildModelConfig(detect, numThreads, provider, debug);
95
+ pImpl->denoiser = sherpa_onnx::cxx::OfflineSpeechDenoiser::Create(config);
96
+ pImpl->initialized = true;
97
+
98
+ result.success = true;
99
+ result.sampleRate = pImpl->denoiser->GetSampleRate();
100
+ return result;
101
+ }
102
+
103
+ EnhancedAudioResult EnhancementWrapper::runSamples(
104
+ const std::vector<float>& samples,
105
+ int32_t sampleRate
106
+ ) {
107
+ if (!pImpl->initialized || !pImpl->denoiser.has_value()) {
108
+ return {};
109
+ }
110
+ return ToEnhancedAudioResult(
111
+ pImpl->denoiser->Run(samples.data(), static_cast<int32_t>(samples.size()), sampleRate)
112
+ );
113
+ }
114
+
115
+ int32_t EnhancementWrapper::getSampleRate() const {
116
+ if (!pImpl->initialized || !pImpl->denoiser.has_value()) return 0;
117
+ return pImpl->denoiser->GetSampleRate();
118
+ }
119
+
120
+ bool EnhancementWrapper::isInitialized() const { return pImpl->initialized; }
121
+
122
+ void EnhancementWrapper::release() {
123
+ if (pImpl->denoiser.has_value()) {
124
+ pImpl->denoiser.reset();
125
+ }
126
+ pImpl->initialized = false;
127
+ }
128
+
129
+ class OnlineEnhancementWrapper::Impl {
130
+ public:
131
+ bool initialized = false;
132
+ std::optional<sherpa_onnx::cxx::OnlineSpeechDenoiser> denoiser;
133
+ };
134
+
135
+ OnlineEnhancementWrapper::OnlineEnhancementWrapper()
136
+ : pImpl(std::make_unique<Impl>()) {}
137
+
138
+ OnlineEnhancementWrapper::~OnlineEnhancementWrapper() { release(); }
139
+
140
+ EnhancementInitializeResult OnlineEnhancementWrapper::initialize(
141
+ const std::string& modelDir,
142
+ const std::string& modelType,
143
+ int32_t numThreads,
144
+ const std::optional<std::string>& provider,
145
+ bool debug
146
+ ) {
147
+ EnhancementInitializeResult result;
148
+ if (pImpl->initialized) {
149
+ release();
150
+ }
151
+ if (modelDir.empty()) {
152
+ result.error = "Enhancement model directory is empty";
153
+ return result;
154
+ }
155
+
156
+ auto detect = DetectEnhancementModel(modelDir, modelType);
157
+ result.detectedModels = detect.detectedModels;
158
+ result.modelType = EnhancementKindToString(detect.selectedKind);
159
+ if (!detect.ok) {
160
+ result.error = detect.error;
161
+ return result;
162
+ }
163
+
164
+ sherpa_onnx::cxx::OnlineSpeechDenoiserConfig config;
165
+ config.model = BuildModelConfig(detect, numThreads, provider, debug);
166
+ pImpl->denoiser = sherpa_onnx::cxx::OnlineSpeechDenoiser::Create(config);
167
+ pImpl->initialized = true;
168
+
169
+ result.success = true;
170
+ result.sampleRate = pImpl->denoiser->GetSampleRate();
171
+ result.frameShiftInSamples = pImpl->denoiser->GetFrameShiftInSamples();
172
+ return result;
173
+ }
174
+
175
+ EnhancedAudioResult OnlineEnhancementWrapper::runSamples(
176
+ const std::vector<float>& samples,
177
+ int32_t sampleRate
178
+ ) {
179
+ if (!pImpl->initialized || !pImpl->denoiser.has_value()) {
180
+ return {};
181
+ }
182
+ return ToEnhancedAudioResult(
183
+ pImpl->denoiser->Run(samples.data(), static_cast<int32_t>(samples.size()), sampleRate)
184
+ );
185
+ }
186
+
187
+ EnhancedAudioResult OnlineEnhancementWrapper::flush() {
188
+ if (!pImpl->initialized || !pImpl->denoiser.has_value()) {
189
+ return {};
190
+ }
191
+ return ToEnhancedAudioResult(pImpl->denoiser->Flush());
192
+ }
193
+
194
+ void OnlineEnhancementWrapper::reset() {
195
+ if (!pImpl->initialized || !pImpl->denoiser.has_value()) return;
196
+ pImpl->denoiser->Reset();
197
+ }
198
+
199
+ int32_t OnlineEnhancementWrapper::getSampleRate() const {
200
+ if (!pImpl->initialized || !pImpl->denoiser.has_value()) return 0;
201
+ return pImpl->denoiser->GetSampleRate();
202
+ }
203
+
204
+ int32_t OnlineEnhancementWrapper::getFrameShiftInSamples() const {
205
+ if (!pImpl->initialized || !pImpl->denoiser.has_value()) return 0;
206
+ return pImpl->denoiser->GetFrameShiftInSamples();
207
+ }
208
+
209
+ bool OnlineEnhancementWrapper::isInitialized() const { return pImpl->initialized; }
210
+
211
+ void OnlineEnhancementWrapper::release() {
212
+ if (pImpl->denoiser.has_value()) {
213
+ pImpl->denoiser.reset();
214
+ }
215
+ pImpl->initialized = false;
216
+ }
217
+
218
+ } // namespace sherpaonnx
@@ -0,0 +1,92 @@
1
+ #include "sherpa-onnx-model-detect.h"
2
+ #include "sherpa-onnx-model-detect-helper.h"
3
+ #include "sherpa-onnx-validate-enhancement.h"
4
+
5
+ #include <optional>
6
+ #include <string>
7
+ #include <vector>
8
+
9
+ namespace sherpaonnx {
10
+ namespace {
11
+
12
+ using namespace model_detect;
13
+
14
+ EnhancementModelKind ParseEnhancementModelType(const std::string& modelType) {
15
+ if (modelType == "gtcrn") return EnhancementModelKind::kGtcrn;
16
+ if (modelType == "dpdfnet") return EnhancementModelKind::kDpdfNet;
17
+ return EnhancementModelKind::kUnknown;
18
+ }
19
+
20
+ } // namespace
21
+
22
+ EnhancementDetectResult DetectEnhancementModel(
23
+ const std::string& modelDir,
24
+ const std::string& modelType
25
+ ) {
26
+ EnhancementDetectResult result;
27
+
28
+ if (modelDir.empty()) {
29
+ result.error = "Enhancement: model directory is empty";
30
+ return result;
31
+ }
32
+ if (!FileExists(modelDir) || !IsDirectory(modelDir)) {
33
+ result.error =
34
+ "Enhancement: model directory does not exist or is not a directory: " +
35
+ modelDir;
36
+ return result;
37
+ }
38
+
39
+ const std::vector<FileEntry> files = ListFilesRecursive(modelDir, 4);
40
+ const std::string gtcrnModel =
41
+ FindOnnxByAnyToken(files, {"gtcrn"}, std::nullopt);
42
+ const std::string dpdfnetModel =
43
+ FindOnnxByAnyToken(files, {"dpdfnet"}, std::nullopt);
44
+
45
+ if (!gtcrnModel.empty()) {
46
+ result.detectedModels.push_back({"gtcrn", modelDir});
47
+ }
48
+ if (!dpdfnetModel.empty()) {
49
+ result.detectedModels.push_back({"dpdfnet", modelDir});
50
+ }
51
+
52
+ EnhancementModelKind selected = EnhancementModelKind::kUnknown;
53
+ if (modelType == "auto" || modelType.empty()) {
54
+ if (!gtcrnModel.empty()) {
55
+ selected = EnhancementModelKind::kGtcrn;
56
+ } else if (!dpdfnetModel.empty()) {
57
+ selected = EnhancementModelKind::kDpdfNet;
58
+ }
59
+ } else {
60
+ selected = ParseEnhancementModelType(modelType);
61
+ if (selected == EnhancementModelKind::kUnknown) {
62
+ result.error = "Enhancement: unknown model type: " + modelType;
63
+ return result;
64
+ }
65
+ }
66
+
67
+ switch (selected) {
68
+ case EnhancementModelKind::kGtcrn:
69
+ result.paths.model = gtcrnModel;
70
+ break;
71
+ case EnhancementModelKind::kDpdfNet:
72
+ result.paths.model = dpdfnetModel;
73
+ break;
74
+ default:
75
+ result.error = "Enhancement: no compatible model type detected in " +
76
+ modelDir;
77
+ return result;
78
+ }
79
+
80
+ auto validation =
81
+ ValidateEnhancementPaths(selected, result.paths, modelDir);
82
+ if (!validation.ok) {
83
+ result.error = validation.error;
84
+ return result;
85
+ }
86
+
87
+ result.selectedKind = selected;
88
+ result.ok = true;
89
+ return result;
90
+ }
91
+
92
+ } // namespace sherpaonnx
@@ -42,6 +42,12 @@ enum class TtsModelKind {
42
42
  kSupertonic
43
43
  };
44
44
 
45
+ enum class EnhancementModelKind {
46
+ kUnknown,
47
+ kGtcrn,
48
+ kDpdfNet
49
+ };
50
+
45
51
  struct SttModelPaths {
46
52
  std::string encoder;
47
53
  std::string decoder;
@@ -170,6 +176,10 @@ struct TtsModelPaths {
170
176
  std::string voiceStyle;
171
177
  };
172
178
 
179
+ struct EnhancementModelPaths {
180
+ std::string model;
181
+ };
182
+
173
183
  struct SttDetectResult {
174
184
  bool ok = false;
175
185
  std::string error;
@@ -191,6 +201,14 @@ struct TtsDetectResult {
191
201
  std::vector<std::string> lexiconLanguageCandidates;
192
202
  };
193
203
 
204
+ struct EnhancementDetectResult {
205
+ bool ok = false;
206
+ std::string error;
207
+ std::vector<DetectedModel> detectedModels;
208
+ EnhancementModelKind selectedKind = EnhancementModelKind::kUnknown;
209
+ EnhancementModelPaths paths;
210
+ };
211
+
194
212
  SttDetectResult DetectSttModel(
195
213
  const std::string& modelDir,
196
214
  const std::optional<bool>& preferInt8,
@@ -203,6 +221,11 @@ TtsDetectResult DetectTtsModel(
203
221
  const std::string& modelType
204
222
  );
205
223
 
224
+ EnhancementDetectResult DetectEnhancementModel(
225
+ const std::string& modelDir,
226
+ const std::string& modelType
227
+ );
228
+
206
229
  } // namespace sherpaonnx
207
230
 
208
231
  #endif // SHERPA_ONNX_MODEL_DETECT_H
@@ -0,0 +1,30 @@
1
+ #ifndef SHERPA_ONNX_VALIDATE_ENHANCEMENT_H
2
+ #define SHERPA_ONNX_VALIDATE_ENHANCEMENT_H
3
+
4
+ #include "sherpa-onnx-model-detect.h"
5
+ #include <string>
6
+ #include <vector>
7
+
8
+ namespace sherpaonnx {
9
+
10
+ struct EnhancementFieldRequirement {
11
+ const char* fieldName;
12
+ std::string EnhancementModelPaths::* field;
13
+ bool required;
14
+ };
15
+
16
+ struct EnhancementValidationResult {
17
+ bool ok = true;
18
+ std::vector<std::string> missingRequired;
19
+ std::string error;
20
+ };
21
+
22
+ EnhancementValidationResult ValidateEnhancementPaths(
23
+ EnhancementModelKind kind,
24
+ const EnhancementModelPaths& paths,
25
+ const std::string& modelDir
26
+ );
27
+
28
+ } // namespace sherpaonnx
29
+
30
+ #endif // SHERPA_ONNX_VALIDATE_ENHANCEMENT_H
@@ -0,0 +1,69 @@
1
+ #include "sherpa-onnx-validate-enhancement.h"
2
+
3
+ #include <cstddef>
4
+
5
+ namespace sherpaonnx {
6
+ namespace {
7
+
8
+ static const EnhancementFieldRequirement kGenericReqs[] = {
9
+ {"model", &EnhancementModelPaths::model, true},
10
+ };
11
+
12
+ static const EnhancementFieldRequirement* GetRequirements(
13
+ EnhancementModelKind kind,
14
+ size_t& count
15
+ ) {
16
+ switch (kind) {
17
+ case EnhancementModelKind::kGtcrn:
18
+ case EnhancementModelKind::kDpdfNet:
19
+ count = std::size(kGenericReqs);
20
+ return kGenericReqs;
21
+ default:
22
+ count = 0;
23
+ return nullptr;
24
+ }
25
+ }
26
+
27
+ static const char* EnhancementKindToName(EnhancementModelKind kind) {
28
+ switch (kind) {
29
+ case EnhancementModelKind::kGtcrn:
30
+ return "GTCRN";
31
+ case EnhancementModelKind::kDpdfNet:
32
+ return "DPDFNet";
33
+ default:
34
+ return "Unknown";
35
+ }
36
+ }
37
+
38
+ } // namespace
39
+
40
+ EnhancementValidationResult ValidateEnhancementPaths(
41
+ EnhancementModelKind kind,
42
+ const EnhancementModelPaths& paths,
43
+ const std::string& modelDir
44
+ ) {
45
+ EnhancementValidationResult result;
46
+ size_t count = 0;
47
+ const auto* reqs = GetRequirements(kind, count);
48
+ if (!reqs) return result;
49
+
50
+ for (size_t i = 0; i < count; ++i) {
51
+ if (reqs[i].required && (paths.*(reqs[i].field)).empty()) {
52
+ result.missingRequired.push_back(reqs[i].fieldName);
53
+ }
54
+ }
55
+
56
+ if (!result.missingRequired.empty()) {
57
+ result.ok = false;
58
+ result.error = std::string("Enhancement ") + EnhancementKindToName(kind) +
59
+ ": missing required files in " + modelDir + ": ";
60
+ for (size_t i = 0; i < result.missingRequired.size(); ++i) {
61
+ if (i > 0) result.error += ", ";
62
+ result.error += result.missingRequired[i];
63
+ }
64
+ }
65
+
66
+ return result;
67
+ }
68
+
69
+ } // namespace sherpaonnx
@@ -1 +1 @@
1
- {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeSherpaOnnx.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;;AAEpE;;AA0sBA,eAAeA,mBAAmB,CAACC,YAAY,CAAO,YAAY,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeSherpaOnnx.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAA0B,cAAc;;AAEpE;;AAixBA,eAAeA,mBAAmB,CAACC,YAAY,CAAO,YAAY,CAAC","ignoreList":[]}
@@ -2,8 +2,8 @@
2
2
 
3
3
  import { Platform } from 'react-native';
4
4
  import { DocumentDirectoryPath, exists, readFile, readDir, unlink, writeFile } from '@dr.pogodin/react-native-fs';
5
- import { getCachePath, getModelsBaseDir, getModelDir, getManifestPath, getNativeAssetExtractedModelDir, getReadyMarkerPath, getTarArchivePath, getOnnxPath } from "./paths.js";
6
- import { resolveActualModelDir, removeDirectoryRecursive } from "./validation.js";
5
+ import { getCachePath, getModelsBaseDir, getModelDir, getManifestPath, getReadyMarkerPath, getTarArchivePath, getOnnxPath } from "./paths.js";
6
+ import { resolveActualModelDir } from "./validation.js";
7
7
  import { emitModelsListUpdated } from "./downloadEvents.js";
8
8
  import { clearMemoryCacheForCategory } from "./registry.js";
9
9
  export async function listDownloadedModelsByCategory(category) {
@@ -131,7 +131,6 @@ export async function deleteModelByCategory(category, id) {
131
131
  if (await exists(onnxPath)) {
132
132
  await unlink(onnxPath);
133
133
  }
134
- await removeDirectoryRecursive(getNativeAssetExtractedModelDir(id));
135
134
  const list = await listDownloadedModelsByCategory(category);
136
135
  emitModelsListUpdated(category, list);
137
136
  }
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","DocumentDirectoryPath","exists","readFile","readDir","unlink","writeFile","getCachePath","getModelsBaseDir","getModelDir","getManifestPath","getNativeAssetExtractedModelDir","getReadyMarkerPath","getTarArchivePath","getOnnxPath","resolveActualModelDir","removeDirectoryRecursive","emitModelsListUpdated","clearMemoryCacheForCategory","listDownloadedModelsByCategory","category","baseDir","existsResult","entries","models","entry","isDirectory","manifestPath","name","manifestExists","raw","manifest","JSON","parse","model","push","isModelDownloadedByCategory","id","readyPath","getLocalModelPathByCategory","ready","updateModelLastUsed","installDir","lastUsed","Date","toISOString","stringify","error","console","warn","listDownloadedModelsWithMetadata","modelsWithMetadata","downloadedAt","sizeOnDisk","size","status","cleanupLeastRecentlyUsed","options","length","keepCount","sorted","sort","a","b","aTime","bTime","getTime","deletedIds","bytesFreed","targetBytes","maxToDelete","maxModelsToDelete","i","item","deleteModelByCategory","log","modelDir","tarPath","onnxPath","list","clearModelCacheByCategory","cachePath","getDownloadStorageBase","OS"],"sourceRoot":"../../../src","sources":["download/localModels.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Platform","DocumentDirectoryPath","exists","readFile","readDir","unlink","writeFile","getCachePath","getModelsBaseDir","getModelDir","getManifestPath","getReadyMarkerPath","getTarArchivePath","getOnnxPath","resolveActualModelDir","emitModelsListUpdated","clearMemoryCacheForCategory","listDownloadedModelsByCategory","category","baseDir","existsResult","entries","models","entry","isDirectory","manifestPath","name","manifestExists","raw","manifest","JSON","parse","model","push","isModelDownloadedByCategory","id","readyPath","getLocalModelPathByCategory","ready","updateModelLastUsed","installDir","lastUsed","Date","toISOString","stringify","error","console","warn","listDownloadedModelsWithMetadata","modelsWithMetadata","downloadedAt","sizeOnDisk","size","status","cleanupLeastRecentlyUsed","options","length","keepCount","sorted","sort","a","b","aTime","bTime","getTime","deletedIds","bytesFreed","targetBytes","maxToDelete","maxModelsToDelete","i","item","deleteModelByCategory","log","modelDir","tarPath","onnxPath","list","clearModelCacheByCategory","cachePath","getDownloadStorageBase","OS"],"sourceRoot":"../../../src","sources":["download/localModels.ts"],"mappings":"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","ignoreList":[]}
@@ -86,7 +86,8 @@ export function getExtractionStatePath(category, modelId) {
86
86
  /**
87
87
  * Directory where native `resolveAssetPath` materializes a bundled model folder
88
88
  * (`DocumentDirectoryPath/models/{modelId}` — Android internal `files/models/...`).
89
- * Separate from {@link getModelDir}. Remove on delete so empty dirs do not break detection.
89
+ * Separate from {@link getModelDir}. `deleteModelByCategory` does not remove this tree; it
90
+ * only deletes download-manager installs under `sherpa-onnx/models/`.
90
91
  */
91
92
  export function getNativeAssetExtractedModelDir(modelId) {
92
93
  const safeId = modelId.replace(/[/\\]/g, '');
@@ -1 +1 @@
1
- {"version":3,"names":["DocumentDirectoryPath","ModelCategory","RELEASE_API_BASE","CATEGORY_CONFIG","Tts","tag","cacheFile","baseDir","Stt","Vad","Diarization","Enhancement","Separation","Qnn","getCacheDir","getCachePath","category","getModelsBaseDir","getModelDir","modelId","getArchiveFilename","archiveExt","getArchivePath","filename","getTarArchivePath","getOnnxPath","getReadyMarkerPath","getManifestPath","getDownloadStatePath","getExtractionStatePath","getNativeAssetExtractedModelDir","safeId","replace","getReleaseUrl"],"sourceRoot":"../../../src","sources":["download/paths.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["DocumentDirectoryPath","ModelCategory","RELEASE_API_BASE","CATEGORY_CONFIG","Tts","tag","cacheFile","baseDir","Stt","Vad","Diarization","Enhancement","Separation","Qnn","getCacheDir","getCachePath","category","getModelsBaseDir","getModelDir","modelId","getArchiveFilename","archiveExt","getArchivePath","filename","getTarArchivePath","getOnnxPath","getReadyMarkerPath","getManifestPath","getDownloadStatePath","getExtractionStatePath","getNativeAssetExtractedModelDir","safeId","replace","getReleaseUrl"],"sourceRoot":"../../../src","sources":["download/paths.ts"],"mappings":";;AAAA,SAASA,qBAAqB,QAAQ,6BAA6B;AACnE,SAASC,aAAa,QAAQ,YAAS;AAEvC,SAASC,gBAAgB,QAAQ,gBAAa;AAE9C,OAAO,MAAMC,eAGZ,GAAG;EACF,CAACF,aAAa,CAACG,GAAG,GAAG;IACnBC,GAAG,EAAE,YAAY;IACjBC,SAAS,EAAE,iBAAiB;IAC5BC,OAAO,EAAE,GAAGP,qBAAqB;EACnC,CAAC;EACD,CAACC,aAAa,CAACO,GAAG,GAAG;IACnBH,GAAG,EAAE,YAAY;IACjBC,SAAS,EAAE,iBAAiB;IAC5BC,OAAO,EAAE,GAAGP,qBAAqB;EACnC,CAAC;EACD,CAACC,aAAa,CAACQ,GAAG,GAAG;IACnBJ,GAAG,EAAE,YAAY;IACjBC,SAAS,EAAE,iBAAiB;IAC5BC,OAAO,EAAE,GAAGP,qBAAqB;EACnC,CAAC;EACD,CAACC,aAAa,CAACS,WAAW,GAAG;IAC3BL,GAAG,EAAE,6BAA6B;IAClCC,SAAS,EAAE,yBAAyB;IACpCC,OAAO,EAAE,GAAGP,qBAAqB;EACnC,CAAC;EACD,CAACC,aAAa,CAACU,WAAW,GAAG;IAC3BN,GAAG,EAAE,2BAA2B;IAChCC,SAAS,EAAE,yBAAyB;IACpCC,OAAO,EAAE,GAAGP,qBAAqB;EACnC,CAAC;EACD,CAACC,aAAa,CAACW,UAAU,GAAG;IAC1BP,GAAG,EAAE,0BAA0B;IAC/BC,SAAS,EAAE,wBAAwB;IACnCC,OAAO,EAAE,GAAGP,qBAAqB;EACnC,CAAC;EACD,CAACC,aAAa,CAACY,GAAG,GAAG;IACnBR,GAAG,EAAE,uBAAuB;IAC5BC,SAAS,EAAE,iBAAiB;IAC5BC,OAAO,EAAE,GAAGP,qBAAqB;EACnC;AACF,CAAC;AAED,OAAO,SAASc,WAAWA,CAAA,EAAW;EACpC,OAAO,GAAGd,qBAAqB,oBAAoB;AACrD;AAEA,OAAO,SAASe,YAAYA,CAACC,QAAuB,EAAU;EAC5D,OAAO,GAAGF,WAAW,CAAC,CAAC,IAAIX,eAAe,CAACa,QAAQ,CAAC,CAACV,SAAS,EAAE;AAClE;AAEA,OAAO,SAASW,gBAAgBA,CAACD,QAAuB,EAAU;EAChE,OAAOb,eAAe,CAACa,QAAQ,CAAC,CAACT,OAAO;AAC1C;AAEA,OAAO,SAASW,WAAWA,CAACF,QAAuB,EAAEG,OAAe,EAAU;EAC5E,OAAO,GAAGF,gBAAgB,CAACD,QAAQ,CAAC,IAAIG,OAAO,EAAE;AACnD;AAEA,OAAO,SAASC,kBAAkBA,CAChCD,OAAe,EACfE,UAA2B,EACnB;EACR,OAAO,GAAGF,OAAO,IAAIE,UAAU,EAAE;AACnC;AAEA,OAAO,SAASC,cAAcA,CAC5BN,QAAuB,EACvBG,OAAe,EACfE,UAA2B,EACnB;EACR,MAAME,QAAQ,GAAGH,kBAAkB,CAACD,OAAO,EAAEE,UAAU,CAAC;EACxD,IAAIA,UAAU,KAAK,MAAM,EAAE;IACzB,OAAO,GAAGH,WAAW,CAACF,QAAQ,EAAEG,OAAO,CAAC,IAAII,QAAQ,EAAE;EACxD;EACA,OAAO,GAAGN,gBAAgB,CAACD,QAAQ,CAAC,IAAIO,QAAQ,EAAE;AACpD;AAEA,OAAO,SAASC,iBAAiBA,CAC/BR,QAAuB,EACvBG,OAAe,EACP;EACR,OAAOG,cAAc,CAACN,QAAQ,EAAEG,OAAO,EAAE,SAAS,CAAC;AACrD;AAEA,OAAO,SAASM,WAAWA,CAACT,QAAuB,EAAEG,OAAe,EAAU;EAC5E,OAAOG,cAAc,CAACN,QAAQ,EAAEG,OAAO,EAAE,MAAM,CAAC;AAClD;AAEA,OAAO,SAASO,kBAAkBA,CAChCV,QAAuB,EACvBG,OAAe,EACP;EACR,OAAO,GAAGD,WAAW,CAACF,QAAQ,EAAEG,OAAO,CAAC,SAAS;AACnD;AAEA,OAAO,SAASQ,eAAeA,CAC7BX,QAAuB,EACvBG,OAAe,EACP;EACR,OAAO,GAAGD,WAAW,CAACF,QAAQ,EAAEG,OAAO,CAAC,gBAAgB;AAC1D;AAEA,OAAO,SAASS,oBAAoBA,CAClCZ,QAAuB,EACvBG,OAAe,EACP;EACR,OAAO,GAAGF,gBAAgB,CAACD,QAAQ,CAAC,oBAAoBG,OAAO,OAAO;AACxE;;AAEA;AACA,OAAO,SAASU,sBAAsBA,CACpCb,QAAuB,EACvBG,OAAe,EACP;EACR,OAAO,GAAGF,gBAAgB,CAACD,QAAQ,CAAC,sBAAsBG,OAAO,OAAO;AAC1E;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASW,+BAA+BA,CAACX,OAAe,EAAU;EACvE,MAAMY,MAAM,GAAGZ,OAAO,CAACa,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;EAC5C,OAAO,GAAGhC,qBAAqB,WAAW+B,MAAM,EAAE,CAACC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AACzE;AAEA,OAAO,SAASC,aAAaA,CAACjB,QAAuB,EAAU;EAC7D,OAAO,GAAGd,gBAAgB,IAAIC,eAAe,CAACa,QAAQ,CAAC,CAACX,GAAG,EAAE;AAC/D","ignoreList":[]}
@@ -1,54 +1,69 @@
1
1
  "use strict";
2
2
 
3
- /**
4
- * Speech Enhancement feature module
5
- *
6
- * @remarks
7
- * This feature is not yet implemented. This module serves as a placeholder
8
- * for future speech enhancement functionality.
9
- *
10
- * @example
11
- * ```typescript
12
- * // Future usage:
13
- * import { initializeEnhancement, enhanceAudio } from 'react-native-sherpa-onnx/enhancement';
14
- *
15
- * await initializeEnhancement({ modelPath: { type: 'auto', path: 'models/enhancement-model' } });
16
- * const enhancedPath = await enhanceAudio('path/to/noisy-audio.wav');
17
- * ```
18
- */
19
-
20
- /**
21
- * Enhancement initialization options (placeholder)
22
- */
23
-
24
- /**
25
- * Enhancement result
26
- */
27
-
28
- /**
29
- * Initialize Speech Enhancement with model directory.
30
- *
31
- * @throws {Error} Not yet implemented
32
- */
33
- export async function initializeEnhancement(_options) {
34
- throw new Error('Speech Enhancement feature is not yet implemented. This is a placeholder module.');
3
+ import SherpaOnnx from "../NativeSherpaOnnx.js";
4
+ import { resolveModelPath } from "../utils.js";
5
+ let enhancementInstanceCounter = 0;
6
+ function normalizeEnhancedAudio(raw) {
7
+ const samplesArray = Array.isArray(raw.samples) ? raw.samples : Array.from(raw.samples ?? []);
8
+ return {
9
+ samples: Float32Array.from(samplesArray),
10
+ sampleRate: Number(raw.sampleRate ?? 0)
11
+ };
35
12
  }
36
-
37
- /**
38
- * Enhance speech quality in an audio file.
39
- *
40
- * @throws {Error} Not yet implemented
41
- */
42
- export function enhanceAudio(_filePath) {
43
- throw new Error('Speech Enhancement feature is not yet implemented. This is a placeholder module.');
13
+ export async function detectEnhancementModel(modelPath, options) {
14
+ const resolvedPath = await resolveModelPath(modelPath);
15
+ const raw = await SherpaOnnx.detectEnhancementModel(resolvedPath, options?.modelType);
16
+ const err = typeof raw.error === 'string' ? raw.error.trim() : '';
17
+ return {
18
+ success: raw.success,
19
+ ...(err.length > 0 ? {
20
+ error: err
21
+ } : {}),
22
+ detectedModels: raw.detectedModels ?? [],
23
+ ...(raw.modelType != null && raw.modelType !== '' ? {
24
+ modelType: raw.modelType
25
+ } : {})
26
+ };
44
27
  }
45
-
46
- /**
47
- * Release enhancement resources.
48
- *
49
- * @throws {Error} Not yet implemented
50
- */
51
- export function unloadEnhancement() {
52
- throw new Error('Speech Enhancement feature is not yet implemented. This is a placeholder module.');
28
+ export async function createEnhancement(options) {
29
+ const instanceId = `enhancement_${++enhancementInstanceCounter}`;
30
+ const resolvedPath = await resolveModelPath(options.modelPath);
31
+ const init = await SherpaOnnx.initializeEnhancement(instanceId, resolvedPath, options.modelType ?? 'auto', options.numThreads, options.provider, options.debug);
32
+ if (!init.success) {
33
+ const nativeError = typeof init.error === 'string' ? init.error.trim() : '';
34
+ throw new Error(nativeError.length > 0 ? `Enhancement initialization failed: ${nativeError}` : `Enhancement initialization failed for ${instanceId}`);
35
+ }
36
+ let destroyed = false;
37
+ const guard = () => {
38
+ if (destroyed) {
39
+ throw new Error(`Enhancement instance ${instanceId} has been destroyed; cannot call methods on it.`);
40
+ }
41
+ };
42
+ return {
43
+ get instanceId() {
44
+ return instanceId;
45
+ },
46
+ async enhanceFile(inputPath, outputPath) {
47
+ guard();
48
+ const raw = await SherpaOnnx.enhanceFile(instanceId, inputPath, outputPath);
49
+ return normalizeEnhancedAudio(raw);
50
+ },
51
+ async enhanceSamples(samples, sampleRate) {
52
+ guard();
53
+ const raw = await SherpaOnnx.enhanceSamples(instanceId, samples, sampleRate);
54
+ return normalizeEnhancedAudio(raw);
55
+ },
56
+ async getSampleRate() {
57
+ guard();
58
+ return SherpaOnnx.getEnhancementSampleRate(instanceId);
59
+ },
60
+ async destroy() {
61
+ if (destroyed) return;
62
+ destroyed = true;
63
+ await SherpaOnnx.unloadEnhancement(instanceId);
64
+ }
65
+ };
53
66
  }
67
+ export { createStreamingEnhancement } from "./streaming.js";
68
+ export { ENHANCEMENT_MODEL_TYPES } from "./types.js";
54
69
  //# sourceMappingURL=index.js.map