react-native-wakeword-sid 1.1.94 → 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
- a6c17a458be87fed4734db78354ac08b keyworddetection-1.0.0.aar
1
+ 3993cf59d71c11eca4d70303fc49afc8 keyworddetection-1.0.0.aar
@@ -1 +1 @@
1
- a9593015054854d1e6dd3da19b26f888fdac85f9 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.94",
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),