react-native-davoice 1.0.4

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 (67) hide show
  1. package/README.md +319 -0
  2. package/TTSRNBridge.podspec +38 -0
  3. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  4. package/android/.gradle/8.9/dependencies-accessors/gc.properties +0 -0
  5. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  6. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  7. package/android/.gradle/8.9/gc.properties +0 -0
  8. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  9. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  10. package/android/.gradle/vcs-1/gc.properties +0 -0
  11. package/android/build.gradle +47 -0
  12. package/android/libs/com/davoice/tts/1.0.0/tts-1.0.0.aar +0 -0
  13. package/android/libs/com/davoice/tts/1.0.0/tts-1.0.0.aar.md5 +1 -0
  14. package/android/libs/com/davoice/tts/1.0.0/tts-1.0.0.aar.sha1 +1 -0
  15. package/android/libs/com/davoice/tts/1.0.0/tts-1.0.0.pom +38 -0
  16. package/android/libs/com/davoice/tts/1.0.0/tts-1.0.0.pom.md5 +1 -0
  17. package/android/libs/com/davoice/tts/1.0.0/tts-1.0.0.pom.sha1 +1 -0
  18. package/android/settings.gradle +2 -0
  19. package/android/src/main/AndroidManifest.xml +14 -0
  20. package/android/src/main/java/com/davoice/rn/DaVoicePackage.java +29 -0
  21. package/android/src/main/java/com/davoice/stt/rn/STTModule.kt +208 -0
  22. package/android/src/main/java/com/davoice/tts/rn/DaVoiceTTSBridge.java +733 -0
  23. package/android/src/main/libs/MyLibrary-release.aar +0 -0
  24. package/app.plugin.js +60 -0
  25. package/ios/STTRNBridge/STTBridge.h +7 -0
  26. package/ios/STTRNBridge/STTBridge.m +130 -0
  27. package/ios/SpeechBridge/SpeechBridge.h +7 -0
  28. package/ios/SpeechBridge/SpeechBridge.m +761 -0
  29. package/ios/TTSRNBridge/DaVoiceTTSBridge.h +7 -0
  30. package/ios/TTSRNBridge/DaVoiceTTSBridge.m +177 -0
  31. package/ios/TTSRNBridge/DavoiceTTS.xcframework/Info.plist +44 -0
  32. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64/DavoiceTTS.framework/DavoiceTTS +0 -0
  33. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64/DavoiceTTS.framework/Headers/DavoiceTTS-Swift.h +424 -0
  34. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64/DavoiceTTS.framework/Info.plist +0 -0
  35. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64/DavoiceTTS.framework/Modules/DavoiceTTS.swiftmodule/arm64-apple-ios.abi.json +13253 -0
  36. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64/DavoiceTTS.framework/Modules/DavoiceTTS.swiftmodule/arm64-apple-ios.private.swiftinterface +213 -0
  37. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64/DavoiceTTS.framework/Modules/DavoiceTTS.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  38. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64/DavoiceTTS.framework/Modules/DavoiceTTS.swiftmodule/arm64-apple-ios.swiftinterface +213 -0
  39. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64/DavoiceTTS.framework/Modules/module.modulemap +4 -0
  40. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/DavoiceTTS +0 -0
  41. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/Headers/DavoiceTTS-Swift.h +844 -0
  42. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/Info.plist +0 -0
  43. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/Modules/DavoiceTTS.swiftmodule/arm64-apple-ios-simulator.abi.json +13253 -0
  44. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/Modules/DavoiceTTS.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +213 -0
  45. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/Modules/DavoiceTTS.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  46. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/Modules/DavoiceTTS.swiftmodule/arm64-apple-ios-simulator.swiftinterface +213 -0
  47. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/Modules/DavoiceTTS.swiftmodule/x86_64-apple-ios-simulator.abi.json +13253 -0
  48. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/Modules/DavoiceTTS.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +213 -0
  49. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/Modules/DavoiceTTS.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  50. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/Modules/DavoiceTTS.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +213 -0
  51. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/Modules/module.modulemap +4 -0
  52. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/_CodeSignature/CodeDirectory +0 -0
  53. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/_CodeSignature/CodeRequirements +0 -0
  54. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/_CodeSignature/CodeRequirements-1 +0 -0
  55. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/_CodeSignature/CodeResources +282 -0
  56. package/ios/TTSRNBridge/DavoiceTTS.xcframework/ios-arm64_x86_64-simulator/DavoiceTTS.framework/_CodeSignature/CodeSignature +0 -0
  57. package/ios/TTSRNBridge/libphonemes.a +0 -0
  58. package/ios/TTSRNBridge/libucd.a +0 -0
  59. package/package.json +46 -0
  60. package/react-native.config.js +10 -0
  61. package/speech/index.ts +1055 -0
  62. package/stt/index.d.ts +54 -0
  63. package/stt/index.ts +222 -0
  64. package/tts/DaVoiceTTSBridge.d.ts +18 -0
  65. package/tts/DaVoiceTTSBridge.js +71 -0
  66. package/tts/index.d.ts +3 -0
  67. package/tts/index.js +4 -0
package/stt/index.d.ts ADDED
@@ -0,0 +1,54 @@
1
+ type SpeechStartEvent = {};
2
+ type SpeechEndEvent = {};
3
+ type SpeechRecognizedEvent = {
4
+ isFinal: boolean;
5
+ };
6
+ type SpeechErrorEvent = {
7
+ error: {
8
+ code?: string;
9
+ message?: string;
10
+ };
11
+ };
12
+ type SpeechResultsEvent = {
13
+ value: string[];
14
+ };
15
+ type SpeechVolumeChangeEvent = {
16
+ value: number;
17
+ };
18
+ type SpeechEvents = {
19
+ onSpeechStart?: (e: SpeechStartEvent) => void;
20
+ onSpeechRecognized?: (e: SpeechRecognizedEvent) => void;
21
+ onSpeechEnd?: (e: SpeechEndEvent) => void;
22
+ onSpeechError?: (e: SpeechErrorEvent) => void;
23
+ onSpeechResults?: (e: SpeechResultsEvent) => void;
24
+ onSpeechPartialResults?: (e: SpeechResultsEvent) => void;
25
+ onSpeechVolumeChanged?: (e: SpeechVolumeChangeEvent) => void;
26
+ };
27
+ declare class RCTSTT {
28
+ private _loaded;
29
+ private _listeners;
30
+ private _events;
31
+ constructor();
32
+ /** Remove static handlers on the native module (parity with old Voice bridge). */
33
+ removeAllListeners(): void;
34
+ /** Destroy/native teardown (parity with old API). */
35
+ destroy(): Promise<void>;
36
+ /** Start recognition — mirrors old `.start(locale, options?)` */
37
+ start(locale: string, options?: Record<string, any>): Promise<void>;
38
+ stop(): Promise<void>;
39
+ cancel(): Promise<void>;
40
+ setLicense(licenseKey: string): Promise<boolean>;
41
+ isLicenseValid(licenseKey: string): Promise<boolean>;
42
+ isAvailable(): Promise<0 | 1>;
43
+ isRecognizing(): Promise<0 | 1>;
44
+ set onSpeechStart(fn: (e: SpeechStartEvent) => void);
45
+ set onSpeechRecognized(fn: (e: SpeechRecognizedEvent) => void);
46
+ set onSpeechEnd(fn: (e: SpeechEndEvent) => void);
47
+ set onSpeechError(fn: (e: SpeechErrorEvent) => void);
48
+ set onSpeechResults(fn: (e: SpeechResultsEvent) => void);
49
+ set onSpeechPartialResults(fn: (e: SpeechResultsEvent) => void);
50
+ set onSpeechVolumeChanged(fn: (e: SpeechVolumeChangeEvent) => void);
51
+ }
52
+ export type { SpeechEndEvent, SpeechErrorEvent, SpeechEvents, SpeechStartEvent, SpeechRecognizedEvent, SpeechResultsEvent, SpeechVolumeChangeEvent, };
53
+ declare const _default: RCTSTT;
54
+ export default _default;
package/stt/index.ts ADDED
@@ -0,0 +1,222 @@
1
+ // stt/index.ts
2
+ import { NativeModules, NativeEventEmitter, Platform } from 'react-native';
3
+
4
+ // Prefer new names; gracefully fall back to legacy names during migration.
5
+ const STTNative =
6
+ NativeModules.STT ||
7
+ NativeModules.RCTSTT ||
8
+ NativeModules.Voice ||
9
+ NativeModules.RCTVoice;
10
+
11
+ if (STTNative) {
12
+ console.log('STTNative loaded:', Object.keys(STTNative));
13
+ } else {
14
+ console.error('STT native module is not linked correctly.');
15
+ }
16
+
17
+ type SpeechStartEvent = { /* keep your shape if you had TS types */ };
18
+ type SpeechEndEvent = {};
19
+ type SpeechRecognizedEvent = { isFinal: boolean };
20
+ type SpeechErrorEvent = { error: { code?: string; message?: string } };
21
+ type SpeechResultsEvent = { value: string[] };
22
+ type SpeechVolumeChangeEvent = { value: number };
23
+
24
+ type SpeechEvents = {
25
+ onSpeechStart?: (e: SpeechStartEvent) => void;
26
+ onSpeechRecognized?: (e: SpeechRecognizedEvent) => void;
27
+ onSpeechEnd?: (e: SpeechEndEvent) => void;
28
+ onSpeechError?: (e: SpeechErrorEvent) => void;
29
+ onSpeechResults?: (e: SpeechResultsEvent) => void;
30
+ onSpeechPartialResults?: (e: SpeechResultsEvent) => void;
31
+ onSpeechVolumeChanged?: (e: SpeechVolumeChangeEvent) => void;
32
+ };
33
+
34
+ const sttEmitter =
35
+ Platform.OS !== 'web' && STTNative ? new NativeEventEmitter(STTNative) : null;
36
+
37
+ type SpeechEventName = keyof Required<SpeechEvents>;
38
+
39
+ class RCTSTT {
40
+ private _loaded: boolean;
41
+ private _listeners: Array<{ remove: () => void }> | null;
42
+ private _events: Required<SpeechEvents>;
43
+
44
+ constructor() {
45
+ this._loaded = false;
46
+ this._listeners = null;
47
+ this._events = {
48
+ onSpeechStart: () => {},
49
+ onSpeechRecognized: () => {},
50
+ onSpeechEnd: () => {},
51
+ onSpeechError: () => {},
52
+ onSpeechResults: () => {},
53
+ onSpeechPartialResults: () => {},
54
+ onSpeechVolumeChanged: () => {},
55
+ };
56
+ }
57
+
58
+ /** Remove static handlers on the native module (parity with old Voice bridge). */
59
+ removeAllListeners() {
60
+ if (!STTNative) return;
61
+ STTNative.onSpeechStart = undefined;
62
+ STTNative.onSpeechRecognized = undefined;
63
+ STTNative.onSpeechEnd = undefined;
64
+ STTNative.onSpeechError = undefined;
65
+ STTNative.onSpeechResults = undefined;
66
+ STTNative.onSpeechPartialResults = undefined;
67
+ STTNative.onSpeechVolumeChanged = undefined;
68
+ }
69
+
70
+ /** Destroy/native teardown (parity with old API). */
71
+ destroy(): Promise<void> {
72
+ if (!this._loaded && !this._listeners) {
73
+ return Promise.resolve();
74
+ }
75
+ return new Promise((resolve, reject) => {
76
+ if (!STTNative?.destroySpeech) {
77
+ // Fallback: tolerate older native
78
+ this._listeners?.forEach(l => l.remove?.());
79
+ this._listeners = null;
80
+ resolve();
81
+ return;
82
+ }
83
+ STTNative.destroySpeech((error: string) => {
84
+ if (error) {
85
+ reject(new Error(error));
86
+ } else {
87
+ this._listeners?.forEach(l => l.remove?.());
88
+ this._listeners = null;
89
+ resolve();
90
+ }
91
+ });
92
+ });
93
+ }
94
+
95
+ /** Start recognition — mirrors old `.start(locale, options?)` */
96
+ start(locale: string, options: Record<string, any> = {}) {
97
+ if (!this._loaded && !this._listeners && sttEmitter) {
98
+ this._listeners = (Object.keys(this._events) as SpeechEventName[]).map(
99
+ (key: SpeechEventName) => sttEmitter.addListener(key, this._events[key]),
100
+ );
101
+ }
102
+ return new Promise<void>((resolve, reject) => {
103
+ const cb = (error: string) => (error ? reject(new Error(error)) : resolve());
104
+
105
+ if (Platform.OS === 'android' && STTNative?.startSpeech) {
106
+ // Keep Android parity with your previous voice bridge contract
107
+ STTNative.startSpeech(
108
+ locale,
109
+ {
110
+ EXTRA_LANGUAGE_MODEL: 'LANGUAGE_MODEL_FREE_FORM',
111
+ EXTRA_MAX_RESULTS: 5,
112
+ EXTRA_PARTIAL_RESULTS: true,
113
+ REQUEST_PERMISSIONS_AUTO: true,
114
+ ...options,
115
+ },
116
+ cb,
117
+ );
118
+ } else if (STTNative?.startSpeech) {
119
+ STTNative.startSpeech(locale, cb);
120
+ } else if (STTNative?.start) {
121
+ STTNative.start(locale, cb);
122
+ } else {
123
+ reject(new Error('STTNative.startSpeech not available'));
124
+ }
125
+ });
126
+ }
127
+
128
+ stop(): Promise<void> {
129
+ if (!this._loaded && !this._listeners) return Promise.resolve();
130
+ return new Promise((resolve, reject) => {
131
+ if (!STTNative?.stopSpeech) return resolve();
132
+ STTNative.stopSpeech((error: string) => {
133
+ error ? reject(new Error(error)) : resolve();
134
+ });
135
+ });
136
+ }
137
+
138
+ cancel(): Promise<void> {
139
+ if (!this._loaded && !this._listeners) return Promise.resolve();
140
+ return new Promise((resolve, reject) => {
141
+ if (!STTNative?.cancelSpeech) return resolve();
142
+ STTNative.cancelSpeech((error: string) => {
143
+ error ? reject(new Error(error)) : resolve();
144
+ });
145
+ });
146
+ }
147
+
148
+ setLicense(licenseKey: string): Promise<boolean> {
149
+ return new Promise((resolve, reject) => {
150
+ if (!STTNative?.setLicense) {
151
+ reject(new Error('STTNative.setLicense not available'));
152
+ return;
153
+ }
154
+ STTNative.setLicense(licenseKey).then(resolve).catch(reject);
155
+ });
156
+ }
157
+
158
+ isLicenseValid(licenseKey: string): Promise<boolean> {
159
+ return new Promise((resolve, reject) => {
160
+ if (!STTNative?.isLicenseValid) {
161
+ reject(new Error('STTNative.isLicenseValid not available'));
162
+ return;
163
+ }
164
+ STTNative.isLicenseValid(licenseKey).then(resolve).catch(reject);
165
+ });
166
+ }
167
+
168
+ isAvailable(): Promise<0 | 1> {
169
+ return new Promise((resolve, reject) => {
170
+ if (!STTNative?.isSpeechAvailable) {
171
+ // Best effort fallback
172
+ resolve(1);
173
+ return;
174
+ }
175
+ STTNative.isSpeechAvailable((isAvailable: 0 | 1, error: string) => {
176
+ error ? reject(new Error(error)) : resolve(isAvailable);
177
+ });
178
+ });
179
+ }
180
+
181
+ isRecognizing(): Promise<0 | 1> {
182
+ return new Promise(resolve => {
183
+ if (!STTNative?.isRecognizing) return resolve(0);
184
+ STTNative.isRecognizing((isRecognizing: 0 | 1) => resolve(isRecognizing));
185
+ });
186
+ }
187
+
188
+ // Event setters (unchanged names so your app code stays the same)
189
+ set onSpeechStart(fn: (e: SpeechStartEvent) => void) {
190
+ this._events.onSpeechStart = fn;
191
+ }
192
+ set onSpeechRecognized(fn: (e: SpeechRecognizedEvent) => void) {
193
+ this._events.onSpeechRecognized = fn;
194
+ }
195
+ set onSpeechEnd(fn: (e: SpeechEndEvent) => void) {
196
+ this._events.onSpeechEnd = fn;
197
+ }
198
+ set onSpeechError(fn: (e: SpeechErrorEvent) => void) {
199
+ this._events.onSpeechError = fn;
200
+ }
201
+ set onSpeechResults(fn: (e: SpeechResultsEvent) => void) {
202
+ this._events.onSpeechResults = fn;
203
+ }
204
+ set onSpeechPartialResults(fn: (e: SpeechResultsEvent) => void) {
205
+ this._events.onSpeechPartialResults = fn;
206
+ }
207
+ set onSpeechVolumeChanged(fn: (e: SpeechVolumeChangeEvent) => void) {
208
+ this._events.onSpeechVolumeChanged = fn;
209
+ }
210
+ }
211
+
212
+ export type {
213
+ SpeechEndEvent,
214
+ SpeechErrorEvent,
215
+ SpeechEvents,
216
+ SpeechStartEvent,
217
+ SpeechRecognizedEvent,
218
+ SpeechResultsEvent,
219
+ SpeechVolumeChangeEvent,
220
+ };
221
+
222
+ export default new RCTSTT();
@@ -0,0 +1,18 @@
1
+ export class DaVoiceTTSInstance {
2
+ constructor(instanceId?: string);
3
+ instanceId: string;
4
+ _emitter: NativeEventEmitter | null;
5
+ _subs: any[];
6
+ initTTS(modelOrConfig: any): Promise<any>;
7
+ setLicense(licenseKey: any): Promise<any>;
8
+ isLicenseValid(licenseKey: any): Promise<any>;
9
+ speak(text: any, speakerId?: number): Promise<any>;
10
+ stopSpeaking(): Promise<any>;
11
+ destroy(): Promise<any>;
12
+ /**
13
+ * Subscribe to “finished speaking the last WAV of the latest synthesize_top call”.
14
+ * Returns an unsubscribe function.
15
+ */
16
+ onFinishedSpeaking(callback: any): () => void;
17
+ }
18
+ import { NativeEventEmitter } from 'react-native';
@@ -0,0 +1,71 @@
1
+ import { NativeModules, NativeEventEmitter, Platform } from 'react-native';
2
+
3
+ const { DaVoiceTTSBridge } = NativeModules;
4
+
5
+ if (DaVoiceTTSBridge) {
6
+ console.log('DaVoiceTTSBridge is loaded:', DaVoiceTTSBridge);
7
+ } else {
8
+ console.error('DaVoiceTTSBridge is not linked correctly.');
9
+ }
10
+
11
+ export class DaVoiceTTSInstance {
12
+ instanceId; // optional future use
13
+
14
+ constructor(instanceId = 'default') {
15
+ this.instanceId = instanceId;
16
+ this._emitter = DaVoiceTTSBridge ? new NativeEventEmitter(DaVoiceTTSBridge) : null;
17
+ this._subs = [];
18
+ }
19
+
20
+ async initTTS(modelOrConfig) {
21
+ const config =
22
+ typeof modelOrConfig === 'string'
23
+ ? { model: modelOrConfig }
24
+ : modelOrConfig || {};
25
+ if (!config.model) {
26
+ throw new Error("initTTS: missing 'model' (expected string path or { model: string })");
27
+ }
28
+ return await DaVoiceTTSBridge.initTTS(modelOrConfig);
29
+ }
30
+
31
+ async setLicense(licenseKey) {
32
+ return await DaVoiceTTSBridge.setLicense(licenseKey);
33
+ }
34
+
35
+ async isLicenseValid(licenseKey) {
36
+ return await DaVoiceTTSBridge.isLicenseValid(licenseKey);
37
+ }
38
+
39
+ async speak(text, speakerId = 0) {
40
+ return await DaVoiceTTSBridge.speak(text, speakerId);
41
+ }
42
+
43
+ async stopSpeaking() {
44
+ return await DaVoiceTTSBridge.stopSpeaking();
45
+ }
46
+
47
+ async destroy() {
48
+ const res = await DaVoiceTTSBridge.destroy();
49
+ // Clean up JS listeners on destroy (good hygiene)
50
+ this._subs.forEach(s => {
51
+ try { s.remove(); } catch {}
52
+ });
53
+ this._subs = [];
54
+ return res;
55
+ }
56
+ /**
57
+ * Subscribe to “finished speaking the last WAV of the latest synthesize_top call”.
58
+ * Returns an unsubscribe function.
59
+ */
60
+ onFinishedSpeaking(callback) {
61
+ if (!this._emitter) {
62
+ throw new Error('NativeEventEmitter not available (bridge missing).');
63
+ }
64
+ const sub = this._emitter.addListener('onFinishedSpeaking', callback);
65
+ this._subs.push(sub);
66
+ return () => {
67
+ try { sub.remove(); } catch {}
68
+ this._subs = this._subs.filter(s => s !== sub);
69
+ };
70
+ }
71
+ }
package/tts/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export { DaVoiceTTSInstance };
2
+ export default DaVoiceTTSInstance;
3
+ import { DaVoiceTTSInstance } from './DaVoiceTTSBridge';
package/tts/index.js ADDED
@@ -0,0 +1,4 @@
1
+ import { DaVoiceTTSInstance } from './DaVoiceTTSBridge';
2
+
3
+ export { DaVoiceTTSInstance };
4
+ export default DaVoiceTTSInstance;