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.
- package/README.md +28 -0
- package/android/src/main/java/com/rnwhisper/AudioUtils.java +119 -0
- package/android/src/main/java/com/rnwhisper/WhisperContext.java +37 -116
- package/android/src/main/jni.cpp +23 -12
- package/android/src/newarch/java/com/rnwhisper/RNWhisperModule.java +26 -0
- package/ios/RNWhisper.mm +81 -22
- package/ios/RNWhisper.xcodeproj/project.pbxproj +6 -0
- package/ios/RNWhisper.xcodeproj/project.xcworkspace/xcuserdata/jhen.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNWhisperAudioSessionUtils.h +13 -0
- package/ios/RNWhisperAudioSessionUtils.m +85 -0
- package/ios/RNWhisperAudioUtils.h +1 -0
- package/ios/RNWhisperAudioUtils.m +21 -0
- package/ios/RNWhisperContext.h +1 -0
- package/ios/RNWhisperContext.mm +56 -28
- package/lib/commonjs/AudioSessionIos.js +91 -0
- package/lib/commonjs/AudioSessionIos.js.map +1 -0
- package/lib/commonjs/NativeRNWhisper.js.map +1 -1
- package/lib/commonjs/index.js +82 -14
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/AudioSessionIos.js +83 -0
- package/lib/module/AudioSessionIos.js.map +1 -0
- package/lib/module/NativeRNWhisper.js.map +1 -1
- package/lib/module/index.js +77 -14
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/AudioSessionIos.d.ts +54 -0
- package/lib/typescript/AudioSessionIos.d.ts.map +1 -0
- package/lib/typescript/NativeRNWhisper.d.ts +8 -0
- package/lib/typescript/NativeRNWhisper.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +37 -2
- package/lib/typescript/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/AudioSessionIos.ts +90 -0
- package/src/NativeRNWhisper.ts +11 -1
- 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
|
package/ios/RNWhisperContext.h
CHANGED
|
@@ -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;
|
package/ios/RNWhisperContext.mm
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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,
|
|
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"}
|
package/lib/commonjs/index.js
CHANGED
|
@@ -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
|
-
|
|
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: () =>
|
|
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
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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}/${
|
|
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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"}
|