react-native-wakeword-sid 1.1.93 → 1.1.95

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.
@@ -1 +1 @@
1
- f063ba6579754604779869af909dea31 keyworddetection-1.0.0.aar
1
+ 3993cf59d71c11eca4d70303fc49afc8 keyworddetection-1.0.0.aar
@@ -1 +1 @@
1
- 7b41646bd4136dfdf843b8bea6d844ab45e6de5f keyworddetection-1.0.0.aar
1
+ 6fccffe87df06a250324662b3a025bff29f583d9 keyworddetection-1.0.0.aar
@@ -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.93",
3
+ "version": "1.1.95",
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),