whisper.rn 0.5.0-rc.1 → 0.5.0-rc.10

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 (116) hide show
  1. package/README.md +128 -50
  2. package/android/src/main/CMakeLists.txt +1 -0
  3. package/android/src/main/java/com/rnwhisper/RNWhisper.java +35 -0
  4. package/android/src/main/java/com/rnwhisper/WhisperContext.java +33 -0
  5. package/android/src/main/jni.cpp +81 -0
  6. package/android/src/newarch/java/com/rnwhisper/RNWhisperModule.java +5 -0
  7. package/android/src/oldarch/java/com/rnwhisper/RNWhisperModule.java +5 -0
  8. package/cpp/jsi/RNWhisperJSI.cpp +42 -6
  9. package/ios/RNWhisper.mm +11 -0
  10. package/ios/RNWhisperContext.h +1 -0
  11. package/ios/RNWhisperContext.mm +46 -0
  12. package/ios/rnwhisper.xcframework/ios-arm64/rnwhisper.framework/Info.plist +0 -0
  13. package/ios/rnwhisper.xcframework/ios-arm64_x86_64-simulator/rnwhisper.framework/Info.plist +0 -0
  14. package/ios/rnwhisper.xcframework/ios-arm64_x86_64-simulator/rnwhisper.framework/_CodeSignature/CodeResources +1 -1
  15. package/ios/rnwhisper.xcframework/ios-arm64_x86_64-simulator/rnwhisper.framework/rnwhisper +0 -0
  16. package/ios/rnwhisper.xcframework/tvos-arm64/rnwhisper.framework/Info.plist +0 -0
  17. package/ios/rnwhisper.xcframework/tvos-arm64_x86_64-simulator/rnwhisper.framework/Info.plist +0 -0
  18. package/ios/rnwhisper.xcframework/tvos-arm64_x86_64-simulator/rnwhisper.framework/_CodeSignature/CodeResources +1 -1
  19. package/ios/rnwhisper.xcframework/tvos-arm64_x86_64-simulator/rnwhisper.framework/rnwhisper +0 -0
  20. package/lib/commonjs/AudioSessionIos.js +2 -1
  21. package/lib/commonjs/AudioSessionIos.js.map +1 -1
  22. package/lib/commonjs/NativeRNWhisper.js.map +1 -1
  23. package/lib/commonjs/index.js +50 -10
  24. package/lib/commonjs/index.js.map +1 -1
  25. package/lib/commonjs/jest-mock.js +126 -0
  26. package/lib/commonjs/jest-mock.js.map +1 -0
  27. package/lib/commonjs/realtime-transcription/RealtimeTranscriber.js +857 -0
  28. package/lib/commonjs/realtime-transcription/RealtimeTranscriber.js.map +1 -0
  29. package/lib/commonjs/realtime-transcription/SliceManager.js +233 -0
  30. package/lib/commonjs/realtime-transcription/SliceManager.js.map +1 -0
  31. package/lib/commonjs/realtime-transcription/adapters/AudioPcmStreamAdapter.js +133 -0
  32. package/lib/commonjs/realtime-transcription/adapters/AudioPcmStreamAdapter.js.map +1 -0
  33. package/lib/commonjs/realtime-transcription/adapters/JestAudioStreamAdapter.js +201 -0
  34. package/lib/commonjs/realtime-transcription/adapters/JestAudioStreamAdapter.js.map +1 -0
  35. package/lib/commonjs/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.js +309 -0
  36. package/lib/commonjs/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.js.map +1 -0
  37. package/lib/commonjs/realtime-transcription/index.js +27 -0
  38. package/lib/commonjs/realtime-transcription/index.js.map +1 -0
  39. package/lib/commonjs/realtime-transcription/types.js +114 -0
  40. package/lib/commonjs/realtime-transcription/types.js.map +1 -0
  41. package/lib/commonjs/utils/WavFileReader.js +158 -0
  42. package/lib/commonjs/utils/WavFileReader.js.map +1 -0
  43. package/lib/commonjs/utils/WavFileWriter.js +181 -0
  44. package/lib/commonjs/utils/WavFileWriter.js.map +1 -0
  45. package/lib/commonjs/utils/common.js +25 -0
  46. package/lib/commonjs/utils/common.js.map +1 -0
  47. package/lib/module/AudioSessionIos.js +2 -1
  48. package/lib/module/AudioSessionIos.js.map +1 -1
  49. package/lib/module/NativeRNWhisper.js.map +1 -1
  50. package/lib/module/index.js +48 -10
  51. package/lib/module/index.js.map +1 -1
  52. package/lib/module/jest-mock.js +124 -0
  53. package/lib/module/jest-mock.js.map +1 -0
  54. package/lib/module/realtime-transcription/RealtimeTranscriber.js +851 -0
  55. package/lib/module/realtime-transcription/RealtimeTranscriber.js.map +1 -0
  56. package/lib/module/realtime-transcription/SliceManager.js +226 -0
  57. package/lib/module/realtime-transcription/SliceManager.js.map +1 -0
  58. package/lib/module/realtime-transcription/adapters/AudioPcmStreamAdapter.js +124 -0
  59. package/lib/module/realtime-transcription/adapters/AudioPcmStreamAdapter.js.map +1 -0
  60. package/lib/module/realtime-transcription/adapters/JestAudioStreamAdapter.js +194 -0
  61. package/lib/module/realtime-transcription/adapters/JestAudioStreamAdapter.js.map +1 -0
  62. package/lib/module/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.js +302 -0
  63. package/lib/module/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.js.map +1 -0
  64. package/lib/module/realtime-transcription/index.js +8 -0
  65. package/lib/module/realtime-transcription/index.js.map +1 -0
  66. package/lib/module/realtime-transcription/types.js +107 -0
  67. package/lib/module/realtime-transcription/types.js.map +1 -0
  68. package/lib/module/utils/WavFileReader.js +151 -0
  69. package/lib/module/utils/WavFileReader.js.map +1 -0
  70. package/lib/module/utils/WavFileWriter.js +174 -0
  71. package/lib/module/utils/WavFileWriter.js.map +1 -0
  72. package/lib/module/utils/common.js +18 -0
  73. package/lib/module/utils/common.js.map +1 -0
  74. package/lib/typescript/AudioSessionIos.d.ts +1 -1
  75. package/lib/typescript/AudioSessionIos.d.ts.map +1 -1
  76. package/lib/typescript/NativeRNWhisper.d.ts +1 -0
  77. package/lib/typescript/NativeRNWhisper.d.ts.map +1 -1
  78. package/lib/typescript/index.d.ts +8 -4
  79. package/lib/typescript/index.d.ts.map +1 -1
  80. package/lib/typescript/jest-mock.d.ts +2 -0
  81. package/lib/typescript/jest-mock.d.ts.map +1 -0
  82. package/lib/typescript/realtime-transcription/RealtimeTranscriber.d.ts +166 -0
  83. package/lib/typescript/realtime-transcription/RealtimeTranscriber.d.ts.map +1 -0
  84. package/lib/typescript/realtime-transcription/SliceManager.d.ts +72 -0
  85. package/lib/typescript/realtime-transcription/SliceManager.d.ts.map +1 -0
  86. package/lib/typescript/realtime-transcription/adapters/AudioPcmStreamAdapter.d.ts +22 -0
  87. package/lib/typescript/realtime-transcription/adapters/AudioPcmStreamAdapter.d.ts.map +1 -0
  88. package/lib/typescript/realtime-transcription/adapters/JestAudioStreamAdapter.d.ts +44 -0
  89. package/lib/typescript/realtime-transcription/adapters/JestAudioStreamAdapter.d.ts.map +1 -0
  90. package/lib/typescript/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.d.ts +75 -0
  91. package/lib/typescript/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.d.ts.map +1 -0
  92. package/lib/typescript/realtime-transcription/index.d.ts +6 -0
  93. package/lib/typescript/realtime-transcription/index.d.ts.map +1 -0
  94. package/lib/typescript/realtime-transcription/types.d.ts +222 -0
  95. package/lib/typescript/realtime-transcription/types.d.ts.map +1 -0
  96. package/lib/typescript/utils/WavFileReader.d.ts +61 -0
  97. package/lib/typescript/utils/WavFileReader.d.ts.map +1 -0
  98. package/lib/typescript/utils/WavFileWriter.d.ts +57 -0
  99. package/lib/typescript/utils/WavFileWriter.d.ts.map +1 -0
  100. package/lib/typescript/utils/common.d.ts +9 -0
  101. package/lib/typescript/utils/common.d.ts.map +1 -0
  102. package/package.json +18 -6
  103. package/src/AudioSessionIos.ts +3 -2
  104. package/src/NativeRNWhisper.ts +2 -0
  105. package/src/index.ts +74 -22
  106. package/{jest/mock.js → src/jest-mock.ts} +2 -2
  107. package/src/realtime-transcription/RealtimeTranscriber.ts +1015 -0
  108. package/src/realtime-transcription/SliceManager.ts +252 -0
  109. package/src/realtime-transcription/adapters/AudioPcmStreamAdapter.ts +143 -0
  110. package/src/realtime-transcription/adapters/JestAudioStreamAdapter.ts +251 -0
  111. package/src/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.ts +378 -0
  112. package/src/realtime-transcription/index.ts +34 -0
  113. package/src/realtime-transcription/types.ts +283 -0
  114. package/src/utils/WavFileReader.ts +202 -0
  115. package/src/utils/WavFileWriter.ts +206 -0
  116. package/src/utils/common.ts +17 -0
@@ -0,0 +1,75 @@
1
+ import type { AudioStreamInterface, AudioStreamConfig, AudioStreamData } from '../types';
2
+ import { WavFileReaderFs } from '../../utils/WavFileReader';
3
+ export interface SimulateFileOptions {
4
+ fs: WavFileReaderFs;
5
+ filePath: string;
6
+ playbackSpeed?: number;
7
+ chunkDurationMs?: number;
8
+ loop?: boolean;
9
+ onEndOfFile?: () => void;
10
+ logger?: (message: string) => void;
11
+ }
12
+ export declare class SimulateFileAudioStreamAdapter implements AudioStreamInterface {
13
+ private fileReader;
14
+ private config;
15
+ private options;
16
+ private isInitialized;
17
+ private recording;
18
+ private dataCallback?;
19
+ private errorCallback?;
20
+ private statusCallback?;
21
+ private streamInterval?;
22
+ private currentBytePosition;
23
+ private startTime;
24
+ private pausedTime;
25
+ private hasReachedEnd;
26
+ constructor(options: SimulateFileOptions);
27
+ initialize(config: AudioStreamConfig): Promise<void>;
28
+ start(): Promise<void>;
29
+ stop(): Promise<void>;
30
+ isRecording(): boolean;
31
+ onData(callback: (data: AudioStreamData) => void): void;
32
+ onError(callback: (error: string) => void): void;
33
+ onStatusChange(callback: (isRecording: boolean) => void): void;
34
+ release(): Promise<void>;
35
+ /**
36
+ * Start the streaming process
37
+ */
38
+ private startStreaming;
39
+ /**
40
+ * Stream the next audio chunk
41
+ */
42
+ private streamNextChunk;
43
+ /**
44
+ * Get current playback statistics
45
+ */
46
+ getStatistics(): {
47
+ filePath: string;
48
+ isRecording: boolean;
49
+ currentTime: number;
50
+ totalDuration: number;
51
+ progress: number;
52
+ playbackSpeed: number | undefined;
53
+ currentBytePosition: number;
54
+ totalBytes: number;
55
+ hasReachedEnd: boolean;
56
+ header: import("../../utils/WavFileReader").WavFileHeader | null;
57
+ };
58
+ /**
59
+ * Seek to a specific time position
60
+ */
61
+ seekToTime(timeSeconds: number): void;
62
+ /**
63
+ * Set playback speed
64
+ */
65
+ setPlaybackSpeed(speed: number): void;
66
+ /**
67
+ * Reset file buffer to beginning
68
+ */
69
+ resetBuffer(): void;
70
+ /**
71
+ * Logger function
72
+ */
73
+ private log;
74
+ }
75
+ //# sourceMappingURL=SimulateFileAudioStreamAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SimulateFileAudioStreamAdapter.d.ts","sourceRoot":"","sources":["../../../../src/realtime-transcription/adapters/SimulateFileAudioStreamAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EAChB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAiB,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE1E,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,eAAe,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,IAAI,CAAA;IACxB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC;AAED,qBAAa,8BAA+B,YAAW,oBAAoB;IACzE,OAAO,CAAC,UAAU,CAAe;IAEjC,OAAO,CAAC,MAAM,CAAiC;IAE/C,OAAO,CAAC,OAAO,CAAqB;IAEpC,OAAO,CAAC,aAAa,CAAQ;IAE7B,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,YAAY,CAAC,CAAiC;IAEtD,OAAO,CAAC,aAAa,CAAC,CAAyB;IAE/C,OAAO,CAAC,cAAc,CAAC,CAAgC;IAEvD,OAAO,CAAC,cAAc,CAAC,CAAgC;IAEvD,OAAO,CAAC,mBAAmB,CAAI;IAE/B,OAAO,CAAC,SAAS,CAAI;IAErB,OAAO,CAAC,UAAU,CAAI;IAEtB,OAAO,CAAC,aAAa,CAAQ;gBAEjB,OAAO,EAAE,mBAAmB;IAWlC,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoDpD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA6BtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B,WAAW,IAAI,OAAO;IAItB,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAIvD,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIhD,cAAc,CAAC,QAAQ,EAAE,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAIxD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAsCtB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0DvB;;OAEG;IACH,aAAa;;;;;;;;;;;;IAkBb;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAmBrC;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAiBrC;;OAEG;IACH,WAAW,IAAI,IAAI;IAmBnB;;OAEG;IACH,OAAO,CAAC,GAAG;CAGZ"}
@@ -0,0 +1,6 @@
1
+ export { RealtimeTranscriber } from './RealtimeTranscriber';
2
+ export { SliceManager } from './SliceManager';
3
+ export type { WavFileWriterFs } from '../utils/WavFileWriter';
4
+ export type { AudioStreamData, AudioStreamConfig, AudioStreamInterface, RealtimeVadEvent, RealtimeTranscribeEvent, RealtimeStatsEvent, RealtimeTranscriberDependencies, RealtimeOptions, RealtimeTranscriberCallbacks, AudioSlice, AudioSliceNoData, MemoryUsage, } from './types';
5
+ export { VAD_PRESETS } from './types';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/realtime-transcription/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAG3D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAG7D,YAAY,EAEV,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EAGpB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,EAGlB,+BAA+B,EAC/B,eAAe,EACf,4BAA4B,EAG5B,UAAU,EACV,gBAAgB,EAChB,WAAW,GAEZ,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,222 @@
1
+ import type { TranscribeOptions, TranscribeResult, VadOptions } from '../index';
2
+ import type { WavFileWriterFs } from '../utils/WavFileWriter';
3
+ export interface AudioStreamData {
4
+ data: Uint8Array;
5
+ sampleRate: number;
6
+ channels: number;
7
+ timestamp: number;
8
+ }
9
+ export interface AudioStreamConfig {
10
+ sampleRate?: number;
11
+ channels?: number;
12
+ bitsPerSample?: number;
13
+ bufferSize?: number;
14
+ audioSource?: number;
15
+ }
16
+ export interface AudioStreamInterface {
17
+ initialize(config: AudioStreamConfig): Promise<void>;
18
+ start(): Promise<void>;
19
+ stop(): Promise<void>;
20
+ isRecording(): boolean;
21
+ onData(callback: (data: AudioStreamData) => void): void;
22
+ onError(callback: (error: string) => void): void;
23
+ onStatusChange(callback: (isRecording: boolean) => void): void;
24
+ release(): Promise<void>;
25
+ }
26
+ /**
27
+ * VAD Presets Overview:
28
+ *
29
+ * VAD Presets
30
+ * / | \
31
+ * Conservative Default Sensitive
32
+ * / | | \
33
+ * conservative very-conservative sensitive very-sensitive
34
+ * (0.7 thresh) (0.8 thresh) (0.3 thresh) (0.2 thresh)
35
+ * 500ms min 750ms min 100ms min 100ms min
36
+ * Clear speech Very clear Quiet env Catches whispers
37
+ *
38
+ * Specialized Presets
39
+ * / | \
40
+ * continuous meeting noisy
41
+ * (60s max) (45s max) (0.75 thresh)
42
+ * Lectures Multi-spk Strict for noise
43
+ *
44
+ * Key Parameters:
45
+ * - threshold: 0.0-1.0 (lower = more sensitive)
46
+ * - minSpeechDurationMs: Min duration to consider speech
47
+ * - minSilenceDurationMs: Min silence before ending speech
48
+ * - maxSpeechDurationS: Max continuous speech duration
49
+ * - speechPadMs: Padding around detected speech
50
+ * - samplesOverlap: Analysis window overlap (0.0-1.0)
51
+ */
52
+ export declare const VAD_PRESETS: {
53
+ default: {
54
+ threshold: number;
55
+ minSpeechDurationMs: number;
56
+ minSilenceDurationMs: number;
57
+ maxSpeechDurationS: number;
58
+ speechPadMs: number;
59
+ samplesOverlap: number;
60
+ };
61
+ sensitive: {
62
+ threshold: number;
63
+ minSpeechDurationMs: number;
64
+ minSilenceDurationMs: number;
65
+ maxSpeechDurationS: number;
66
+ speechPadMs: number;
67
+ samplesOverlap: number;
68
+ };
69
+ 'very-sensitive': {
70
+ threshold: number;
71
+ minSpeechDurationMs: number;
72
+ minSilenceDurationMs: number;
73
+ maxSpeechDurationS: number;
74
+ speechPadMs: number;
75
+ samplesOverlap: number;
76
+ };
77
+ conservative: {
78
+ threshold: number;
79
+ minSpeechDurationMs: number;
80
+ minSilenceDurationMs: number;
81
+ maxSpeechDurationS: number;
82
+ speechPadMs: number;
83
+ samplesOverlap: number;
84
+ };
85
+ 'very-conservative': {
86
+ threshold: number;
87
+ minSpeechDurationMs: number;
88
+ minSilenceDurationMs: number;
89
+ maxSpeechDurationS: number;
90
+ speechPadMs: number;
91
+ samplesOverlap: number;
92
+ };
93
+ continuous: {
94
+ threshold: number;
95
+ minSpeechDurationMs: number;
96
+ minSilenceDurationMs: number;
97
+ maxSpeechDurationS: number;
98
+ speechPadMs: number;
99
+ samplesOverlap: number;
100
+ };
101
+ meeting: {
102
+ threshold: number;
103
+ minSpeechDurationMs: number;
104
+ minSilenceDurationMs: number;
105
+ maxSpeechDurationS: number;
106
+ speechPadMs: number;
107
+ samplesOverlap: number;
108
+ };
109
+ noisy: {
110
+ threshold: number;
111
+ minSpeechDurationMs: number;
112
+ minSilenceDurationMs: number;
113
+ maxSpeechDurationS: number;
114
+ speechPadMs: number;
115
+ samplesOverlap: number;
116
+ };
117
+ };
118
+ export interface RealtimeVadEvent {
119
+ type: 'speech_start' | 'speech_end' | 'speech_continue' | 'silence';
120
+ timestamp: number;
121
+ lastSpeechDetectedTime: number;
122
+ confidence: number;
123
+ duration: number;
124
+ sliceIndex: number;
125
+ analysis?: {
126
+ averageAmplitude: number;
127
+ peakAmplitude: number;
128
+ spectralCentroid?: number;
129
+ zeroCrossingRate?: number;
130
+ };
131
+ currentThreshold?: number;
132
+ environmentNoise?: number;
133
+ }
134
+ export interface RealtimeTranscribeEvent {
135
+ type: 'start' | 'transcribe' | 'end' | 'error';
136
+ sliceIndex: number;
137
+ data?: TranscribeResult;
138
+ isCapturing: boolean;
139
+ processTime: number;
140
+ recordingTime: number;
141
+ memoryUsage?: {
142
+ slicesInMemory: number;
143
+ totalSamples: number;
144
+ estimatedMB: number;
145
+ };
146
+ vadEvent?: RealtimeVadEvent;
147
+ }
148
+ export interface RealtimeOptions {
149
+ audioSliceSec?: number;
150
+ audioMinSec?: number;
151
+ maxSlicesInMemory?: number;
152
+ vadOptions?: VadOptions;
153
+ vadPreset?: keyof typeof VAD_PRESETS;
154
+ autoSliceOnSpeechEnd?: boolean;
155
+ autoSliceThreshold?: number;
156
+ transcribeOptions?: TranscribeOptions;
157
+ initialPrompt?: string;
158
+ promptPreviousSlices?: boolean;
159
+ audioOutputPath?: string;
160
+ audioStreamConfig?: AudioStreamConfig;
161
+ logger?: (message: string) => void;
162
+ }
163
+ export interface AudioSlice {
164
+ index: number;
165
+ data: Uint8Array;
166
+ sampleCount: number;
167
+ startTime: number;
168
+ endTime: number;
169
+ isProcessed: boolean;
170
+ isReleased: boolean;
171
+ }
172
+ export interface AudioSliceNoData extends Omit<AudioSlice, 'data'> {
173
+ }
174
+ export interface MemoryUsage {
175
+ slicesInMemory: number;
176
+ totalSamples: number;
177
+ estimatedMB: number;
178
+ }
179
+ export interface RealtimeStatsEvent {
180
+ timestamp: number;
181
+ type: 'slice_processed' | 'vad_change' | 'memory_change' | 'status_change';
182
+ data: {
183
+ isActive: boolean;
184
+ isTranscribing: boolean;
185
+ vadEnabled: boolean;
186
+ audioStats: any;
187
+ vadStats: any;
188
+ sliceStats: any;
189
+ };
190
+ }
191
+ export interface RealtimeTranscriberCallbacks {
192
+ onBeginTranscribe?: (sliceInfo: {
193
+ audioData: Uint8Array;
194
+ sliceIndex: number;
195
+ duration: number;
196
+ vadEvent?: RealtimeVadEvent;
197
+ }) => Promise<boolean>;
198
+ onTranscribe?: (event: RealtimeTranscribeEvent) => void;
199
+ onVad?: (event: RealtimeVadEvent) => void;
200
+ onError?: (error: string) => void;
201
+ onStatusChange?: (isActive: boolean) => void;
202
+ onStatsUpdate?: (event: RealtimeStatsEvent) => void;
203
+ }
204
+ export type WhisperContextLike = {
205
+ transcribeData: (data: ArrayBuffer, options: TranscribeOptions) => {
206
+ stop: () => Promise<void>;
207
+ promise: Promise<TranscribeResult>;
208
+ };
209
+ };
210
+ export type WhisperVadContextLike = {
211
+ detectSpeechData: (data: ArrayBuffer, options: VadOptions) => Promise<Array<{
212
+ t0: number;
213
+ t1: number;
214
+ }>>;
215
+ };
216
+ export interface RealtimeTranscriberDependencies {
217
+ whisperContext: WhisperContextLike;
218
+ vadContext?: WhisperVadContextLike;
219
+ audioStream: AudioStreamInterface;
220
+ fs?: WavFileWriterFs;
221
+ }
222
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/realtime-transcription/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ export interface WavFileReaderFs {
2
+ readFile: (filePath: string, encoding: string) => Promise<string>;
3
+ exists: (filePath: string) => Promise<boolean>;
4
+ unlink: (filePath: string) => Promise<void>;
5
+ }
6
+ export interface WavFileHeader {
7
+ sampleRate: number;
8
+ channels: number;
9
+ bitsPerSample: number;
10
+ dataSize: number;
11
+ duration: number;
12
+ }
13
+ export declare class WavFileReader {
14
+ private filePath;
15
+ private header;
16
+ private audioData;
17
+ private fs;
18
+ constructor(fs: {
19
+ exists: (filePath: string) => Promise<boolean>;
20
+ readFile: (filePath: string, encoding: string) => Promise<string>;
21
+ }, filePath: string);
22
+ /**
23
+ * Read and parse the WAV file
24
+ */
25
+ initialize(): Promise<void>;
26
+ /**
27
+ * Parse WAV file header
28
+ */
29
+ private static parseWavHeader;
30
+ /**
31
+ * Get audio data slice
32
+ */
33
+ getAudioSlice(startByte: number, lengthBytes: number): Uint8Array | null;
34
+ getAudioData(): Uint8Array | null;
35
+ /**
36
+ * Get WAV file header information
37
+ */
38
+ getHeader(): WavFileHeader | null;
39
+ /**
40
+ * Get total audio data size
41
+ */
42
+ getTotalDataSize(): number;
43
+ /**
44
+ * Convert byte position to time in seconds
45
+ */
46
+ byteToTime(bytePosition: number): number;
47
+ /**
48
+ * Convert time in seconds to byte position
49
+ */
50
+ timeToByte(timeSeconds: number): number;
51
+ /**
52
+ * Get file statistics
53
+ */
54
+ getStatistics(): {
55
+ filePath: string;
56
+ header: WavFileHeader | null;
57
+ totalDataSize: number;
58
+ isInitialized: boolean;
59
+ };
60
+ }
61
+ //# sourceMappingURL=WavFileReader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WavFileReader.d.ts","sourceRoot":"","sources":["../../../src/utils/WavFileReader.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACjE,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9C,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAQ;IAExB,OAAO,CAAC,MAAM,CAA6B;IAE3C,OAAO,CAAC,SAAS,CAA0B;IAE3C,OAAO,CAAC,EAAE,CAGT;gBAEW,EAAE,EAAE;QACd,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;QAC9C,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;KAClE,EAAE,QAAQ,EAAE,MAAM;IAKnB;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IA0D7B;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAexE,YAAY,IAAI,UAAU,GAAG,IAAI;IAIjC;;OAEG;IACH,SAAS,IAAI,aAAa,GAAG,IAAI;IAIjC;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAUxC;;OAEG;IACH,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IAUvC;;OAEG;IACH,aAAa;;;;;;CAQd"}
@@ -0,0 +1,57 @@
1
+ export interface WavFileConfig {
2
+ sampleRate: number;
3
+ channels: number;
4
+ bitsPerSample: number;
5
+ }
6
+ export interface WavFileWriterFs {
7
+ writeFile: (filePath: string, data: string, encoding: string) => Promise<void>;
8
+ appendFile: (filePath: string, data: string, encoding: string) => Promise<void>;
9
+ readFile: (filePath: string, encoding: string) => Promise<string>;
10
+ exists: (filePath: string) => Promise<boolean>;
11
+ unlink: (filePath: string) => Promise<void>;
12
+ }
13
+ export declare class WavFileWriter {
14
+ private fs;
15
+ private filePath;
16
+ private config;
17
+ private dataSize;
18
+ private isWriting;
19
+ private writeQueue;
20
+ constructor(fs: WavFileWriterFs, filePath: string, config: WavFileConfig);
21
+ /**
22
+ * Initialize the WAV file with headers
23
+ */
24
+ initialize(): Promise<void>;
25
+ /**
26
+ * Append PCM audio data to the WAV file
27
+ */
28
+ appendAudioData(audioData: Uint8Array): Promise<void>;
29
+ /**
30
+ * Process the write queue to avoid blocking
31
+ */
32
+ private processWriteQueue;
33
+ /**
34
+ * Finalize the WAV file by updating the header with correct sizes
35
+ */
36
+ finalize(): Promise<void>;
37
+ /**
38
+ * Create WAV file header
39
+ */
40
+ private createWavHeader;
41
+ /**
42
+ * Cancel writing and cleanup
43
+ */
44
+ cancel(): Promise<void>;
45
+ /**
46
+ * Get current file statistics
47
+ */
48
+ getStatistics(): {
49
+ filePath: string;
50
+ dataSize: number;
51
+ durationSec: number;
52
+ isWriting: boolean;
53
+ queuedChunks: number;
54
+ estimatedFileSizeMB: number;
55
+ };
56
+ }
57
+ //# sourceMappingURL=WavFileWriter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WavFileWriter.d.ts","sourceRoot":"","sources":["../../../src/utils/WavFileWriter.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9E,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/E,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACjE,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9C,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC5C;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAiB;IAE3B,OAAO,CAAC,QAAQ,CAAQ;IAExB,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO,CAAC,QAAQ,CAAI;IAEpB,OAAO,CAAC,SAAS,CAAQ;IAEzB,OAAO,CAAC,UAAU,CAAmB;gBAEzB,EAAE,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;IAMxE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBjC;;OAEG;IACG,eAAe,CAAC,SAAS,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3D;;OAEG;YACW,iBAAiB;IA+B/B;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B/B;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAe7B;;OAEG;IACH,aAAa;;;;;;;;CAYd"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Convert base64 string to Uint8Array
3
+ */
4
+ export declare function base64ToUint8Array(base64: string): Uint8Array;
5
+ /**
6
+ * Convert Uint8Array to base64 string
7
+ */
8
+ export declare function uint8ArrayToBase64(buffer: Uint8Array): string;
9
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../src/utils/common.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAG7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAG7D"}
package/package.json CHANGED
@@ -1,12 +1,20 @@
1
1
  {
2
2
  "name": "whisper.rn",
3
- "version": "0.5.0-rc.1",
3
+ "version": "0.5.0-rc.10",
4
4
  "description": "React Native binding of whisper.cpp",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
7
7
  "types": "lib/typescript/index.d.ts",
8
8
  "react-native": "src/index",
9
9
  "source": "src/index",
10
+ "exports": {
11
+ "./*": {
12
+ "import": "./lib/module/*",
13
+ "require": "./lib/commonjs/*",
14
+ "types": "./lib/typescript/*",
15
+ "react-native": "src/*"
16
+ }
17
+ },
10
18
  "files": [
11
19
  "src",
12
20
  "lib",
@@ -29,7 +37,7 @@
29
37
  ],
30
38
  "scripts": {
31
39
  "bootstrap": "./scripts/bootstrap.sh",
32
- "docgen": "typedoc src/index.ts --plugin typedoc-plugin-markdown --excludePrivate --readme none --out docs/API",
40
+ "docgen": "typedoc src/index.ts src/realtime-transcription/index.ts --plugin typedoc-plugin-markdown --excludePrivate --readme none --out docs/API",
33
41
  "lint": "eslint \"**/*.{js,ts,tsx}\"",
34
42
  "typecheck": "tsc --noEmit",
35
43
  "build": "bob build",
@@ -62,6 +70,7 @@
62
70
  "@commitlint/config-conventional": "^17.0.2",
63
71
  "@evilmartians/lefthook": "^1.2.2",
64
72
  "@fugood/eslint-config-react": "^0.5.0",
73
+ "@fugood/react-native-audio-pcm-stream": "^1.1.4",
65
74
  "@react-native/babel-preset": "0.76.9",
66
75
  "@react-native/metro-config": "0.76.9",
67
76
  "@release-it/conventional-changelog": "^5.0.0",
@@ -83,13 +92,13 @@
83
92
  "typedoc-plugin-markdown": "^3.15.3",
84
93
  "typescript": "^4.9.5"
85
94
  },
86
- "resolutions": {
87
- "@types/react": "17.0.21"
88
- },
89
95
  "peerDependencies": {
90
96
  "react": "*",
91
97
  "react-native": "*"
92
98
  },
99
+ "resolutions": {
100
+ "@types/react": "17.0.21"
101
+ },
93
102
  "engines": {
94
103
  "node": ">=18"
95
104
  },
@@ -146,5 +155,8 @@
146
155
  "type": "all",
147
156
  "jsSrcsDir": "./src/"
148
157
  },
149
- "packageManager": "yarn@1.22.22"
158
+ "packageManager": "yarn@1.22.22",
159
+ "dependencies": {
160
+ "safe-buffer": "^5.2.1"
161
+ }
150
162
  }
@@ -42,10 +42,11 @@ export enum AudioSessionModeIos {
42
42
 
43
43
  const checkPlatform = () => {
44
44
  if (Platform.OS !== 'ios') throw new Error('Only supported on iOS')
45
+ console.warn('AudioSessionIos is deprecated. To use whisper.rn for realtime transcription, use the new RealtimeTranscriber instead.')
45
46
  }
46
47
 
47
48
  /**
48
- * AudioSession Utility, iOS only.
49
+ * [Deprecated] AudioSession Utility, iOS only.
49
50
  */
50
51
  export default {
51
52
  Category: AudioSessionCategoryIos,
@@ -63,7 +64,7 @@ export default {
63
64
  options: result.options?.map((option: string) => (option.replace('AVAudioSessionCategoryOption', '') as AudioSessionCategoryOptionIos)),
64
65
  }
65
66
  },
66
-
67
+
67
68
  getCurrentMode: async (): Promise<AudioSessionModeIos> => {
68
69
  checkPlatform()
69
70
  const mode = await RNWhisper.getAudioSessionCurrentMode()
@@ -100,6 +100,8 @@ export type VadSegment = {
100
100
  }
101
101
 
102
102
  export interface Spec extends TurboModule {
103
+ toggleNativeLog(enabled: boolean): Promise<void>
104
+
103
105
  getConstants(): {
104
106
  useCoreML: boolean
105
107
  coreMLAllowFallback: boolean