react-native-nitro-onnx 0.1.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/NOTICE +241 -0
- package/NitroOnnxSpeech.podspec +51 -0
- package/Package.swift +52 -0
- package/README.md +398 -0
- package/android/CMakeLists.txt +117 -0
- package/android/build.gradle +65 -0
- package/android/src/main/AndroidManifest.xml +6 -0
- package/android/src/main/assets/silero_vad.onnx +0 -0
- package/android/src/main/cpp/cpp-adapter.cpp +24 -0
- package/android/src/main/java/com/margelo/nitro/onnx/speech/OnnxSpeechPackage.kt +67 -0
- package/assets/silero_vad.onnx +0 -0
- package/cpp/AndroidPthreadCompat.cpp +16 -0
- package/cpp/AsrEngine.cpp +277 -0
- package/cpp/AsrEngine.hpp +110 -0
- package/cpp/AudioFileReader.cpp +177 -0
- package/cpp/AudioFileReader.hpp +26 -0
- package/cpp/AudioUtils.cpp +28 -0
- package/cpp/AudioUtils.hpp +38 -0
- package/cpp/ModelSingleton.hpp +51 -0
- package/cpp/NitroOnnxSpeech.cpp +68 -0
- package/cpp/NitroOnnxSpeech.hpp +42 -0
- package/cpp/OfflineAsr.cpp +81 -0
- package/cpp/OfflineAsr.hpp +33 -0
- package/cpp/ResourceDir.cpp +29 -0
- package/cpp/ResourceDir.hpp +18 -0
- package/cpp/SpeakerEngine.cpp +170 -0
- package/cpp/SpeakerEngine.hpp +70 -0
- package/cpp/SpeakerManager.cpp +93 -0
- package/cpp/SpeakerManager.hpp +43 -0
- package/cpp/StreamingAsr.cpp +123 -0
- package/cpp/StreamingAsr.hpp +55 -0
- package/cpp/ThreadPool.cpp +41 -0
- package/cpp/ThreadPool.hpp +62 -0
- package/cpp/Tts.cpp +132 -0
- package/cpp/Tts.hpp +38 -0
- package/cpp/TtsEngine.cpp +222 -0
- package/cpp/TtsEngine.hpp +77 -0
- package/cpp/Vad.cpp +126 -0
- package/cpp/Vad.hpp +62 -0
- package/cpp/VadEngine.cpp +217 -0
- package/cpp/VadEngine.hpp +126 -0
- package/ios/OnnxSpeechInitializer.mm +37 -0
- package/ios/PrivacyInfo.xcprivacy +14 -0
- package/lib/index.d.ts +11 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +19 -0
- package/lib/index.js.map +1 -0
- package/lib/specs/OnnxSpeech.nitro.d.ts +264 -0
- package/lib/specs/OnnxSpeech.nitro.d.ts.map +1 -0
- package/lib/specs/OnnxSpeech.nitro.js +6 -0
- package/lib/specs/OnnxSpeech.nitro.js.map +1 -0
- package/nitro.json +19 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/NitroOnnxSpeech+autolinking.cmake +86 -0
- package/nitrogen/generated/android/NitroOnnxSpeech+autolinking.gradle +27 -0
- package/nitrogen/generated/android/NitroOnnxSpeechOnLoad.cpp +49 -0
- package/nitrogen/generated/android/NitroOnnxSpeechOnLoad.hpp +34 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/onnx/speech/NitroOnnxSpeechOnLoad.kt +35 -0
- package/nitrogen/generated/ios/NitroOnnxSpeech+autolinking.rb +62 -0
- package/nitrogen/generated/ios/NitroOnnxSpeech-Swift-Cxx-Bridge.cpp +17 -0
- package/nitrogen/generated/ios/NitroOnnxSpeech-Swift-Cxx-Bridge.hpp +27 -0
- package/nitrogen/generated/ios/NitroOnnxSpeech-Swift-Cxx-Umbrella.hpp +38 -0
- package/nitrogen/generated/ios/NitroOnnxSpeechAutolinking.mm +35 -0
- package/nitrogen/generated/ios/NitroOnnxSpeechAutolinking.swift +16 -0
- package/nitrogen/generated/shared/c++/AsrModelConfig.hpp +142 -0
- package/nitrogen/generated/shared/c++/AsrModelType.hpp +112 -0
- package/nitrogen/generated/shared/c++/AsrResult.hpp +105 -0
- package/nitrogen/generated/shared/c++/HybridOfflineAsrSpec.cpp +25 -0
- package/nitrogen/generated/shared/c++/HybridOfflineAsrSpec.hpp +73 -0
- package/nitrogen/generated/shared/c++/HybridOnnxSpeechSpec.cpp +27 -0
- package/nitrogen/generated/shared/c++/HybridOnnxSpeechSpec.hpp +82 -0
- package/nitrogen/generated/shared/c++/HybridSpeakerManagerSpec.cpp +28 -0
- package/nitrogen/generated/shared/c++/HybridSpeakerManagerSpec.hpp +77 -0
- package/nitrogen/generated/shared/c++/HybridStreamingAsrSpec.cpp +32 -0
- package/nitrogen/generated/shared/c++/HybridStreamingAsrSpec.hpp +81 -0
- package/nitrogen/generated/shared/c++/HybridTtsSpec.cpp +26 -0
- package/nitrogen/generated/shared/c++/HybridTtsSpec.hpp +74 -0
- package/nitrogen/generated/shared/c++/HybridVadSpec.cpp +31 -0
- package/nitrogen/generated/shared/c++/HybridVadSpec.hpp +81 -0
- package/nitrogen/generated/shared/c++/RegisteredSpeaker.hpp +91 -0
- package/nitrogen/generated/shared/c++/SpeakerEmbeddingConfig.hpp +91 -0
- package/nitrogen/generated/shared/c++/TtsModelConfig.hpp +178 -0
- package/nitrogen/generated/shared/c++/TtsModelType.hpp +88 -0
- package/nitrogen/generated/shared/c++/TtsResult.hpp +91 -0
- package/nitrogen/generated/shared/c++/VadConfig.hpp +100 -0
- package/nitrogen/generated/shared/c++/VadSegment.hpp +91 -0
- package/package.json +62 -0
- package/scripts/prepare-sherpa-onnx.js +236 -0
- package/scripts/test-cpp.js +24 -0
- package/src/index.ts +45 -0
- package/src/specs/OnnxSpeech.nitro.ts +326 -0
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
// ------------------------------------------------------------------------------
|
|
2
|
+
// VadEngine.hpp
|
|
3
|
+
// Voice Activity Detection wrapper with a sliding pre-buffer queue.
|
|
4
|
+
//
|
|
5
|
+
// Problem: sherpa-onnx emits onSpeechStart asynchronously after it has already
|
|
6
|
+
// processed the first few frames of speech. The leading audio is therefore
|
|
7
|
+
// missing from the segment returned at onSpeechEnd.
|
|
8
|
+
//
|
|
9
|
+
// Solution: keep a fixed-size sliding buffer of raw PCM. When speech starts,
|
|
10
|
+
// the pre-buffer is prepended to the VAD output, preserving the first frames.
|
|
11
|
+
// ------------------------------------------------------------------------------
|
|
12
|
+
#pragma once
|
|
13
|
+
|
|
14
|
+
#include "AudioUtils.hpp"
|
|
15
|
+
#include "ThreadPool.hpp"
|
|
16
|
+
|
|
17
|
+
#include <condition_variable>
|
|
18
|
+
#include <memory>
|
|
19
|
+
#include <mutex>
|
|
20
|
+
#include <optional>
|
|
21
|
+
#include <queue>
|
|
22
|
+
#include <thread>
|
|
23
|
+
#include <vector>
|
|
24
|
+
|
|
25
|
+
// Forward declaration for sherpa-onnx C API.
|
|
26
|
+
struct SherpaOnnxVoiceActivityDetector;
|
|
27
|
+
|
|
28
|
+
namespace margelo::nitro::onnx::speech {
|
|
29
|
+
|
|
30
|
+
/** Native VAD configuration before conversion from the generated VadConfig. */
|
|
31
|
+
struct VadEngineConfig {
|
|
32
|
+
std::string modelPath;
|
|
33
|
+
float threshold = 0.5f;
|
|
34
|
+
float minSilenceDuration = 0.5f;
|
|
35
|
+
float minSpeechDuration = 0.25f;
|
|
36
|
+
int32_t preBufferMs = 300;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/** One buffered or emitted speech segment with raw float samples. */
|
|
40
|
+
struct VadEngineSegment {
|
|
41
|
+
float startMs = 0.0f;
|
|
42
|
+
float endMs = 0.0f;
|
|
43
|
+
std::vector<float> samples;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/** Consumer callbacks. Implemented by the Nitro hybrid object. */
|
|
47
|
+
class VadListener {
|
|
48
|
+
public:
|
|
49
|
+
virtual ~VadListener() = default;
|
|
50
|
+
virtual void onSpeechStart(const VadEngineSegment& segment) = 0;
|
|
51
|
+
virtual void onSpeechEnd(const VadEngineSegment& segment) = 0;
|
|
52
|
+
virtual void onError(const std::string& error) = 0;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Thread-safe VAD engine.
|
|
57
|
+
*
|
|
58
|
+
* All heavy work (sherpa-onnx inference) is performed on a background thread
|
|
59
|
+
* so that JS never blocks. A dedicated processor thread consumes audio from
|
|
60
|
+
* an input queue and emits segments through the listener.
|
|
61
|
+
*/
|
|
62
|
+
class VadEngine final {
|
|
63
|
+
public:
|
|
64
|
+
explicit VadEngine(std::shared_ptr<ThreadPool> threadPool);
|
|
65
|
+
~VadEngine();
|
|
66
|
+
|
|
67
|
+
VadEngine(const VadEngine&) = delete;
|
|
68
|
+
VadEngine& operator=(const VadEngine&) = delete;
|
|
69
|
+
|
|
70
|
+
/** Initialize the sherpa-onnx VAD. Must be called before processing. */
|
|
71
|
+
void initialize(const VadEngineConfig& config, std::shared_ptr<VadListener> listener);
|
|
72
|
+
|
|
73
|
+
/** Return true if the VAD has been initialized. */
|
|
74
|
+
bool isInitialized() const;
|
|
75
|
+
|
|
76
|
+
/** Feed a chunk of 16 kHz mono f32 PCM audio. Non-blocking. */
|
|
77
|
+
void acceptWaveform(const std::vector<float>& samples);
|
|
78
|
+
|
|
79
|
+
/** Return any buffered segments without waiting for speech end. */
|
|
80
|
+
std::vector<VadEngineSegment> pullSegments();
|
|
81
|
+
|
|
82
|
+
/** Reset VAD state and pre-buffer. */
|
|
83
|
+
void reset();
|
|
84
|
+
|
|
85
|
+
/** Release native resources. */
|
|
86
|
+
void dispose();
|
|
87
|
+
|
|
88
|
+
private:
|
|
89
|
+
void processLoop();
|
|
90
|
+
void flushPreBuffer(std::vector<float>& target);
|
|
91
|
+
void emitSegment();
|
|
92
|
+
|
|
93
|
+
std::shared_ptr<ThreadPool> threadPool_;
|
|
94
|
+
std::shared_ptr<VadListener> listener_;
|
|
95
|
+
|
|
96
|
+
const SherpaOnnxVoiceActivityDetector* vad_ = nullptr;
|
|
97
|
+
VadEngineConfig config_;
|
|
98
|
+
std::atomic<bool> initialized_{false};
|
|
99
|
+
std::atomic<bool> stop_{false};
|
|
100
|
+
std::atomic<bool> resetRequested_{false};
|
|
101
|
+
|
|
102
|
+
// Input queue.
|
|
103
|
+
std::mutex inputMutex_;
|
|
104
|
+
std::condition_variable inputCv_;
|
|
105
|
+
std::queue<std::vector<float>> inputQueue_;
|
|
106
|
+
|
|
107
|
+
// Sliding pre-buffer. Always holds the most recent N milliseconds of audio.
|
|
108
|
+
std::mutex preBufferMutex_;
|
|
109
|
+
std::vector<float> preBuffer_;
|
|
110
|
+
size_t preBufferCapacity_ = 0;
|
|
111
|
+
|
|
112
|
+
// Output segments waiting to be pulled.
|
|
113
|
+
std::mutex outputMutex_;
|
|
114
|
+
std::vector<VadEngineSegment> pendingSegments_;
|
|
115
|
+
|
|
116
|
+
// Processor thread.
|
|
117
|
+
std::thread processorThread_;
|
|
118
|
+
|
|
119
|
+
// Stream time tracking.
|
|
120
|
+
float streamMs_ = 0.0f;
|
|
121
|
+
bool inSpeech_ = false;
|
|
122
|
+
float currentSpeechStartMs_ = 0.0f;
|
|
123
|
+
std::vector<float> currentSpeechSamples_;
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
} // namespace margelo::nitro::onnx::speech
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// ------------------------------------------------------------------------------
|
|
2
|
+
// OnnxSpeechInitializer.mm
|
|
3
|
+
// ------------------------------------------------------------------------------
|
|
4
|
+
// Sets up resource and cache directories for the C++ layer on iOS.
|
|
5
|
+
// Runs at +load time so paths are available before any HybridObject is created.
|
|
6
|
+
// ------------------------------------------------------------------------------
|
|
7
|
+
#import <Foundation/Foundation.h>
|
|
8
|
+
|
|
9
|
+
#include "ResourceDir.hpp"
|
|
10
|
+
|
|
11
|
+
@interface NitroOnnxSpeechInitializer : NSObject
|
|
12
|
+
@end
|
|
13
|
+
|
|
14
|
+
@implementation NitroOnnxSpeechInitializer
|
|
15
|
+
|
|
16
|
+
+ (void)load {
|
|
17
|
+
NSBundle* mainBundle = [NSBundle mainBundle];
|
|
18
|
+
|
|
19
|
+
// The podspec bundles assets into NitroOnnxSpeech_Resources.bundle.
|
|
20
|
+
NSString* resourceBundlePath = [mainBundle pathForResource:@"NitroOnnxSpeech_Resources"
|
|
21
|
+
ofType:@"bundle"];
|
|
22
|
+
if (resourceBundlePath) {
|
|
23
|
+
margelo::nitro::onnx::speech::setResourceDir([resourceBundlePath UTF8String]);
|
|
24
|
+
} else {
|
|
25
|
+
// Fallback: model may be copied directly into the main bundle.
|
|
26
|
+
margelo::nitro::onnx::speech::setResourceDir([[mainBundle resourcePath] UTF8String]);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
NSArray<NSString*>* cachePaths = NSSearchPathForDirectoriesInDomains(
|
|
30
|
+
NSCachesDirectory, NSUserDomainMask, YES);
|
|
31
|
+
NSString* cacheDir = cachePaths.firstObject;
|
|
32
|
+
if (cacheDir) {
|
|
33
|
+
margelo::nitro::onnx::speech::setCacheDir([cacheDir UTF8String]);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@end
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>NSPrivacyTracking</key>
|
|
6
|
+
<false/>
|
|
7
|
+
<key>NSPrivacyTrackingDomains</key>
|
|
8
|
+
<array/>
|
|
9
|
+
<key>NSPrivacyCollectedDataTypes</key>
|
|
10
|
+
<array/>
|
|
11
|
+
<key>NSPrivacyAccessedAPITypes</key>
|
|
12
|
+
<array/>
|
|
13
|
+
</dict>
|
|
14
|
+
</plist>
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AudioFormat, OnnxSpeech } from "./specs/OnnxSpeech.nitro.js";
|
|
2
|
+
export type { AudioFormat, Result, VadConfig, VadSegment, VadEvents, Vad, AsrModelType, AsrModelConfig, AsrResult, StreamingAsrEvents, OfflineAsr, StreamingAsr, TtsModelType, TtsModelConfig, TtsResult, Tts, SpeakerEmbeddingConfig, RegisteredSpeaker, SpeakerManager, OnnxSpeech, } from "./specs/OnnxSpeech.nitro.js";
|
|
3
|
+
/**
|
|
4
|
+
* Get the shared OnnxSpeech Nitro module instance.
|
|
5
|
+
* Heavy AI models are loaded on demand and cached as singletons behind
|
|
6
|
+
* the individual hybrid objects (Vad, Asr, Tts, SpeakerManager).
|
|
7
|
+
*/
|
|
8
|
+
export declare function getOnnxSpeech(): OnnxSpeech;
|
|
9
|
+
/** Default 16 kHz mono f32 PCM format used by every audio interface. */
|
|
10
|
+
export declare const DEFAULT_AUDIO_FORMAT: AudioFormat;
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE3E,YAAY,EACV,WAAW,EACX,MAAM,EACN,SAAS,EACT,UAAU,EACV,SAAS,EACT,GAAG,EACH,YAAY,EACZ,cAAc,EACd,SAAS,EACT,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,SAAS,EACT,GAAG,EACH,sBAAsB,EACtB,iBAAiB,EACjB,cAAc,EACd,UAAU,GACX,MAAM,6BAA6B,CAAC;AAErC;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,UAAU,CAE1C;AAED,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,EAAE,WAIlC,CAAC"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// ------------------------------------------------------------------------------
|
|
2
|
+
// Public entry point for react-native-nitro-onnx.
|
|
3
|
+
// ------------------------------------------------------------------------------
|
|
4
|
+
import { NitroModules } from "react-native-nitro-modules";
|
|
5
|
+
/**
|
|
6
|
+
* Get the shared OnnxSpeech Nitro module instance.
|
|
7
|
+
* Heavy AI models are loaded on demand and cached as singletons behind
|
|
8
|
+
* the individual hybrid objects (Vad, Asr, Tts, SpeakerManager).
|
|
9
|
+
*/
|
|
10
|
+
export function getOnnxSpeech() {
|
|
11
|
+
return NitroModules.createHybridObject("NitroOnnxSpeech");
|
|
12
|
+
}
|
|
13
|
+
/** Default 16 kHz mono f32 PCM format used by every audio interface. */
|
|
14
|
+
export const DEFAULT_AUDIO_FORMAT = {
|
|
15
|
+
sampleRate: 16000,
|
|
16
|
+
channels: 1,
|
|
17
|
+
sampleFormat: "f32le",
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,kDAAkD;AAClD,iFAAiF;AAEjF,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AA0B1D;;;;GAIG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,YAAY,CAAC,kBAAkB,CAAa,iBAAiB,CAAC,CAAC;AACxE,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,UAAU,EAAE,KAAK;IACjB,QAAQ,EAAE,CAAC;IACX,YAAY,EAAE,OAAO;CACtB,CAAC"}
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import type { HybridObject } from "react-native-nitro-modules";
|
|
2
|
+
/** All speech hybrid objects are implemented in C++ on both platforms. */
|
|
3
|
+
export type SpeechPlatforms = {
|
|
4
|
+
ios: "c++";
|
|
5
|
+
android: "c++";
|
|
6
|
+
};
|
|
7
|
+
/** Audio format constants used across the module. */
|
|
8
|
+
export interface AudioFormat {
|
|
9
|
+
/** Sample rate in Hz. Always 16000 for this module. */
|
|
10
|
+
sampleRate: number;
|
|
11
|
+
/** Number of channels. Always 1 (mono). */
|
|
12
|
+
channels: number;
|
|
13
|
+
/** PCM sample format. */
|
|
14
|
+
sampleFormat: "f32le" | "s16le";
|
|
15
|
+
}
|
|
16
|
+
/** Generic result wrapper for operations that may fail on the native side. */
|
|
17
|
+
export interface Result<T> {
|
|
18
|
+
success: boolean;
|
|
19
|
+
data?: T;
|
|
20
|
+
error?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface VadConfig {
|
|
23
|
+
/**
|
|
24
|
+
* Optional path to a custom Silero VAD onnx model.
|
|
25
|
+
* If omitted, the bundled silero_vad.onnx resource is used.
|
|
26
|
+
*/
|
|
27
|
+
modelPath?: string;
|
|
28
|
+
/** Threshold for speech start detection, range 0..1. Default: 0.5. */
|
|
29
|
+
threshold?: number;
|
|
30
|
+
/** Minimum silence duration in milliseconds before speech ends. Default: 500. */
|
|
31
|
+
minSilenceDurationMs?: number;
|
|
32
|
+
/** Minimum speech duration in milliseconds. Default: 250. */
|
|
33
|
+
minSpeechDurationMs?: number;
|
|
34
|
+
/** How many milliseconds of audio to keep before onSpeechStart. Default: 300. */
|
|
35
|
+
preBufferMs?: number;
|
|
36
|
+
}
|
|
37
|
+
/** VAD segment delivered after speech ends or on explicit pull. */
|
|
38
|
+
export interface VadSegment {
|
|
39
|
+
/** Start offset in milliseconds relative to stream start. */
|
|
40
|
+
startMs: number;
|
|
41
|
+
/** End offset in milliseconds. */
|
|
42
|
+
endMs: number;
|
|
43
|
+
/** Audio samples as 16 kHz mono f32 PCM. */
|
|
44
|
+
samples: ArrayBuffer;
|
|
45
|
+
}
|
|
46
|
+
/** VAD events delivered asynchronously to JS. */
|
|
47
|
+
export interface VadEvents {
|
|
48
|
+
onSpeechStart?: (segment: VadSegment) => void;
|
|
49
|
+
onSpeechEnd?: (segment: VadSegment) => void;
|
|
50
|
+
onError?: (error: string) => void;
|
|
51
|
+
}
|
|
52
|
+
/** Voice Activity Detection hybrid object. */
|
|
53
|
+
export interface Vad extends HybridObject<SpeechPlatforms> {
|
|
54
|
+
/** Optional callback invoked when speech starts. */
|
|
55
|
+
onSpeechStart?: (segment: VadSegment) => void;
|
|
56
|
+
/** Optional callback invoked when speech ends. */
|
|
57
|
+
onSpeechEnd?: (segment: VadSegment) => void;
|
|
58
|
+
/** Optional callback invoked on VAD errors. */
|
|
59
|
+
onError?: (error: string) => void;
|
|
60
|
+
/** Initialize the VAD engine. Must be called before process. */
|
|
61
|
+
initialize(config: VadConfig): Promise<void>;
|
|
62
|
+
/** Returns true if the engine is ready to process audio. */
|
|
63
|
+
isInitialized(): boolean;
|
|
64
|
+
/** Feed a chunk of 16 kHz mono f32 PCM audio. Runs on a background thread. */
|
|
65
|
+
process(samples: ArrayBuffer): Promise<void>;
|
|
66
|
+
/** Pull any buffered speech segment(s) without waiting for speech end. */
|
|
67
|
+
pullSegments(): Promise<VadSegment[]>;
|
|
68
|
+
/** Reset internal state and buffers. */
|
|
69
|
+
reset(): Promise<void>;
|
|
70
|
+
}
|
|
71
|
+
export type AsrModelType = "whisper" | "transducer" | "paraformer" | "zipformer" | "conformer" | "wenet" | "telespeech" | "moonshine" | "dolphin" | "nemo" | "sense_voice";
|
|
72
|
+
export interface AsrModelConfig {
|
|
73
|
+
type: AsrModelType;
|
|
74
|
+
/** Directory containing all model files. */
|
|
75
|
+
modelDir: string;
|
|
76
|
+
/** Path to tokens.txt or equivalent vocabulary file. */
|
|
77
|
+
tokensPath: string;
|
|
78
|
+
/** Whisper: encoder + decoder ONNX files. */
|
|
79
|
+
whisperEncoder?: string;
|
|
80
|
+
whisperDecoder?: string;
|
|
81
|
+
/** Transducer / Zipformer / Conformer: encoder/decoder/joiner. */
|
|
82
|
+
encoder?: string;
|
|
83
|
+
decoder?: string;
|
|
84
|
+
joiner?: string;
|
|
85
|
+
/** Paraformer / Wenet / Telespeech / SenseVoice: single model file. */
|
|
86
|
+
model?: string;
|
|
87
|
+
/** NeMo config file (.yaml). */
|
|
88
|
+
config?: string;
|
|
89
|
+
/** Number of threads for ONNX Runtime. Default: 2. */
|
|
90
|
+
numThreads?: number;
|
|
91
|
+
/** Decode method, e.g. "greedy_search" or "modified_beam_search". */
|
|
92
|
+
decodingMethod?: string;
|
|
93
|
+
/** Max active paths for beam search. */
|
|
94
|
+
maxActivePaths?: number;
|
|
95
|
+
/** Whisper language hint, e.g. "en", "zh". */
|
|
96
|
+
language?: string;
|
|
97
|
+
/** SenseVoice: whether to use itn. */
|
|
98
|
+
useItn?: boolean;
|
|
99
|
+
}
|
|
100
|
+
export interface AsrResult {
|
|
101
|
+
text: string;
|
|
102
|
+
/** Confidence score when available. */
|
|
103
|
+
score?: number;
|
|
104
|
+
/** Start offset in milliseconds. */
|
|
105
|
+
startMs?: number;
|
|
106
|
+
/** End offset in milliseconds. */
|
|
107
|
+
endMs?: number;
|
|
108
|
+
/** Word / token timestamps when supported by the model. */
|
|
109
|
+
timestamps?: number[];
|
|
110
|
+
/** Raw JSON metadata from the recognizer. */
|
|
111
|
+
json?: string;
|
|
112
|
+
}
|
|
113
|
+
export interface StreamingAsrEvents {
|
|
114
|
+
onPartialResult?: (result: AsrResult) => void;
|
|
115
|
+
onFinalResult?: (result: AsrResult) => void;
|
|
116
|
+
onError?: (error: string) => void;
|
|
117
|
+
}
|
|
118
|
+
/** Offline (file/chunk) ASR hybrid object. */
|
|
119
|
+
export interface OfflineAsr extends HybridObject<SpeechPlatforms> {
|
|
120
|
+
/** Preload the model singleton. */
|
|
121
|
+
load(config: AsrModelConfig): Promise<void>;
|
|
122
|
+
isLoaded(): boolean;
|
|
123
|
+
/** Recognize a full buffer of 16 kHz mono f32 PCM. */
|
|
124
|
+
recognize(samples: ArrayBuffer): Promise<AsrResult>;
|
|
125
|
+
/** Recognize from a file path (native side reads the audio). */
|
|
126
|
+
recognizeFile(path: string): Promise<AsrResult>;
|
|
127
|
+
unload(): Promise<void>;
|
|
128
|
+
}
|
|
129
|
+
/** Streaming ASR hybrid object. */
|
|
130
|
+
export interface StreamingAsr extends HybridObject<SpeechPlatforms> {
|
|
131
|
+
/** Optional callback invoked when a partial recognition result is available. */
|
|
132
|
+
onPartialResult?: (result: AsrResult) => void;
|
|
133
|
+
/** Optional callback invoked when a final recognition result is available. */
|
|
134
|
+
onFinalResult?: (result: AsrResult) => void;
|
|
135
|
+
/** Optional callback invoked on ASR errors. */
|
|
136
|
+
onError?: (error: string) => void;
|
|
137
|
+
load(config: AsrModelConfig): Promise<void>;
|
|
138
|
+
isLoaded(): boolean;
|
|
139
|
+
/** Feed streaming audio. */
|
|
140
|
+
acceptWaveform(samples: ArrayBuffer): Promise<void>;
|
|
141
|
+
/** Signal end of stream and return final result. */
|
|
142
|
+
finalize(): Promise<AsrResult>;
|
|
143
|
+
reset(): Promise<void>;
|
|
144
|
+
unload(): Promise<void>;
|
|
145
|
+
}
|
|
146
|
+
export type TtsModelType = "kokoro" | "vits" | "matcha" | "pocket" | "zipvoice";
|
|
147
|
+
export interface TtsModelConfig {
|
|
148
|
+
type: TtsModelType;
|
|
149
|
+
/** Directory containing all model files. */
|
|
150
|
+
modelDir: string;
|
|
151
|
+
/**
|
|
152
|
+
* Single ONNX model file for Kokoro / VITS / ZipVoice.
|
|
153
|
+
* For Matcha, use acousticModel + vocoder instead.
|
|
154
|
+
*/
|
|
155
|
+
model?: string;
|
|
156
|
+
/** Acoustic model ONNX file (Matcha only). */
|
|
157
|
+
acousticModel?: string;
|
|
158
|
+
/** Vocoder ONNX file (Matcha only). */
|
|
159
|
+
vocoder?: string;
|
|
160
|
+
/** Tokens / lexicon files. */
|
|
161
|
+
tokens?: string;
|
|
162
|
+
lexicon?: string;
|
|
163
|
+
/** Kokoro / Matcha voice data (e.g. voices.bin). */
|
|
164
|
+
voices?: string;
|
|
165
|
+
/** Optional espeak-ng-data directory (Kokoro / VITS / Matcha / ZipVoice). */
|
|
166
|
+
espeakNgData?: string;
|
|
167
|
+
/** Optional dict directory (Kokoro / VITS / Matcha legacy field). */
|
|
168
|
+
dictDir?: string;
|
|
169
|
+
/** Pocket: lm_main ONNX file. */
|
|
170
|
+
lmMain?: string;
|
|
171
|
+
/** Pocket: lm_flow ONNX file. */
|
|
172
|
+
lmFlow?: string;
|
|
173
|
+
/** Pocket: text conditioner ONNX file. */
|
|
174
|
+
textConditioner?: string;
|
|
175
|
+
/** Pocket: encoder ONNX file. */
|
|
176
|
+
pocketEncoder?: string;
|
|
177
|
+
/** Pocket: decoder ONNX file. */
|
|
178
|
+
pocketDecoder?: string;
|
|
179
|
+
/** Pocket: vocab.json file. */
|
|
180
|
+
vocabJson?: string;
|
|
181
|
+
/** Pocket: token_scores.json file. */
|
|
182
|
+
tokenScoresJson?: string;
|
|
183
|
+
/** ZipVoice: encoder ONNX file. */
|
|
184
|
+
zipvoiceEncoder?: string;
|
|
185
|
+
/** ZipVoice: decoder ONNX file. */
|
|
186
|
+
zipvoiceDecoder?: string;
|
|
187
|
+
/** Pocket: config JSON. */
|
|
188
|
+
config?: string;
|
|
189
|
+
/** Number of ONNX Runtime threads. Default: 2. */
|
|
190
|
+
numThreads?: number;
|
|
191
|
+
/** Output sample rate (some models produce 24 kHz). Default: 16000. */
|
|
192
|
+
outputSampleRate?: number;
|
|
193
|
+
/** Speaker ID for multi-speaker models. */
|
|
194
|
+
speakerId?: number;
|
|
195
|
+
/** Speed factor, e.g. 1.0. */
|
|
196
|
+
speed?: number;
|
|
197
|
+
}
|
|
198
|
+
export interface TtsResult {
|
|
199
|
+
/** Synthesized audio as 16 kHz mono f32 PCM (or configured output sample rate). */
|
|
200
|
+
samples: ArrayBuffer;
|
|
201
|
+
sampleRate: number;
|
|
202
|
+
/** Duration in milliseconds. */
|
|
203
|
+
durationMs: number;
|
|
204
|
+
}
|
|
205
|
+
/** Text-to-speech hybrid object. */
|
|
206
|
+
export interface Tts extends HybridObject<SpeechPlatforms> {
|
|
207
|
+
load(config: TtsModelConfig): Promise<void>;
|
|
208
|
+
isLoaded(): boolean;
|
|
209
|
+
/** Synthesize text into audio on a background thread. Optional speed override. */
|
|
210
|
+
synthesize(text: string, speed?: number): Promise<TtsResult>;
|
|
211
|
+
/** Synthesize with a cloned speaker embedding (reference-audio cloning). */
|
|
212
|
+
synthesizeWithSpeaker(text: string, speakerId: string, speed?: number): Promise<TtsResult>;
|
|
213
|
+
/** Save TTS result as a WAV file at the given path. */
|
|
214
|
+
saveWav(result: TtsResult, path: string): Promise<void>;
|
|
215
|
+
unload(): Promise<void>;
|
|
216
|
+
}
|
|
217
|
+
export interface SpeakerEmbeddingConfig {
|
|
218
|
+
/** Directory containing the speaker embedding model. */
|
|
219
|
+
modelDir: string;
|
|
220
|
+
/** Model ONNX file. */
|
|
221
|
+
model: string;
|
|
222
|
+
numThreads: number;
|
|
223
|
+
}
|
|
224
|
+
export interface RegisteredSpeaker {
|
|
225
|
+
/** Stable speaker ID. */
|
|
226
|
+
id: string;
|
|
227
|
+
/** Optional display name. */
|
|
228
|
+
name: string;
|
|
229
|
+
/** Stored embedding file path on native side. */
|
|
230
|
+
embeddingPath: string;
|
|
231
|
+
}
|
|
232
|
+
/** Speaker embedding and voice cloning hybrid object. */
|
|
233
|
+
export interface SpeakerManager extends HybridObject<SpeechPlatforms> {
|
|
234
|
+
load(config: SpeakerEmbeddingConfig): Promise<void>;
|
|
235
|
+
isLoaded(): boolean;
|
|
236
|
+
/** Compute an embedding from reference 16 kHz mono f32 PCM audio. */
|
|
237
|
+
computeEmbedding(samples: ArrayBuffer): Promise<ArrayBuffer>;
|
|
238
|
+
/** Register a speaker embedding for later TTS use. */
|
|
239
|
+
registerSpeaker(id: string, name: string, embedding: ArrayBuffer): Promise<RegisteredSpeaker>;
|
|
240
|
+
/** Register from a reference audio file. */
|
|
241
|
+
registerSpeakerFromFile(id: string, name: string, path: string): Promise<RegisteredSpeaker>;
|
|
242
|
+
/** List registered speakers. */
|
|
243
|
+
listSpeakers(): Promise<RegisteredSpeaker[]>;
|
|
244
|
+
/** Remove a registered speaker. */
|
|
245
|
+
removeSpeaker(id: string): Promise<void>;
|
|
246
|
+
unload(): Promise<void>;
|
|
247
|
+
}
|
|
248
|
+
export interface OnnxSpeech extends HybridObject<SpeechPlatforms> {
|
|
249
|
+
/** Create a VAD instance. */
|
|
250
|
+
createVad(): Vad;
|
|
251
|
+
/** Create an offline ASR instance. */
|
|
252
|
+
createOfflineAsr(): OfflineAsr;
|
|
253
|
+
/** Create a streaming ASR instance. */
|
|
254
|
+
createStreamingAsr(): StreamingAsr;
|
|
255
|
+
/** Create a TTS instance. */
|
|
256
|
+
createTts(): Tts;
|
|
257
|
+
/** Create a speaker manager for voice cloning. */
|
|
258
|
+
createSpeakerManager(): SpeakerManager;
|
|
259
|
+
/** Get the module version. */
|
|
260
|
+
readonly version: string;
|
|
261
|
+
/** Check if the CPU is a Qualcomm chip. Always returns false on iOS. */
|
|
262
|
+
isQualcommCpu(): boolean;
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=OnnxSpeech.nitro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OnnxSpeech.nitro.d.ts","sourceRoot":"","sources":["../../src/specs/OnnxSpeech.nitro.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// ------------------------------------------------------------------------------
|
|
2
|
+
// Nitro TypeScript specifications for react-native-nitro-onnx.
|
|
3
|
+
// All numeric audio data is 16 kHz mono PCM f32 unless otherwise noted.
|
|
4
|
+
// ------------------------------------------------------------------------------
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=OnnxSpeech.nitro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OnnxSpeech.nitro.js","sourceRoot":"","sources":["../../src/specs/OnnxSpeech.nitro.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,+DAA+D;AAC/D,wEAAwE;AACxE,iFAAiF"}
|
package/nitro.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cxxNamespace": ["onnx", "speech"],
|
|
3
|
+
"ios": {
|
|
4
|
+
"iosModuleName": "NitroOnnxSpeech"
|
|
5
|
+
},
|
|
6
|
+
"android": {
|
|
7
|
+
"androidNamespace": ["onnx", "speech"],
|
|
8
|
+
"androidCxxLibName": "NitroOnnxSpeech"
|
|
9
|
+
},
|
|
10
|
+
"autolinking": {
|
|
11
|
+
"NitroOnnxSpeech": {
|
|
12
|
+
"all": {
|
|
13
|
+
"language": "c++",
|
|
14
|
+
"implementationClassName": "NitroOnnxSpeech"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"ignorePaths": ["node_modules", "lib"]
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
** linguist-generated=true
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
#
|
|
2
|
+
# NitroOnnxSpeech+autolinking.cmake
|
|
3
|
+
# This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
# https://github.com/mrousavy/nitro
|
|
5
|
+
# Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
# This is a CMake file that adds all files generated by Nitrogen
|
|
9
|
+
# to the current CMake project.
|
|
10
|
+
#
|
|
11
|
+
# To use it, add this to your CMakeLists.txt:
|
|
12
|
+
# ```cmake
|
|
13
|
+
# include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/NitroOnnxSpeech+autolinking.cmake)
|
|
14
|
+
# ```
|
|
15
|
+
|
|
16
|
+
# Define a flag to check if we are building properly
|
|
17
|
+
add_definitions(-DBUILDING_NITROONNXSPEECH_WITH_GENERATED_CMAKE_PROJECT)
|
|
18
|
+
|
|
19
|
+
# Enable Raw Props parsing in react-native (for Nitro Views)
|
|
20
|
+
add_definitions(-DRN_SERIALIZABLE_STATE)
|
|
21
|
+
|
|
22
|
+
# Add all headers that were generated by Nitrogen
|
|
23
|
+
include_directories(
|
|
24
|
+
"../nitrogen/generated/shared/c++"
|
|
25
|
+
"../nitrogen/generated/android/c++"
|
|
26
|
+
"../nitrogen/generated/android/"
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
# Add all .cpp sources that were generated by Nitrogen
|
|
30
|
+
target_sources(
|
|
31
|
+
# CMake project name (Android C++ library name)
|
|
32
|
+
NitroOnnxSpeech PRIVATE
|
|
33
|
+
# Autolinking Setup
|
|
34
|
+
../nitrogen/generated/android/NitroOnnxSpeechOnLoad.cpp
|
|
35
|
+
# Shared Nitrogen C++ sources
|
|
36
|
+
../nitrogen/generated/shared/c++/HybridVadSpec.cpp
|
|
37
|
+
../nitrogen/generated/shared/c++/HybridOfflineAsrSpec.cpp
|
|
38
|
+
../nitrogen/generated/shared/c++/HybridStreamingAsrSpec.cpp
|
|
39
|
+
../nitrogen/generated/shared/c++/HybridTtsSpec.cpp
|
|
40
|
+
../nitrogen/generated/shared/c++/HybridSpeakerManagerSpec.cpp
|
|
41
|
+
../nitrogen/generated/shared/c++/HybridOnnxSpeechSpec.cpp
|
|
42
|
+
# Android-specific Nitrogen C++ sources
|
|
43
|
+
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
# From node_modules/react-native/ReactAndroid/cmake-utils/folly-flags.cmake
|
|
47
|
+
# Used in node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake
|
|
48
|
+
target_compile_definitions(
|
|
49
|
+
NitroOnnxSpeech PRIVATE
|
|
50
|
+
-DFOLLY_NO_CONFIG=1
|
|
51
|
+
-DFOLLY_HAVE_CLOCK_GETTIME=1
|
|
52
|
+
-DFOLLY_USE_LIBCPP=1
|
|
53
|
+
-DFOLLY_CFG_NO_COROUTINES=1
|
|
54
|
+
-DFOLLY_MOBILE=1
|
|
55
|
+
-DFOLLY_HAVE_RECVMMSG=1
|
|
56
|
+
-DFOLLY_HAVE_PTHREAD=1
|
|
57
|
+
# Once we target android-23 above, we can comment
|
|
58
|
+
# the following line. NDK uses GNU style stderror_r() after API 23.
|
|
59
|
+
-DFOLLY_HAVE_XSI_STRERROR_R=1
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
# Add all libraries required by the generated specs
|
|
63
|
+
find_package(fbjni REQUIRED) # <-- Used for communication between Java <-> C++
|
|
64
|
+
find_package(ReactAndroid REQUIRED) # <-- Used to set up React Native bindings (e.g. CallInvoker/TurboModule)
|
|
65
|
+
find_package(react-native-nitro-modules REQUIRED) # <-- Used to create all HybridObjects and use the Nitro core library
|
|
66
|
+
|
|
67
|
+
# Link all libraries together
|
|
68
|
+
target_link_libraries(
|
|
69
|
+
NitroOnnxSpeech
|
|
70
|
+
fbjni::fbjni # <-- Facebook C++ JNI helpers
|
|
71
|
+
ReactAndroid::jsi # <-- RN: JSI
|
|
72
|
+
react-native-nitro-modules::NitroModules # <-- NitroModules Core :)
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
# Link react-native (different prefab between RN 0.75 and RN 0.76)
|
|
76
|
+
if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
|
|
77
|
+
target_link_libraries(
|
|
78
|
+
NitroOnnxSpeech
|
|
79
|
+
ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
|
|
80
|
+
)
|
|
81
|
+
else()
|
|
82
|
+
target_link_libraries(
|
|
83
|
+
NitroOnnxSpeech
|
|
84
|
+
ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
|
|
85
|
+
)
|
|
86
|
+
endif()
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
///
|
|
2
|
+
/// NitroOnnxSpeech+autolinking.gradle
|
|
3
|
+
/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
|
|
4
|
+
/// https://github.com/mrousavy/nitro
|
|
5
|
+
/// Copyright © Marc Rousavy @ Margelo
|
|
6
|
+
///
|
|
7
|
+
|
|
8
|
+
/// This is a Gradle file that adds all files generated by Nitrogen
|
|
9
|
+
/// to the current Gradle project.
|
|
10
|
+
///
|
|
11
|
+
/// To use it, add this to your build.gradle:
|
|
12
|
+
/// ```gradle
|
|
13
|
+
/// apply from: '../nitrogen/generated/android/NitroOnnxSpeech+autolinking.gradle'
|
|
14
|
+
/// ```
|
|
15
|
+
|
|
16
|
+
logger.warn("[NitroModules] 🔥 NitroOnnxSpeech is boosted by nitro!")
|
|
17
|
+
|
|
18
|
+
android {
|
|
19
|
+
sourceSets {
|
|
20
|
+
main {
|
|
21
|
+
java.srcDirs += [
|
|
22
|
+
// Nitrogen files
|
|
23
|
+
"${project.projectDir}/../nitrogen/generated/android/kotlin"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|