whisper.rn
Version:
React Native binding of whisper.cpp
147 lines • 4.09 kB
TypeScript
import type { VadOptions } from '../index';
import type { RealtimeOptions, RealtimeTranscribeEvent, RealtimeTranscriberCallbacks, RealtimeTranscriberDependencies, AudioSliceNoData } from './types';
/**
* RealtimeTranscriber provides real-time audio transcription with VAD support.
*
* Features:
* - Automatic slice management based on duration
* - VAD-based speech detection and auto-slicing
* - Configurable auto-slice mechanism that triggers on speech_end/silence events
* - Memory management for audio slices
* - Queue-based transcription processing
*/
export declare class RealtimeTranscriber {
private whisperContext;
private vadContext?;
private audioStream;
private fs?;
private sliceManager;
private callbacks;
private options;
private isActive;
private isTranscribing;
private vadEnabled;
private isSpeechActive;
private transcriptionQueue;
private wavFileWriter;
private lastSpeechDetectedTime;
private lastStatsSnapshot;
private lastRealtimeTranscriptionTime;
private transcriptionResults;
private vadEvents;
private activeTranscriptions;
constructor(dependencies: RealtimeTranscriberDependencies, options?: RealtimeOptions, callbacks?: RealtimeTranscriberCallbacks);
/**
* Start realtime transcription
*/
start(): Promise<void>;
/**
* Stop realtime transcription
*/
stop(): Promise<void>;
/**
* Handle incoming audio data
*/
private handleAudioData;
/**
* Process audio chunk through the VAD pipeline
*/
private processAudioChunk;
private handleSpeechDetected;
private handleSpeechContinue;
private handleSpeechEnded;
/**
* Trigger transcription for the current slice
*/
private triggerTranscription;
private emitVadEvent;
private isProcessingTranscriptionQueue;
private processingPromise;
/**
* Process the transcription queue
*/
private processTranscriptionQueue;
/**
* Build prompt from initial prompt and previous slices
*/
private buildPrompt;
/**
* Process a single transcription
*/
private processTranscription;
/**
* Handle audio stream end
*/
private handleAudioEnd;
/**
* Handle audio status changes
*/
private handleAudioStatusChange;
/**
* Handle errors from components
*/
private handleError;
/**
* Update callbacks
*/
updateCallbacks(callbacks: Partial<RealtimeTranscriberCallbacks>): void;
/**
* Update VAD options dynamically (delegates to VAD context)
*/
updateVadOptions(options: Partial<VadOptions>): void;
/**
* Get current statistics
*/
getStatistics(): {
isActive: boolean;
isTranscribing: boolean;
vadEnabled: boolean;
audioStats: {
isRecording: boolean;
accumulatedSamples: number;
};
vadStats: {
enabled: boolean;
contextAvailable: boolean;
lastSpeechDetectedTime: number;
} | null;
sliceStats: {
currentSliceIndex: number;
transcribeSliceIndex: number;
totalSlices: number;
memoryUsage: import("./types").MemoryUsage;
};
};
/**
* Get all transcription results
*/
getTranscriptionResults(): Array<{
slice: AudioSliceNoData;
transcribeEvent: RealtimeTranscribeEvent;
}>;
/**
* Force move to the next slice, finalizing the current one regardless of capacity
*/
nextSlice(): Promise<void>;
/**
* Reset all components
*/
reset(): void;
/**
* Release all resources
*/
release(): Promise<void>;
/**
* Emit stats update event if stats have changed significantly
*/
private emitStatsUpdate;
/**
* Determine if stats update should be emitted
*/
private static shouldEmitStatsUpdate;
/**
* Logger function
*/
private log;
}
//# sourceMappingURL=RealtimeTranscriber.d.ts.map