whisper.rn 0.2.0 → 0.2.1

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/README.md CHANGED
@@ -57,7 +57,7 @@ const { result } = await promise
57
57
  Use realtime transcribe:
58
58
 
59
59
  ```js
60
- const { stop, subscribe } = whisperContext.transcribeRealtime(options)
60
+ const { stop, subscribe } = await whisperContext.transcribeRealtime(options)
61
61
 
62
62
  subscribe(evt => {
63
63
  const { isCapturing, data, processTime, recordingTime } = evt
@@ -49,9 +49,12 @@ public class WhisperContext {
49
49
  private int bufferSize;
50
50
  private short[] buffer16;
51
51
  private int nSamples = 0;
52
+ private int nSamplesTranscribing = 0;
52
53
  private boolean isCapturing = false;
54
+ private boolean isStoppedByAction = false;
53
55
  private boolean isTranscribing = false;
54
56
  private boolean isRealtime = false;
57
+ private Thread fullHandler = null;
55
58
 
56
59
  public WhisperContext(int id, ReactApplicationContext reactContext, long context) {
57
60
  this.id = id;
@@ -81,8 +84,11 @@ public class WhisperContext {
81
84
 
82
85
  this.jobId = jobId;
83
86
  isCapturing = true;
87
+ isStoppedByAction = false;
84
88
  isRealtime = true;
85
89
  nSamples = 0;
90
+ nSamplesTranscribing = 0;
91
+ fullHandler = null;
86
92
 
87
93
  recorder.startRecording();
88
94
 
@@ -91,68 +97,38 @@ public class WhisperContext {
91
97
  public void run() {
92
98
  try {
93
99
  short[] buffer = new short[bufferSize];
94
- Thread fullHandler = null;
95
100
  while (isCapturing) {
96
101
  try {
97
102
  int n = recorder.read(buffer, 0, bufferSize);
98
103
  if (n == 0) continue;
99
104
 
100
105
  if (nSamples + n > maxAudioSec * SAMPLE_RATE) {
101
- // Full, ignore data
106
+ // Full, stop capturing
102
107
  isCapturing = false;
103
- if (!isTranscribing)
108
+ if (!isTranscribing && nSamples == nSamplesTranscribing) {
104
109
  emitTranscribeEvent("@RNWhisper_onRealtimeTranscribeEnd", Arguments.createMap());
110
+ } else {
111
+ // wait previous handler to finish
112
+ fullHandler.join();
113
+ fullTranscribeSamples(options, true);
114
+ }
105
115
  break;
106
116
  }
117
+
118
+ // Append to buffer
107
119
  nSamples += n;
108
120
  for (int i = 0; i < n; i++) {
109
121
  buffer16[nSamples + i] = buffer[i];
110
122
  }
111
- if (!isTranscribing && nSamples > SAMPLE_RATE / 2) {
112
- isTranscribing = true;
113
- Log.d(NAME, "Start transcribing realtime: " + nSamples);
114
- fullHandler = new Thread(new Runnable() {
115
- @Override
116
- public void run() {
117
- if (!isCapturing) return;
118
-
119
- // convert I16 to F32
120
- float[] nSamplesBuffer32 = new float[nSamples];
121
- for (int i = 0; i < nSamples; i++) {
122
- nSamplesBuffer32[i] = buffer16[i] / 32768.0f;
123
- }
124
-
125
- int timeStart = (int) System.currentTimeMillis();
126
- int code = full(jobId, options, nSamplesBuffer32, nSamples);
127
- int timeEnd = (int) System.currentTimeMillis();
128
- int timeRecording = (int) (nSamples / SAMPLE_RATE * 1000);
129
-
130
- WritableMap payload = Arguments.createMap();
131
- payload.putBoolean("isCapturing", isCapturing);
132
- payload.putInt("code", code);
133
- payload.putInt("processTime", timeEnd - timeStart);
134
- payload.putInt("recordingTime", timeRecording);
135
-
136
- if (code == 0) {
137
- payload.putMap("data", getTextSegments());
138
- emitTranscribeEvent("@RNWhisper_onRealtimeTranscribe", payload);
139
- } else {
140
- payload.putString("error", "Transcribe failed with code " + code);
141
- emitTranscribeEvent("@RNWhisper_onRealtimeTranscribe", payload);
142
- }
143
-
144
- if (!isCapturing) {
145
- emitTranscribeEvent("@RNWhisper_onRealtimeTranscribeEnd", Arguments.createMap());
146
- }
147
- isTranscribing = false;
148
- }
149
- });
150
- fullHandler.start();
151
- }
123
+
124
+ fullTranscribeSamples(options, false);
152
125
  } catch (Exception e) {
153
126
  Log.e(NAME, "Error transcribing realtime: " + e.getMessage());
154
127
  }
155
128
  }
129
+ if (!isTranscribing) {
130
+ emitTranscribeEvent("@RNWhisper_onRealtimeTranscribeEnd", Arguments.createMap());
131
+ }
156
132
  if (fullHandler != null) {
157
133
  fullHandler.join(); // Wait for full transcribe to finish
158
134
  }
@@ -165,10 +141,61 @@ public class WhisperContext {
165
141
  }
166
142
  }
167
143
  }).start();
168
-
169
144
  return state;
170
145
  }
171
146
 
147
+ private void fullTranscribeSamples(ReadableMap options, boolean skipCapturingCheck) {
148
+ if (!isTranscribing && nSamples > SAMPLE_RATE / 2) {
149
+ isTranscribing = true;
150
+ fullHandler = new Thread(new Runnable() {
151
+ @Override
152
+ public void run() {
153
+ if (!isCapturing && !skipCapturingCheck) return;
154
+
155
+ nSamplesTranscribing = nSamples;
156
+
157
+ // convert I16 to F32
158
+ float[] nSamplesBuffer32 = new float[nSamplesTranscribing];
159
+ for (int i = 0; i < nSamplesTranscribing; i++) {
160
+ nSamplesBuffer32[i] = buffer16[i] / 32768.0f;
161
+ }
162
+
163
+ Log.d(NAME, "Start transcribing realtime: " + nSamplesTranscribing);
164
+
165
+ int timeStart = (int) System.currentTimeMillis();
166
+ int code = full(jobId, options, nSamplesBuffer32, nSamplesTranscribing);
167
+ int timeEnd = (int) System.currentTimeMillis();
168
+ int timeRecording = (int) (nSamplesTranscribing / SAMPLE_RATE * 1000);
169
+
170
+ WritableMap payload = Arguments.createMap();
171
+ payload.putInt("code", code);
172
+ payload.putInt("processTime", timeEnd - timeStart);
173
+ payload.putInt("recordingTime", timeRecording);
174
+
175
+ if (code == 0) {
176
+ payload.putMap("data", getTextSegments());
177
+ } else {
178
+ payload.putString("error", "Transcribe failed with code " + code);
179
+ }
180
+
181
+ if (isStoppedByAction || !isCapturing && nSamplesTranscribing == nSamples) {
182
+ payload.putBoolean("isCapturing", false);
183
+ payload.putBoolean("isStoppedByAction", isStoppedByAction);
184
+ emitTranscribeEvent("@RNWhisper_onRealtimeTranscribeEnd", payload);
185
+ } else if (code == 0) {
186
+ payload.putBoolean("isCapturing", true);
187
+ emitTranscribeEvent("@RNWhisper_onRealtimeTranscribe", payload);
188
+ } else {
189
+ payload.putBoolean("isCapturing", true);
190
+ emitTranscribeEvent("@RNWhisper_onRealtimeTranscribe", payload);
191
+ }
192
+ isTranscribing = false;
193
+ }
194
+ });
195
+ fullHandler.start();
196
+ }
197
+ }
198
+
172
199
  private void emitTranscribeEvent(final String eventName, final WritableMap payload) {
173
200
  WritableMap event = Arguments.createMap();
174
201
  event.putInt("contextId", WhisperContext.this.id);
@@ -269,6 +296,7 @@ public class WhisperContext {
269
296
  abortTranscribe(jobId);
270
297
  isCapturing = false;
271
298
  isTranscribing = false;
299
+ isStoppedByAction = true;
272
300
  }
273
301
 
274
302
  public void stopCurrentTranscribe() {
@@ -5,6 +5,7 @@
5
5
  #include <cstdlib>
6
6
  #include <sys/sysinfo.h>
7
7
  #include <string>
8
+ #include <thread>
8
9
  #include "whisper.h"
9
10
  #include "rn-whisper.h"
10
11
  #include "ggml.h"
@@ -61,7 +62,7 @@ Java_com_rnwhisper_WhisperContext_fullTranscribe(
61
62
  struct whisper_context *context = reinterpret_cast<struct whisper_context *>(context_ptr);
62
63
  jfloat *audio_data_arr = env->GetFloatArrayElements(audio_data, nullptr);
63
64
 
64
- int max_threads = min(4, get_nprocs());
65
+ int max_threads = min(4, std::thread::hardware_concurrency());
65
66
 
66
67
  LOGI("About to create params");
67
68
 
@@ -18,8 +18,10 @@ typedef struct {
18
18
  bool isTranscribing;
19
19
  bool isRealtime;
20
20
  bool isCapturing;
21
+ bool isStoppedByAction;
21
22
  int maxAudioSec;
22
23
  int nSamples;
24
+ int nSamplesTranscribing;
23
25
  int16_t* audioBufferI16;
24
26
  float* audioBufferF32;
25
27
 
@@ -53,6 +53,9 @@ void AudioInputCallback(void * inUserData,
53
53
 
54
54
  if (!state->isCapturing) {
55
55
  NSLog(@"[RNWhisper] Not capturing, ignoring audio");
56
+ if (!state->isTranscribing) {
57
+ state->transcribeHandler(state->jobId, @"end", @{});
58
+ }
56
59
  return;
57
60
  }
58
61
 
@@ -60,12 +63,17 @@ void AudioInputCallback(void * inUserData,
60
63
  NSLog(@"[RNWhisper] Captured %d new samples", n);
61
64
 
62
65
  if (state->nSamples + n > state->maxAudioSec * WHISPER_SAMPLE_RATE) {
63
- NSLog(@"[RNWhisper] Audio buffer is full, ignoring audio");
66
+ NSLog(@"[RNWhisper] Audio buffer is full, stop capturing");
64
67
  state->isCapturing = false;
65
- if (!state->isTranscribing) {
68
+ [state->mSelf stopAudio];
69
+ if (!state->isTranscribing && state->nSamples == state->nSamplesTranscribing) {
66
70
  state->transcribeHandler(state->jobId, @"end", @{});
71
+ } else if (!state->isTranscribing && state->nSamples != state->nSamplesTranscribing) {
72
+ state->isTranscribing = true;
73
+ dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
74
+ [state->mSelf fullTranscribeSamples:state];
75
+ });
67
76
  }
68
- [state->mSelf stopAudio];
69
77
  return;
70
78
  }
71
79
 
@@ -79,44 +87,58 @@ void AudioInputCallback(void * inUserData,
79
87
  if (!state->isTranscribing) {
80
88
  state->isTranscribing = true;
81
89
  dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
82
- NSLog(@"[RNWhisper] Transcribing %d samples", state->nSamples);
83
- // convert I16 to F32
84
- for (int i = 0; i < state->nSamples; i++) {
85
- state->audioBufferF32[i] = (float)state->audioBufferI16[i] / 32768.0f;
86
- }
87
- CFTimeInterval timeStart = CACurrentMediaTime();
88
-
89
- int code = [state->mSelf fullTranscribe:state->jobId audioData:state->audioBufferF32 audioDataCount:state->nSamples options:state->options];
90
-
91
- CFTimeInterval timeEnd = CACurrentMediaTime();
92
- const float timeRecording = (float) state->nSamples / (float) state->dataFormat.mSampleRate;
93
- if (code == 0) {
94
- state->transcribeHandler(state->jobId, @"transcribe", @{
95
- @"isCapturing": @(state->isCapturing),
96
- @"code": [NSNumber numberWithInt:code],
97
- @"data": [state->mSelf getTextSegments],
98
- @"processTime": [NSNumber numberWithInt:(timeEnd - timeStart) * 1E3],
99
- @"recordingTime": [NSNumber numberWithInt:timeRecording * 1E3],
100
- });
101
- state->isTranscribing = false;
102
- return;
103
- }
104
- state->transcribeHandler(state->jobId, @"transcribe", @{
105
- @"isCapturing": @(state->isCapturing),
106
- @"code": [NSNumber numberWithInt:code],
107
- @"error": [NSString stringWithFormat:@"Transcribe failed with code %d", code],
108
- @"processTime": [NSNumber numberWithDouble:timeEnd - timeStart],
109
- @"recordingTime": [NSNumber numberWithFloat:timeRecording],
110
- });
111
- if (!state->isCapturing) {
112
- NSLog(@"[RNWhisper] Transcribe end");
113
- state->transcribeHandler(state->jobId, @"end", @{});
114
- }
115
- state->isTranscribing = false;
90
+ [state->mSelf fullTranscribeSamples:state];
116
91
  });
117
92
  }
118
93
  }
119
94
 
95
+ - (void)fullTranscribeSamples:(RNWhisperContextRecordState*) state {
96
+ state->nSamplesTranscribing = state->nSamples;
97
+ NSLog(@"[RNWhisper] Transcribing %d samples", state->nSamplesTranscribing);
98
+
99
+ // convert I16 to F32
100
+ for (int i = 0; i < state->nSamplesTranscribing; i++) {
101
+ state->audioBufferF32[i] = (float)state->audioBufferI16[i] / 32768.0f;
102
+ }
103
+ CFTimeInterval timeStart = CACurrentMediaTime();
104
+ int code = [state->mSelf fullTranscribe:state->jobId audioData:state->audioBufferF32 audioDataCount:state->nSamplesTranscribing options:state->options];
105
+ CFTimeInterval timeEnd = CACurrentMediaTime();
106
+ const float timeRecording = (float) state->nSamplesTranscribing / (float) state->dataFormat.mSampleRate;
107
+
108
+ NSDictionary* base = @{
109
+ @"code": [NSNumber numberWithInt:code],
110
+ @"processTime": [NSNumber numberWithInt:(timeEnd - timeStart) * 1E3],
111
+ @"recordingTime": [NSNumber numberWithInt:timeRecording * 1E3],
112
+ };
113
+ NSMutableDictionary* result = [base mutableCopy];
114
+
115
+ if (code == 0) {
116
+ result[@"data"] = [state->mSelf getTextSegments];
117
+ } else {
118
+ result[@"error"] = [NSString stringWithFormat:@"Transcribe failed with code %d", code];
119
+ }
120
+
121
+ if (state->isStoppedByAction || (!state->isCapturing && state->nSamplesTranscribing == state->nSamples)) {
122
+ NSLog(@"[RNWhisper] Transcribe end");
123
+ result[@"isStoppedByAction"] = @(state->isStoppedByAction);
124
+ result[@"isCapturing"] = @(false);
125
+ state->transcribeHandler(state->jobId, @"end", result);
126
+ } else if (code == 0) {
127
+ result[@"isCapturing"] = @(true);
128
+ state->transcribeHandler(state->jobId, @"transcribe", result);
129
+ } else {
130
+ result[@"isCapturing"] = @(true);
131
+ state->transcribeHandler(state->jobId, @"transcribe", result);
132
+ }
133
+ state->isTranscribing = false;
134
+
135
+ if (!state->isCapturing && state->nSamplesTranscribing != state->nSamples) {
136
+ state->isTranscribing = true;
137
+ // Finish transcribing the rest of the samples
138
+ [self fullTranscribeSamples:state];
139
+ }
140
+ }
141
+
120
142
  - (bool)isCapturing {
121
143
  return self->recordState.isCapturing;
122
144
  }
@@ -184,6 +206,7 @@ void AudioInputCallback(void * inUserData,
184
206
  return;
185
207
  }
186
208
  self->recordState.isCapturing = false;
209
+ self->recordState.isStoppedByAction = true;
187
210
  [self stopAudio];
188
211
  }
189
212
 
package/jest/mock.js CHANGED
@@ -23,7 +23,6 @@ if (!NativeModules.RNWhisper) {
23
23
  recordingTime: 1000,
24
24
  },
25
25
  })
26
- // End
27
26
  DeviceEventEmitter.emit('@RNWhisper_onRealtimeTranscribe', {
28
27
  contextId,
29
28
  jobId,
@@ -37,6 +36,12 @@ if (!NativeModules.RNWhisper) {
37
36
  recordingTime: 2000,
38
37
  },
39
38
  })
39
+ // End event
40
+ DeviceEventEmitter.emit('@RNWhisper_onRealtimeTranscribeEnd', {
41
+ contextId,
42
+ jobId,
43
+ payload: {},
44
+ })
40
45
  })
41
46
  }),
42
47
  releaseContext: jest.fn(() => Promise.resolve()),
@@ -44,8 +44,6 @@ class WhisperContext {
44
44
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
45
45
  const jobId = Math.floor(Math.random() * 10000);
46
46
  await RNWhisper.startRealtimeTranscribe(this.id, jobId, options);
47
- let removeTranscribe;
48
- let removeEnd;
49
47
  let lastTranscribePayload;
50
48
  return {
51
49
  stop: () => RNWhisper.abortTranscribe(this.id, jobId),
@@ -62,25 +60,23 @@ class WhisperContext {
62
60
  jobId: evt.jobId,
63
61
  ...payload
64
62
  });
65
- if (!payload.isCapturing) removeTranscribe();
66
63
  });
67
- removeTranscribe = transcribeListener.remove;
68
64
  const endListener = EventEmitter.addListener(EVENT_ON_REALTIME_TRANSCRIBE_END, evt => {
69
- var _removeTranscribe;
70
65
  const {
71
- contextId
66
+ contextId,
67
+ payload
72
68
  } = evt;
73
69
  if (contextId !== this.id || evt.jobId !== jobId) return;
74
70
  callback({
75
71
  contextId,
76
72
  jobId: evt.jobId,
77
73
  ...lastTranscribePayload,
74
+ ...payload,
78
75
  isCapturing: false
79
76
  });
80
- (_removeTranscribe = removeTranscribe) === null || _removeTranscribe === void 0 ? void 0 : _removeTranscribe();
81
- removeEnd();
77
+ transcribeListener.remove();
78
+ endListener.remove();
82
79
  });
83
- removeEnd = endListener.remove;
84
80
  }
85
81
  };
86
82
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","RNWhisper","NativeModules","Proxy","get","Error","EventEmitter","OS","NativeEventEmitter","DeviceEventEmitter","EVENT_ON_REALTIME_TRANSCRIBE","EVENT_ON_REALTIME_TRANSCRIBE_END","WhisperContext","constructor","id","transcribe","path","options","arguments","length","undefined","jobId","Math","floor","random","stop","abortTranscribe","promise","transcribeFile","transcribeRealtime","startRealtimeTranscribe","removeTranscribe","removeEnd","lastTranscribePayload","subscribe","callback","transcribeListener","addListener","evt","contextId","payload","isCapturing","remove","endListener","_removeTranscribe","release","releaseContext","initWhisper","filePath","initContext","releaseAllWhisper","releaseAllContexts"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
1
+ {"version":3,"names":["_reactNative","require","LINKING_ERROR","Platform","select","ios","default","RNWhisper","NativeModules","Proxy","get","Error","EventEmitter","OS","NativeEventEmitter","DeviceEventEmitter","EVENT_ON_REALTIME_TRANSCRIBE","EVENT_ON_REALTIME_TRANSCRIBE_END","WhisperContext","constructor","id","transcribe","path","options","arguments","length","undefined","jobId","Math","floor","random","stop","abortTranscribe","promise","transcribeFile","transcribeRealtime","startRealtimeTranscribe","lastTranscribePayload","subscribe","callback","transcribeListener","addListener","evt","contextId","payload","endListener","isCapturing","remove","release","releaseContext","initWhisper","filePath","initContext","releaseAllWhisper","releaseAllContexts"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
@@ -37,8 +37,6 @@ class WhisperContext {
37
37
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
38
38
  const jobId = Math.floor(Math.random() * 10000);
39
39
  await RNWhisper.startRealtimeTranscribe(this.id, jobId, options);
40
- let removeTranscribe;
41
- let removeEnd;
42
40
  let lastTranscribePayload;
43
41
  return {
44
42
  stop: () => RNWhisper.abortTranscribe(this.id, jobId),
@@ -55,25 +53,23 @@ class WhisperContext {
55
53
  jobId: evt.jobId,
56
54
  ...payload
57
55
  });
58
- if (!payload.isCapturing) removeTranscribe();
59
56
  });
60
- removeTranscribe = transcribeListener.remove;
61
57
  const endListener = EventEmitter.addListener(EVENT_ON_REALTIME_TRANSCRIBE_END, evt => {
62
- var _removeTranscribe;
63
58
  const {
64
- contextId
59
+ contextId,
60
+ payload
65
61
  } = evt;
66
62
  if (contextId !== this.id || evt.jobId !== jobId) return;
67
63
  callback({
68
64
  contextId,
69
65
  jobId: evt.jobId,
70
66
  ...lastTranscribePayload,
67
+ ...payload,
71
68
  isCapturing: false
72
69
  });
73
- (_removeTranscribe = removeTranscribe) === null || _removeTranscribe === void 0 ? void 0 : _removeTranscribe();
74
- removeEnd();
70
+ transcribeListener.remove();
71
+ endListener.remove();
75
72
  });
76
- removeEnd = endListener.remove;
77
73
  }
78
74
  };
79
75
  }
@@ -1 +1 @@
1
- {"version":3,"names":["NativeEventEmitter","DeviceEventEmitter","NativeModules","Platform","LINKING_ERROR","select","ios","default","RNWhisper","Proxy","get","Error","EventEmitter","OS","EVENT_ON_REALTIME_TRANSCRIBE","EVENT_ON_REALTIME_TRANSCRIBE_END","WhisperContext","constructor","id","transcribe","path","options","arguments","length","undefined","jobId","Math","floor","random","stop","abortTranscribe","promise","transcribeFile","transcribeRealtime","startRealtimeTranscribe","removeTranscribe","removeEnd","lastTranscribePayload","subscribe","callback","transcribeListener","addListener","evt","contextId","payload","isCapturing","remove","endListener","_removeTranscribe","release","releaseContext","initWhisper","filePath","initContext","releaseAllWhisper","releaseAllContexts"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
1
+ {"version":3,"names":["NativeEventEmitter","DeviceEventEmitter","NativeModules","Platform","LINKING_ERROR","select","ios","default","RNWhisper","Proxy","get","Error","EventEmitter","OS","EVENT_ON_REALTIME_TRANSCRIBE","EVENT_ON_REALTIME_TRANSCRIBE_END","WhisperContext","constructor","id","transcribe","path","options","arguments","length","undefined","jobId","Math","floor","random","stop","abortTranscribe","promise","transcribeFile","transcribeRealtime","startRealtimeTranscribe","lastTranscribePayload","subscribe","callback","transcribeListener","addListener","evt","contextId","payload","endListener","isCapturing","remove","release","releaseContext","initWhisper","filePath","initContext","releaseAllWhisper","releaseAllContexts"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":"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"}
@@ -50,6 +50,7 @@ export type TranscribeRealtimeEvent = {
50
50
  jobId: number;
51
51
  /** Is capturing audio, when false, the event is the final result */
52
52
  isCapturing: boolean;
53
+ isStoppedByAction?: boolean;
53
54
  code: number;
54
55
  processTime: number;
55
56
  recordingTime: number;
@@ -62,6 +63,7 @@ export type TranscribeRealtimeNativeEvent = {
62
63
  payload: {
63
64
  /** Is capturing audio, when false, the event is the final result */
64
65
  isCapturing: boolean;
66
+ isStoppedByAction?: boolean;
65
67
  code: number;
66
68
  processTime: number;
67
69
  recordingTime: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "whisper.rn",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "React Native binding of whisper.cpp",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
package/src/index.tsx CHANGED
@@ -87,6 +87,7 @@ export type TranscribeRealtimeEvent = {
87
87
  jobId: number,
88
88
  /** Is capturing audio, when false, the event is the final result */
89
89
  isCapturing: boolean,
90
+ isStoppedByAction?: boolean,
90
91
  code: number,
91
92
  processTime: number,
92
93
  recordingTime: number,
@@ -100,6 +101,7 @@ export type TranscribeRealtimeNativeEvent = {
100
101
  payload: {
101
102
  /** Is capturing audio, when false, the event is the final result */
102
103
  isCapturing: boolean,
104
+ isStoppedByAction?: boolean,
103
105
  code: number,
104
106
  processTime: number,
105
107
  recordingTime: number,
@@ -138,8 +140,6 @@ class WhisperContext {
138
140
  }> {
139
141
  const jobId: number = Math.floor(Math.random() * 10000)
140
142
  await RNWhisper.startRealtimeTranscribe(this.id, jobId, options)
141
- let removeTranscribe: () => void
142
- let removeEnd: () => void
143
143
  let lastTranscribePayload: TranscribeRealtimeNativeEvent['payload']
144
144
  return {
145
145
  stop: () => RNWhisper.abortTranscribe(this.id, jobId),
@@ -151,21 +151,24 @@ class WhisperContext {
151
151
  if (contextId !== this.id || evt.jobId !== jobId) return
152
152
  lastTranscribePayload = payload
153
153
  callback({ contextId, jobId: evt.jobId, ...payload })
154
- if (!payload.isCapturing) removeTranscribe()
155
154
  }
156
155
  )
157
- removeTranscribe = transcribeListener.remove
158
156
  const endListener = EventEmitter.addListener(
159
157
  EVENT_ON_REALTIME_TRANSCRIBE_END,
160
158
  (evt: TranscribeRealtimeNativeEvent) => {
161
- const { contextId } = evt
159
+ const { contextId, payload } = evt
162
160
  if (contextId !== this.id || evt.jobId !== jobId) return
163
- callback({ contextId, jobId: evt.jobId, ...lastTranscribePayload, isCapturing: false })
164
- removeTranscribe?.()
165
- removeEnd()
161
+ callback({
162
+ contextId,
163
+ jobId: evt.jobId,
164
+ ...lastTranscribePayload,
165
+ ...payload,
166
+ isCapturing: false
167
+ })
168
+ transcribeListener.remove()
169
+ endListener.remove()
166
170
  }
167
171
  )
168
- removeEnd = endListener.remove
169
172
  },
170
173
  }
171
174
  }