whisper.rn 0.3.7 → 0.3.8

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 (34) hide show
  1. package/README.md +28 -0
  2. package/android/src/main/java/com/rnwhisper/AudioUtils.java +119 -0
  3. package/android/src/main/java/com/rnwhisper/WhisperContext.java +37 -116
  4. package/android/src/main/jni.cpp +23 -12
  5. package/android/src/newarch/java/com/rnwhisper/RNWhisperModule.java +26 -0
  6. package/ios/RNWhisper.mm +81 -22
  7. package/ios/RNWhisper.xcodeproj/project.pbxproj +6 -0
  8. package/ios/RNWhisper.xcodeproj/project.xcworkspace/xcuserdata/jhen.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  9. package/ios/RNWhisperAudioSessionUtils.h +13 -0
  10. package/ios/RNWhisperAudioSessionUtils.m +85 -0
  11. package/ios/RNWhisperAudioUtils.h +1 -0
  12. package/ios/RNWhisperAudioUtils.m +21 -0
  13. package/ios/RNWhisperContext.h +1 -0
  14. package/ios/RNWhisperContext.mm +56 -28
  15. package/lib/commonjs/AudioSessionIos.js +91 -0
  16. package/lib/commonjs/AudioSessionIos.js.map +1 -0
  17. package/lib/commonjs/NativeRNWhisper.js.map +1 -1
  18. package/lib/commonjs/index.js +82 -14
  19. package/lib/commonjs/index.js.map +1 -1
  20. package/lib/module/AudioSessionIos.js +83 -0
  21. package/lib/module/AudioSessionIos.js.map +1 -0
  22. package/lib/module/NativeRNWhisper.js.map +1 -1
  23. package/lib/module/index.js +77 -14
  24. package/lib/module/index.js.map +1 -1
  25. package/lib/typescript/AudioSessionIos.d.ts +54 -0
  26. package/lib/typescript/AudioSessionIos.d.ts.map +1 -0
  27. package/lib/typescript/NativeRNWhisper.d.ts +8 -0
  28. package/lib/typescript/NativeRNWhisper.d.ts.map +1 -1
  29. package/lib/typescript/index.d.ts +37 -2
  30. package/lib/typescript/index.d.ts.map +1 -1
  31. package/package.json +1 -1
  32. package/src/AudioSessionIos.ts +90 -0
  33. package/src/NativeRNWhisper.ts +11 -1
  34. package/src/index.ts +153 -26
@@ -0,0 +1,13 @@
1
+ #import <Foundation/Foundation.h>
2
+ #import <AVFoundation/AVFoundation.h>
3
+
4
+ @interface RNWhisperAudioSessionUtils : NSObject
5
+
6
+ +(NSString *)getCurrentCategory;
7
+ +(NSArray *)getCurrentOptions;
8
+ +(NSString *)getCurrentMode;
9
+ +(void)setCategory:(NSString *)category options:(NSArray *)options error:(NSError **)error;
10
+ +(void)setMode:(NSString *)mode error:(NSError **)error;
11
+ +(void)setActive:(BOOL)active error:(NSError **)error;
12
+
13
+ @end
@@ -0,0 +1,85 @@
1
+ #import "RNWhisperAudioSessionUtils.h"
2
+
3
+ @implementation RNWhisperAudioSessionUtils
4
+
5
+ static NSDictionary *_categories;
6
+ static NSDictionary *_options;
7
+ static NSDictionary *_modes;
8
+
9
+ + (void)initialize {
10
+ _categories = @{
11
+ @"Ambient": AVAudioSessionCategoryAmbient,
12
+ @"SoloAmbient": AVAudioSessionCategorySoloAmbient,
13
+ @"Playback": AVAudioSessionCategoryPlayback,
14
+ @"Record": AVAudioSessionCategoryRecord,
15
+ @"PlayAndRecord": AVAudioSessionCategoryPlayAndRecord,
16
+ @"MultiRoute": AVAudioSessionCategoryMultiRoute
17
+ };
18
+ _options = @{
19
+ @"MixWithOthers": @(AVAudioSessionCategoryOptionMixWithOthers),
20
+ @"DuckOthers": @(AVAudioSessionCategoryOptionDuckOthers),
21
+ @"InterruptSpokenAudioAndMixWithOthers": @(AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWithOthers),
22
+ @"AllowBluetooth": @(AVAudioSessionCategoryOptionAllowBluetooth),
23
+ @"AllowBluetoothA2DP": @(AVAudioSessionCategoryOptionAllowBluetoothA2DP),
24
+ @"AllowAirPlay": @(AVAudioSessionCategoryOptionAllowAirPlay),
25
+ @"DefaultToSpeaker": @(AVAudioSessionCategoryOptionDefaultToSpeaker)
26
+ };
27
+ _modes = @{
28
+ @"Default": AVAudioSessionModeDefault,
29
+ @"VoiceChat": AVAudioSessionModeVoiceChat,
30
+ @"VideoChat": AVAudioSessionModeVideoChat,
31
+ @"GameChat": AVAudioSessionModeGameChat,
32
+ @"VideoRecording": AVAudioSessionModeVideoRecording,
33
+ @"Measurement": AVAudioSessionModeMeasurement,
34
+ @"MoviePlayback": AVAudioSessionModeMoviePlayback,
35
+ @"SpokenAudio": AVAudioSessionModeSpokenAudio
36
+ };
37
+ }
38
+
39
+ +(NSString *)getCurrentCategory {
40
+ AVAudioSession *session = [AVAudioSession sharedInstance];
41
+ return session.category;
42
+ }
43
+
44
+ +(NSArray *)getCurrentOptions {
45
+ AVAudioSession *session = [AVAudioSession sharedInstance];
46
+ AVAudioSessionCategoryOptions options = session.categoryOptions;
47
+ NSMutableArray *result = [NSMutableArray array];
48
+ for (NSString *key in _options) {
49
+ if ((options & [[_options objectForKey:key] unsignedIntegerValue]) != 0) {
50
+ [result addObject:key];
51
+ }
52
+ }
53
+ return result;
54
+ }
55
+
56
+ +(NSString *)getCurrentMode {
57
+ AVAudioSession *session = [AVAudioSession sharedInstance];
58
+ return session.mode;
59
+ }
60
+
61
+ +(AVAudioSessionCategoryOptions)getOptions:(NSArray *)options {
62
+ AVAudioSessionCategoryOptions result = 0;
63
+ for (NSString *option in options) {
64
+ result |= [[_options objectForKey:option] unsignedIntegerValue];
65
+ }
66
+ return result;
67
+ }
68
+
69
+ +(void)setCategory:(NSString *)category options:(NSArray *)options error:(NSError **)error {
70
+ AVAudioSession *session = [AVAudioSession sharedInstance];
71
+ [session setCategory:[_categories objectForKey:category] withOptions:[self getOptions:options] error:error];
72
+ }
73
+
74
+ +(void)setMode:(NSString *)mode error:(NSError **)error {
75
+ AVAudioSession *session = [AVAudioSession sharedInstance];
76
+ [session setMode:[_modes objectForKey:mode] error:error];
77
+ }
78
+
79
+ +(void)setActive:(BOOL)active error:(NSError **)error {
80
+ AVAudioSession *session = [AVAudioSession sharedInstance];
81
+ [session setActive:active error:error];
82
+ }
83
+
84
+
85
+ @end
@@ -4,5 +4,6 @@
4
4
 
5
5
  + (NSData *)concatShortBuffers:(NSMutableArray<NSValue *> *)buffers sliceNSamples:(NSMutableArray<NSNumber *> *)sliceNSamples;
6
6
  + (void)saveWavFile:(NSData *)rawData audioOutputFile:(NSString *)audioOutputFile;
7
+ + (float *)decodeWaveFile:(NSString*)filePath count:(int *)count;
7
8
 
8
9
  @end
@@ -59,4 +59,25 @@
59
59
  [outputData writeToFile:audioOutputFile atomically:YES];
60
60
  }
61
61
 
62
+ + (float *)decodeWaveFile:(NSString*)filePath count:(int *)count {
63
+ NSURL *url = [NSURL fileURLWithPath:filePath];
64
+ NSData *fileData = [NSData dataWithContentsOfURL:url];
65
+ if (fileData == nil) {
66
+ return nil;
67
+ }
68
+ NSMutableData *waveData = [[NSMutableData alloc] init];
69
+ [waveData appendData:[fileData subdataWithRange:NSMakeRange(44, [fileData length]-44)]];
70
+ const short *shortArray = (const short *)[waveData bytes];
71
+ int shortCount = (int) ([waveData length] / sizeof(short));
72
+ float *floatArray = (float *) malloc(shortCount * sizeof(float));
73
+ for (NSInteger i = 0; i < shortCount; i++) {
74
+ float floatValue = ((float)shortArray[i]) / 32767.0;
75
+ floatValue = MAX(floatValue, -1.0);
76
+ floatValue = MIN(floatValue, 1.0);
77
+ floatArray[i] = floatValue;
78
+ }
79
+ *count = shortCount;
80
+ return floatArray;
81
+ }
82
+
62
83
  @end
@@ -53,6 +53,7 @@ typedef struct {
53
53
  audioDataCount:(int)audioDataCount
54
54
  options:(NSDictionary *)options
55
55
  onProgress:(void (^)(int))onProgress
56
+ onNewSegments:(void (^)(NSDictionary *))onNewSegments
56
57
  onEnd:(void (^)(int))onEnd;
57
58
  - (void)stopTranscribe:(int)jobId;
58
59
  - (void)stopCurrentTranscribe;
@@ -201,7 +201,8 @@ void AudioInputCallback(void * inUserData,
201
201
  audioBufferF32[i] = (float)audioBufferI16[i] / 32768.0f;
202
202
  }
203
203
  CFTimeInterval timeStart = CACurrentMediaTime();
204
- int code = [state->mSelf fullTranscribe:state->jobId audioData:audioBufferF32 audioDataCount:state->nSamplesTranscribing options:state->options];
204
+ struct whisper_full_params params = [state->mSelf getParams:state->options jobId:state->jobId];
205
+ int code = [state->mSelf fullTranscribe:state->jobId params:params audioData:audioBufferF32 audioDataCount:state->nSamplesTranscribing];
205
206
  free(audioBufferF32);
206
207
  CFTimeInterval timeEnd = CACurrentMediaTime();
207
208
  const float timeRecording = (float) state->nSamplesTranscribing / (float) state->dataFormat.mSampleRate;
@@ -317,18 +318,70 @@ void AudioInputCallback(void * inUserData,
317
318
  return status;
318
319
  }
319
320
 
321
+ struct rnwhisper_segments_callback_data {
322
+ void (^onNewSegments)(NSDictionary *);
323
+ int total_n_new;
324
+ };
325
+
320
326
  - (void)transcribeFile:(int)jobId
321
327
  audioData:(float *)audioData
322
328
  audioDataCount:(int)audioDataCount
323
329
  options:(NSDictionary *)options
324
330
  onProgress:(void (^)(int))onProgress
331
+ onNewSegments:(void (^)(NSDictionary *))onNewSegments
325
332
  onEnd:(void (^)(int))onEnd
326
333
  {
327
334
  dispatch_async(dQueue, ^{
328
335
  self->recordState.isStoppedByAction = false;
329
336
  self->recordState.isTranscribing = true;
330
337
  self->recordState.jobId = jobId;
331
- int code = [self fullTranscribeWithProgress:onProgress jobId:jobId audioData:audioData audioDataCount:audioDataCount options:options];
338
+
339
+ whisper_full_params params = [self getParams:options jobId:jobId];
340
+ if (options[@"onProgress"] && [options[@"onProgress"] boolValue]) {
341
+ params.progress_callback = [](struct whisper_context * /*ctx*/, struct whisper_state * /*state*/, int progress, void * user_data) {
342
+ void (^onProgress)(int) = (__bridge void (^)(int))user_data;
343
+ onProgress(progress);
344
+ };
345
+ params.progress_callback_user_data = (__bridge void *)(onProgress);
346
+ }
347
+
348
+ if (options[@"onNewSegments"] && [options[@"onNewSegments"] boolValue]) {
349
+ params.new_segment_callback = [](struct whisper_context * ctx, struct whisper_state * /*state*/, int n_new, void * user_data) {
350
+ struct rnwhisper_segments_callback_data *data = (struct rnwhisper_segments_callback_data *)user_data;
351
+ data->total_n_new += n_new;
352
+
353
+ NSString *text = @"";
354
+ NSMutableArray *segments = [[NSMutableArray alloc] init];
355
+ for (int i = data->total_n_new - n_new; i < data->total_n_new; i++) {
356
+ const char * text_cur = whisper_full_get_segment_text(ctx, i);
357
+ text = [text stringByAppendingString:[NSString stringWithUTF8String:text_cur]];
358
+
359
+ const int64_t t0 = whisper_full_get_segment_t0(ctx, i);
360
+ const int64_t t1 = whisper_full_get_segment_t1(ctx, i);
361
+ NSDictionary *segment = @{
362
+ @"text": [NSString stringWithUTF8String:text_cur],
363
+ @"t0": [NSNumber numberWithLongLong:t0],
364
+ @"t1": [NSNumber numberWithLongLong:t1]
365
+ };
366
+ [segments addObject:segment];
367
+ }
368
+
369
+ NSDictionary *result = @{
370
+ @"nNew": [NSNumber numberWithInt:n_new],
371
+ @"totalNNew": [NSNumber numberWithInt:data->total_n_new],
372
+ @"result": text,
373
+ @"segments": segments
374
+ };
375
+ void (^onNewSegments)(NSDictionary *) = (void (^)(NSDictionary *))data->onNewSegments;
376
+ onNewSegments(result);
377
+ };
378
+ struct rnwhisper_segments_callback_data user_data = {
379
+ .onNewSegments = onNewSegments,
380
+ .total_n_new = 0
381
+ };
382
+ params.new_segment_callback_user_data = &user_data;
383
+ }
384
+ int code = [self fullTranscribe:jobId params:params audioData:audioData audioDataCount:audioDataCount];
332
385
  self->recordState.jobId = -1;
333
386
  self->recordState.isTranscribing = false;
334
387
  onEnd(code);
@@ -428,36 +481,11 @@ void AudioInputCallback(void * inUserData,
428
481
  return params;
429
482
  }
430
483
 
431
- - (int)fullTranscribeWithProgress:(void (^)(int))onProgress
432
- jobId:(int)jobId
433
- audioData:(float *)audioData
434
- audioDataCount:(int)audioDataCount
435
- options:(NSDictionary *)options
436
- {
437
- struct whisper_full_params params = [self getParams:options jobId:jobId];
438
- if (options[@"onProgress"] && [options[@"onProgress"] boolValue]) {
439
- params.progress_callback = [](struct whisper_context * /*ctx*/, struct whisper_state * /*state*/, int progress, void * user_data) {
440
- void (^onProgress)(int) = (__bridge void (^)(int))user_data;
441
- onProgress(progress);
442
- };
443
- params.progress_callback_user_data = (__bridge void *)(onProgress);
444
- }
445
- whisper_reset_timings(self->ctx);
446
-
447
- int code = whisper_full(self->ctx, params, audioData, audioDataCount);
448
- rn_whisper_remove_abort_map(jobId);
449
- // if (code == 0) {
450
- // whisper_print_timings(self->ctx);
451
- // }
452
- return code;
453
- }
454
-
455
484
  - (int)fullTranscribe:(int)jobId
485
+ params:(struct whisper_full_params)params
456
486
  audioData:(float *)audioData
457
487
  audioDataCount:(int)audioDataCount
458
- options:(NSDictionary *)options
459
488
  {
460
- struct whisper_full_params params = [self getParams:options jobId:jobId];
461
489
  whisper_reset_timings(self->ctx);
462
490
 
463
491
  int code = whisper_full(self->ctx, params, audioData, audioDataCount);
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.AudioSessionModeIos = exports.AudioSessionCategoryOptionIos = exports.AudioSessionCategoryIos = void 0;
7
+ var _reactNative = require("react-native");
8
+ var _NativeRNWhisper = _interopRequireDefault(require("./NativeRNWhisper"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ /**
11
+ * @see https://developer.apple.com/documentation/avfaudio/avaudiosessioncategory?language=objc
12
+ */
13
+ let AudioSessionCategoryIos;
14
+ /**
15
+ * @see https://developer.apple.com/documentation/avfaudio/avaudiosessioncategoryoptions?language=objc
16
+ */
17
+ exports.AudioSessionCategoryIos = AudioSessionCategoryIos;
18
+ (function (AudioSessionCategoryIos) {
19
+ AudioSessionCategoryIos["Ambient"] = "Ambient";
20
+ AudioSessionCategoryIos["SoloAmbient"] = "SoloAmbient";
21
+ AudioSessionCategoryIos["Playback"] = "Playback";
22
+ AudioSessionCategoryIos["Record"] = "Record";
23
+ AudioSessionCategoryIos["PlayAndRecord"] = "PlayAndRecord";
24
+ AudioSessionCategoryIos["MultiRoute"] = "MultiRoute";
25
+ })(AudioSessionCategoryIos || (exports.AudioSessionCategoryIos = AudioSessionCategoryIos = {}));
26
+ let AudioSessionCategoryOptionIos;
27
+ /**
28
+ * @see https://developer.apple.com/documentation/avfaudio/avaudiosessionmode?language=objc
29
+ */
30
+ exports.AudioSessionCategoryOptionIos = AudioSessionCategoryOptionIos;
31
+ (function (AudioSessionCategoryOptionIos) {
32
+ AudioSessionCategoryOptionIos["MixWithOthers"] = "MixWithOthers";
33
+ AudioSessionCategoryOptionIos["DuckOthers"] = "DuckOthers";
34
+ AudioSessionCategoryOptionIos["InterruptSpokenAudioAndMixWithOthers"] = "InterruptSpokenAudioAndMixWithOthers";
35
+ AudioSessionCategoryOptionIos["AllowBluetooth"] = "AllowBluetooth";
36
+ AudioSessionCategoryOptionIos["AllowBluetoothA2DP"] = "AllowBluetoothA2DP";
37
+ AudioSessionCategoryOptionIos["AllowAirPlay"] = "AllowAirPlay";
38
+ AudioSessionCategoryOptionIos["DefaultToSpeaker"] = "DefaultToSpeaker";
39
+ })(AudioSessionCategoryOptionIos || (exports.AudioSessionCategoryOptionIos = AudioSessionCategoryOptionIos = {}));
40
+ let AudioSessionModeIos;
41
+ exports.AudioSessionModeIos = AudioSessionModeIos;
42
+ (function (AudioSessionModeIos) {
43
+ AudioSessionModeIos["Default"] = "Default";
44
+ AudioSessionModeIos["VoiceChat"] = "VoiceChat";
45
+ AudioSessionModeIos["VideoChat"] = "VideoChat";
46
+ AudioSessionModeIos["GameChat"] = "GameChat";
47
+ AudioSessionModeIos["VideoRecording"] = "VideoRecording";
48
+ AudioSessionModeIos["Measurement"] = "Measurement";
49
+ AudioSessionModeIos["MoviePlayback"] = "MoviePlayback";
50
+ AudioSessionModeIos["SpokenAudio"] = "SpokenAudio";
51
+ })(AudioSessionModeIos || (exports.AudioSessionModeIos = AudioSessionModeIos = {}));
52
+ const checkPlatform = () => {
53
+ if (_reactNative.Platform.OS !== 'ios') throw new Error('Only supported on iOS');
54
+ };
55
+
56
+ /**
57
+ * AudioSession Utility, iOS only.
58
+ */
59
+ var _default = {
60
+ Category: AudioSessionCategoryIos,
61
+ CategoryOption: AudioSessionCategoryOptionIos,
62
+ Mode: AudioSessionModeIos,
63
+ getCurrentCategory: async () => {
64
+ var _result$options;
65
+ checkPlatform();
66
+ const result = await _NativeRNWhisper.default.getAudioSessionCurrentCategory();
67
+ return {
68
+ category: result.category.replace('AVAudioSessionCategory', ''),
69
+ options: (_result$options = result.options) === null || _result$options === void 0 ? void 0 : _result$options.map(option => option.replace('AVAudioSessionCategoryOption', ''))
70
+ };
71
+ },
72
+ getCurrentMode: async () => {
73
+ checkPlatform();
74
+ const mode = await _NativeRNWhisper.default.getAudioSessionCurrentMode();
75
+ return mode.replace('AVAudioSessionMode', '');
76
+ },
77
+ setCategory: async (category, options) => {
78
+ checkPlatform();
79
+ await _NativeRNWhisper.default.setAudioSessionCategory(category, options);
80
+ },
81
+ setMode: async mode => {
82
+ checkPlatform();
83
+ await _NativeRNWhisper.default.setAudioSessionMode(mode);
84
+ },
85
+ setActive: async active => {
86
+ checkPlatform();
87
+ await _NativeRNWhisper.default.setAudioSessionActive(active);
88
+ }
89
+ };
90
+ exports.default = _default;
91
+ //# sourceMappingURL=AudioSessionIos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_NativeRNWhisper","_interopRequireDefault","obj","__esModule","default","AudioSessionCategoryIos","exports","AudioSessionCategoryOptionIos","AudioSessionModeIos","checkPlatform","Platform","OS","Error","_default","Category","CategoryOption","Mode","getCurrentCategory","_result$options","result","RNWhisper","getAudioSessionCurrentCategory","category","replace","options","map","option","getCurrentMode","mode","getAudioSessionCurrentMode","setCategory","setAudioSessionCategory","setMode","setAudioSessionMode","setActive","active","setAudioSessionActive"],"sourceRoot":"../../src","sources":["AudioSessionIos.ts"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_default","TurboModuleRegistry","get","exports","default"],"sourceRoot":"../../src","sources":["NativeRNWhisper.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAkD,IAAAC,QAAA,GA+EnCC,gCAAmB,CAACC,GAAG,CAAO,WAAW,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAJ,QAAA"}
1
+ {"version":3,"names":["_reactNative","require","_default","TurboModuleRegistry","get","exports","default"],"sourceRoot":"../../src","sources":["NativeRNWhisper.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAkD,IAAAC,QAAA,GAyFnCC,gCAAmB,CAACC,GAAG,CAAO,WAAW,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAJ,QAAA"}
@@ -3,12 +3,19 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "AudioSessionIos", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _AudioSessionIos.default;
10
+ }
11
+ });
6
12
  exports.WhisperContext = void 0;
7
13
  exports.initWhisper = initWhisper;
8
14
  exports.libVersion = exports.isUseCoreML = exports.isCoreMLAllowFallback = void 0;
9
15
  exports.releaseAllWhisper = releaseAllWhisper;
10
16
  var _reactNative = require("react-native");
11
17
  var _NativeRNWhisper = _interopRequireDefault(require("./NativeRNWhisper"));
18
+ var _AudioSessionIos = _interopRequireDefault(require("./AudioSessionIos"));
12
19
  var _version = require("./version.json");
13
20
  var _RNWhisper$getConstan;
14
21
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -21,11 +28,16 @@ if (_reactNative.Platform.OS === 'android') {
21
28
  EventEmitter = _reactNative.DeviceEventEmitter;
22
29
  }
23
30
  const EVENT_ON_TRANSCRIBE_PROGRESS = '@RNWhisper_onTranscribeProgress';
31
+ const EVENT_ON_TRANSCRIBE_NEW_SEGMENTS = '@RNWhisper_onTranscribeNewSegments';
24
32
  const EVENT_ON_REALTIME_TRANSCRIBE = '@RNWhisper_onRealtimeTranscribe';
25
33
  const EVENT_ON_REALTIME_TRANSCRIBE_END = '@RNWhisper_onRealtimeTranscribeEnd';
26
-
27
- // Fn -> Boolean in TranscribeFileNativeOptions
28
-
34
+ const updateAudioSession = async setting => {
35
+ await _AudioSessionIos.default.setCategory(setting.category, setting.options || []);
36
+ if (setting.mode) {
37
+ await _AudioSessionIos.default.setMode(setting.mode);
38
+ }
39
+ await _AudioSessionIos.default.setActive(setting.active ?? true);
40
+ };
29
41
  class WhisperContext {
30
42
  constructor(id) {
31
43
  this.id = id;
@@ -50,6 +62,7 @@ class WhisperContext {
50
62
  const jobId = Math.floor(Math.random() * 10000);
51
63
  const {
52
64
  onProgress,
65
+ onNewSegments,
53
66
  ...rest
54
67
  } = options;
55
68
  let progressListener;
@@ -71,16 +84,36 @@ class WhisperContext {
71
84
  progressListener = null;
72
85
  }
73
86
  };
87
+ let newSegmentsListener;
88
+ if (onNewSegments) {
89
+ newSegmentsListener = EventEmitter.addListener(EVENT_ON_TRANSCRIBE_NEW_SEGMENTS, evt => {
90
+ const {
91
+ contextId,
92
+ result
93
+ } = evt;
94
+ if (contextId !== this.id || evt.jobId !== jobId) return;
95
+ onNewSegments(result);
96
+ });
97
+ }
98
+ const removeNewSegmenetsListener = () => {
99
+ if (newSegmentsListener) {
100
+ newSegmentsListener.remove();
101
+ newSegmentsListener = null;
102
+ }
103
+ };
74
104
  return {
75
105
  stop: async () => {
76
106
  await _NativeRNWhisper.default.abortTranscribe(this.id, jobId);
77
107
  removeProgressListener();
108
+ removeNewSegmenetsListener();
78
109
  },
79
110
  promise: _NativeRNWhisper.default.transcribeFile(this.id, jobId, path, {
80
111
  ...rest,
81
- onProgress: !!onProgress
112
+ onProgress: !!onProgress,
113
+ onNewSegments: !!onNewSegments
82
114
  }).then(result => {
83
115
  removeProgressListener();
116
+ removeNewSegmenetsListener();
84
117
  if (!result.isAborted && lastProgress !== 100) {
85
118
  // Handle the case that the last progress event is not triggered
86
119
  onProgress === null || onProgress === void 0 ? void 0 : onProgress(100);
@@ -88,6 +121,7 @@ class WhisperContext {
88
121
  return result;
89
122
  }).catch(e => {
90
123
  removeProgressListener();
124
+ removeNewSegmenetsListener();
91
125
  throw e;
92
126
  })
93
127
  };
@@ -96,8 +130,6 @@ class WhisperContext {
96
130
  /** Transcribe the microphone audio stream, the microphone user permission is required */
97
131
  async transcribeRealtime() {
98
132
  let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
99
- const jobId = Math.floor(Math.random() * 10000);
100
- await _NativeRNWhisper.default.startRealtimeTranscribe(this.id, jobId, options);
101
133
  let lastTranscribePayload;
102
134
  const slices = [];
103
135
  let sliceIndex = 0;
@@ -145,8 +177,37 @@ class WhisperContext {
145
177
  slices
146
178
  };
147
179
  };
180
+ let prevAudioSession;
181
+ if (_reactNative.Platform.OS === 'ios' && options !== null && options !== void 0 && options.audioSessionOnStartIos) {
182
+ // iOS: Remember current audio session state
183
+ if ((options === null || options === void 0 ? void 0 : options.audioSessionOnStopIos) === 'restore') {
184
+ const categoryResult = await _AudioSessionIos.default.getCurrentCategory();
185
+ const mode = await _AudioSessionIos.default.getCurrentMode();
186
+ prevAudioSession = {
187
+ ...categoryResult,
188
+ mode,
189
+ active: false // TODO: Need to check isOtherAudioPlaying to set active
190
+ };
191
+ }
192
+
193
+ // iOS: Update audio session state
194
+ await updateAudioSession(options === null || options === void 0 ? void 0 : options.audioSessionOnStartIos);
195
+ }
196
+ if (_reactNative.Platform.OS === 'ios' && typeof (options === null || options === void 0 ? void 0 : options.audioSessionOnStopIos) === 'object') {
197
+ prevAudioSession = options === null || options === void 0 ? void 0 : options.audioSessionOnStopIos;
198
+ }
199
+ const jobId = Math.floor(Math.random() * 10000);
200
+ try {
201
+ await _NativeRNWhisper.default.startRealtimeTranscribe(this.id, jobId, options);
202
+ } catch (e) {
203
+ if (prevAudioSession) await updateAudioSession(prevAudioSession);
204
+ throw e;
205
+ }
148
206
  return {
149
- stop: () => _NativeRNWhisper.default.abortTranscribe(this.id, jobId),
207
+ stop: async () => {
208
+ await _NativeRNWhisper.default.abortTranscribe(this.id, jobId);
209
+ if (prevAudioSession) await updateAudioSession(prevAudioSession);
210
+ },
150
211
  subscribe: callback => {
151
212
  let transcribeListener = EventEmitter.addListener(EVENT_ON_REALTIME_TRANSCRIBE, evt => {
152
213
  const {
@@ -212,14 +273,21 @@ async function initWhisper(_ref) {
212
273
  } = coreMLModelAsset;
213
274
  if (filename && assets) {
214
275
  coreMLAssets = assets === null || assets === void 0 ? void 0 : assets.map(asset => {
215
- const {
216
- uri
217
- } = _reactNative.Image.resolveAssetSource(asset);
218
- const filepath = coreMLModelAssetPaths.find(p => uri.includes(p));
219
- if (filepath) {
276
+ if (typeof asset === 'number') {
277
+ const {
278
+ uri
279
+ } = _reactNative.Image.resolveAssetSource(asset);
280
+ const filepath = coreMLModelAssetPaths.find(p => uri.includes(p));
281
+ if (filepath) {
282
+ return {
283
+ uri,
284
+ filepath: `${filename}/${filepath}`
285
+ };
286
+ }
287
+ } else if (typeof asset === 'string') {
220
288
  return {
221
- uri,
222
- filepath: `${filename}/${filepath}`
289
+ uri: asset,
290
+ filepath: `${filename}/${asset}`
223
291
  };
224
292
  }
225
293
  return undefined;
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_NativeRNWhisper","_interopRequireDefault","_version","_RNWhisper$getConstan","obj","__esModule","default","EventEmitter","Platform","OS","NativeEventEmitter","RNWhisper","DeviceEventEmitter","EVENT_ON_TRANSCRIBE_PROGRESS","EVENT_ON_REALTIME_TRANSCRIBE","EVENT_ON_REALTIME_TRANSCRIBE_END","WhisperContext","constructor","id","transcribe","filePath","options","arguments","length","undefined","path","source","Image","resolveAssetSource","uri","e","Error","startsWith","slice","jobId","Math","floor","random","onProgress","rest","progressListener","lastProgress","addListener","evt","contextId","progress","removeProgressListener","remove","stop","abortTranscribe","promise","transcribeFile","then","result","isAborted","catch","transcribeRealtime","startRealtimeTranscribe","lastTranscribePayload","slices","sliceIndex","tOffset","putSlice","payload","isUseSlices","_slices$sliceIndex","_segments","segments","data","t1","map","segment","t0","mergeSlicesIfNeeded","mergedPayload","forEach","_mergedPayload$data","_slice$data","_mergedPayload$data2","_slice$data2","processTime","recordingTime","subscribe","callback","transcribeListener","endListener","lastPayload","isCapturing","release","releaseContext","exports","coreMLModelAssetPaths","initWhisper","_ref","coreMLModelAsset","isBundleAsset","coreMLAssets","filename","assets","asset","filepath","find","p","includes","filter","initContext","downloadCoreMLAssets","__DEV__","releaseAllWhisper","releaseAllContexts","libVersion","version","useCoreML","coreMLAllowFallback","getConstants","call","isUseCoreML","isCoreMLAllowFallback"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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"}
1
+ {"version":3,"names":["_reactNative","require","_NativeRNWhisper","_interopRequireDefault","_AudioSessionIos","_version","_RNWhisper$getConstan","obj","__esModule","default","EventEmitter","Platform","OS","NativeEventEmitter","RNWhisper","DeviceEventEmitter","EVENT_ON_TRANSCRIBE_PROGRESS","EVENT_ON_TRANSCRIBE_NEW_SEGMENTS","EVENT_ON_REALTIME_TRANSCRIBE","EVENT_ON_REALTIME_TRANSCRIBE_END","updateAudioSession","setting","AudioSessionIos","setCategory","category","options","mode","setMode","setActive","active","WhisperContext","constructor","id","transcribe","filePath","arguments","length","undefined","path","source","Image","resolveAssetSource","uri","e","Error","startsWith","slice","jobId","Math","floor","random","onProgress","onNewSegments","rest","progressListener","lastProgress","addListener","evt","contextId","progress","removeProgressListener","remove","newSegmentsListener","result","removeNewSegmenetsListener","stop","abortTranscribe","promise","transcribeFile","then","isAborted","catch","transcribeRealtime","lastTranscribePayload","slices","sliceIndex","tOffset","putSlice","payload","isUseSlices","_slices$sliceIndex","_segments","segments","data","t1","map","segment","t0","mergeSlicesIfNeeded","mergedPayload","forEach","_mergedPayload$data","_slice$data","_mergedPayload$data2","_slice$data2","processTime","recordingTime","prevAudioSession","audioSessionOnStartIos","audioSessionOnStopIos","categoryResult","getCurrentCategory","getCurrentMode","startRealtimeTranscribe","subscribe","callback","transcribeListener","endListener","lastPayload","isCapturing","release","releaseContext","exports","coreMLModelAssetPaths","initWhisper","_ref","coreMLModelAsset","isBundleAsset","coreMLAssets","filename","assets","asset","filepath","find","p","includes","filter","initContext","downloadCoreMLAssets","__DEV__","releaseAllWhisper","releaseAllContexts","libVersion","version","useCoreML","coreMLAllowFallback","getConstants","call","isUseCoreML","isCoreMLAllowFallback"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":"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"}