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.
- package/README.md +17 -4
- package/SherpaOnnx.podspec +1 -0
- package/android/prebuilt-download.gradle +67 -27
- package/android/prebuilt-versions.gradle +1 -1
- package/android/src/main/assets/model_licenses/speech-enhancement-models-license-status.csv +7 -0
- package/android/src/main/cpp/CMakeLists.txt +3 -0
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-enhancement-wrapper.cpp +68 -0
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-enhancement-wrapper.h +17 -0
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect-enhancement.cpp +119 -0
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-model-detect.h +31 -0
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-validate-enhancement.cpp +68 -0
- package/android/src/main/cpp/jni/model_detect/sherpa-onnx-validate-enhancement.h +30 -0
- package/android/src/main/cpp/jni/module/sherpa-onnx-module-jni.cpp +21 -0
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxAssetHelper.kt +6 -0
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxEnhancementHelper.kt +377 -0
- package/android/src/main/java/com/sherpaonnx/SherpaOnnxModule.kt +106 -0
- package/ios/Resources/model_licenses/speech-enhancement-models-license-status.csv +7 -0
- package/ios/SherpaOnnx+Assets.mm +5 -0
- package/ios/SherpaOnnx+Enhancement.mm +435 -0
- package/ios/enhancement/sherpa-onnx-enhancement-wrapper.h +85 -0
- package/ios/enhancement/sherpa-onnx-enhancement-wrapper.mm +218 -0
- package/ios/model_detect/sherpa-onnx-model-detect-enhancement.mm +92 -0
- package/ios/model_detect/sherpa-onnx-model-detect.h +23 -0
- package/ios/model_detect/sherpa-onnx-validate-enhancement.h +30 -0
- package/ios/model_detect/sherpa-onnx-validate-enhancement.mm +69 -0
- package/lib/module/NativeSherpaOnnx.js.map +1 -1
- package/lib/module/download/localModels.js +2 -3
- package/lib/module/download/localModels.js.map +1 -1
- package/lib/module/download/paths.js +2 -1
- package/lib/module/download/paths.js.map +1 -1
- package/lib/module/enhancement/index.js +63 -48
- package/lib/module/enhancement/index.js.map +1 -1
- package/lib/module/enhancement/streaming.js +60 -0
- package/lib/module/enhancement/streaming.js.map +1 -0
- package/lib/module/enhancement/streamingTypes.js +4 -0
- package/lib/module/enhancement/streamingTypes.js.map +1 -0
- package/lib/module/enhancement/types.js +4 -0
- package/lib/module/enhancement/types.js.map +1 -0
- package/lib/module/licenses.js +9 -3
- package/lib/module/licenses.js.map +1 -1
- package/lib/typescript/src/NativeSherpaOnnx.d.ts +45 -0
- package/lib/typescript/src/NativeSherpaOnnx.d.ts.map +1 -1
- package/lib/typescript/src/download/localModels.d.ts.map +1 -1
- package/lib/typescript/src/download/paths.d.ts +2 -1
- package/lib/typescript/src/download/paths.d.ts.map +1 -1
- package/lib/typescript/src/enhancement/index.d.ts +9 -46
- package/lib/typescript/src/enhancement/index.d.ts.map +1 -1
- package/lib/typescript/src/enhancement/streaming.d.ts +6 -0
- package/lib/typescript/src/enhancement/streaming.d.ts.map +1 -0
- package/lib/typescript/src/enhancement/streamingTypes.d.ts +12 -0
- package/lib/typescript/src/enhancement/streamingTypes.d.ts.map +1 -0
- package/lib/typescript/src/enhancement/types.d.ts +31 -0
- package/lib/typescript/src/enhancement/types.d.ts.map +1 -0
- package/lib/typescript/src/licenses.d.ts.map +1 -1
- package/package.json +1 -1
- package/scripts/ci/check-model-csvs.sh +27 -2
- package/scripts/ci/collect_all_sherpa_model_streams.sh +3 -1
- package/scripts/ci/collect_one_sherpa_release_stream.sh +3 -1
- package/scripts/ci/sherpa_speech_enhancement_model_release_streams.json +13 -0
- package/scripts/ci/update_model_license_csv.sh +1 -1
- package/src/NativeSherpaOnnx.ts +71 -0
- package/src/download/localModels.ts +1 -3
- package/src/download/paths.ts +2 -1
- package/src/enhancement/index.ts +120 -58
- package/src/enhancement/streaming.ts +105 -0
- package/src/enhancement/streamingTypes.ts +14 -0
- package/src/enhancement/types.ts +36 -0
- package/src/licenses.ts +13 -2
- 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;;
|
|
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,
|
|
6
|
-
import { resolveActualModelDir
|
|
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","
|
|
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}.
|
|
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":"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","ignoreList":[]}
|
|
@@ -1,54 +1,69 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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
|