react-native-wakeword-sid 1.1.94 → 1.1.96

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.
@@ -308,6 +308,60 @@ public class SpeakerIdRNBridge extends ReactContextBaseJavaModule {
308
308
  });
309
309
  }
310
310
 
311
+ // ======= WWD: create instance tuned for wake-word =======
312
+ @ReactMethod
313
+ public void createInstanceWWD(String instanceId, Promise promise) {
314
+ if (instances.containsKey(instanceId)) {
315
+ promise.reject("InstanceExists", "Instance already exists: " + instanceId);
316
+ return;
317
+ }
318
+ exec.submit(() -> {
319
+ try {
320
+ SpeakerIdApi api = SpeakerIdApi.createWWD(reactContext);
321
+ synchronized (instances) { instances.put(instanceId, api); }
322
+ main.post(() -> promise.resolve(true));
323
+ } catch (Exception e) {
324
+ main.post(() -> promise.reject("CreateWWDError", e.getMessage(), e));
325
+ }
326
+ });
327
+ }
328
+
329
+ // ======= WWD: onboard from mic (embNum x 1s) =======
330
+ @ReactMethod
331
+ public void onboardFromMicrophoneWWD(String instanceId, int embNum, double maxMillis, Promise promise) {
332
+ SpeakerIdApi api = instances.get(instanceId);
333
+ if (api == null) { promise.reject("InstanceNotFound", instanceId); return; }
334
+ exec.submit(() -> {
335
+ try {
336
+ OnboardingResult r = api.onboardFromMicrophoneWWD(embNum, (long)maxMillis);
337
+ WritableMap out = toJs(r);
338
+ main.post(() -> promise.resolve(out));
339
+ } catch (SecurityException se) {
340
+ main.post(() -> promise.reject("MicPermission", "RECORD_AUDIO permission missing", se));
341
+ } catch (Exception e) {
342
+ main.post(() -> promise.reject("OnboardWWDError", e.getMessage(), e));
343
+ }
344
+ });
345
+ }
346
+
347
+ // ======= WWD: verify from mic (exactly 1s) =======
348
+ @ReactMethod
349
+ public void verifyFromMicrophoneWWD(String instanceId, double maxMillis, Promise promise) {
350
+ SpeakerIdApi api = instances.get(instanceId);
351
+ if (api == null) { promise.reject("InstanceNotFound", instanceId); return; }
352
+ exec.submit(() -> {
353
+ try {
354
+ VerificationResult r = api.verifyFromMicrophoneWWD((long)maxMillis);
355
+ WritableMap out = (r == null) ? null : toJs(r);
356
+ main.post(() -> promise.resolve(out));
357
+ } catch (SecurityException se) {
358
+ main.post(() -> promise.reject("MicPermission", "RECORD_AUDIO permission missing", se));
359
+ } catch (Exception e) {
360
+ main.post(() -> promise.reject("VerifyWWDError", e.getMessage(), e));
361
+ }
362
+ });
363
+ }
364
+
311
365
  // -------------------- Export helpers --------------------
312
366
 
313
367
  @ReactMethod
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-wakeword-sid",
3
- "version": "1.1.94",
3
+ "version": "1.1.96",
4
4
  "description": "Voice/Wake-word detection library for React Native",
5
5
  "main": "wakewords/index.js",
6
6
  "types": "wakewords/index.d.ts",
@@ -6,6 +6,9 @@ export class SpeakerIdInstance {
6
6
  * Lifecycle
7
7
  */
8
8
  createInstance(): Promise<any>;
9
+ createInstanceWWD(): Promise<any>;
10
+ onboardFromMicrophoneWWD(embNum?: number, maxMillis?: number): Promise<any>;
11
+ verifyFromMicrophoneWWD(maxMillis?: number): Promise<any>;
9
12
  destroyInstance(): Promise<any>;
10
13
  /**
11
14
  * Onboarding
@@ -33,6 +33,23 @@ export class SpeakerIdInstance {
33
33
  return SpeakerIdRNBridge.createInstance(this.instanceId);
34
34
  }
35
35
 
36
+ async createInstanceWWD() {
37
+ ensureAndroid();
38
+ return SpeakerIdRNBridge.createInstanceWWD(this.instanceId);
39
+ }
40
+
41
+ async onboardFromMicrophoneWWD(embNum = 3, maxMillis = 8000) {
42
+ ensureAndroid();
43
+ // Resolves to { clusterSize, embeddingDim }
44
+ return SpeakerIdRNBridge.onboardFromMicrophoneWWD(this.instanceId, embNum, maxMillis);
45
+ }
46
+
47
+ async verifyFromMicrophoneWWD(maxMillis = 5000) {
48
+ ensureAndroid();
49
+ // Resolves to { fullSec, voicedSec, bestScore, bestStrategy, bestTargetLabel, perTargetStrategy }
50
+ return SpeakerIdRNBridge.verifyFromMicrophoneWWD(this.instanceId, maxMillis);
51
+ }
52
+
36
53
  async destroyInstance() {
37
54
  ensureAndroid();
38
55
  return SpeakerIdRNBridge.destroyInstance(this.instanceId);
@@ -1,5 +1,8 @@
1
1
  export function createSpeakerIdInstance(instanceId?: string): Promise<{
2
2
  createInstance: () => any;
3
+ createInstanceWWD: () => any;
4
+ onboardFromMicrophoneWWD: (embNum: any, ms: any) => any;
5
+ verifyFromMicrophoneWWD: (ms: any) => any;
3
6
  initVerificationUsingDefaults: () => any;
4
7
  initVerificationWithFiles: (m: any, c: any) => any;
5
8
  onboardFromMicrophone: (ms: any) => any;
@@ -1,8 +1,14 @@
1
+ //speakerid/index.js
1
2
  import { NativeModules } from 'react-native';
2
3
  const { SpeakerIdRNBridge } = NativeModules;
3
4
 
4
5
  export const createSpeakerIdInstance = async (instanceId = 'sid1') => ({
5
6
  createInstance: () => SpeakerIdRNBridge.createInstance(instanceId),
7
+ createInstanceWWD: () => SpeakerIdRNBridge.createInstanceWWD(instanceId),
8
+ onboardFromMicrophoneWWD: (embNum, ms) =>
9
+ SpeakerIdRNBridge.onboardFromMicrophoneWWD(instanceId, embNum ?? 3, ms ?? 8000),
10
+ verifyFromMicrophoneWWD: (ms) =>
11
+ SpeakerIdRNBridge.verifyFromMicrophoneWWD(instanceId, ms ?? 5000),
6
12
  initVerificationUsingDefaults: () => SpeakerIdRNBridge.initVerificationUsingDefaults(instanceId),
7
13
  initVerificationWithFiles: (m, c) => SpeakerIdRNBridge.initVerificationWithFiles(instanceId, m, c),
8
14
  onboardFromMicrophone: (ms) => SpeakerIdRNBridge.onboardFromMicrophone(instanceId, ms ?? 12000),