web-asr-core
Version:
WebASR Core - Browser-based speech processing with VAD, WakeWord and Whisper - Unified all-in-one version
146 lines • 3.58 kB
TypeScript
/**
* VadService - VAD 服務類別(Event Architecture v2)
*
* 提供事件驅動的語音活動檢測服務
* 包裝無狀態的 VAD 處理函數並提供事件發射功能
*/
import { EventEmitter } from '../core/EventEmitter';
import { AudioRingBuffer } from '../utils/AudioRingBuffer';
import type { VadState, VadParams, VadResult } from '../types';
/**
* VAD 服務事件定義
*/
export interface VadEvents {
ready: {
config: {
sampleRate: number;
windowSize: number;
threshold: number;
};
timestamp: number;
};
speechStart: {
timestamp: number;
score: number;
};
speechEnd: {
timestamp: number;
duration: number;
};
process: {
result: {
detected: boolean;
score: number;
};
timestamp: number;
};
statistics: {
chunksProcessed: number;
averageProcessingTime: number;
speechDuration: number;
silenceDuration: number;
};
error: {
error: Error;
context: string;
timestamp: number;
};
}
/**
* VAD 服務特定選項
*/
export interface VadServiceOptions {
threshold?: number;
windowSize?: number;
minSpeechFrames?: number;
speechEndFrames?: number;
}
/**
* VadService - 事件驅動的 VAD 服務
*
* @example
* ```typescript
* const vad = new VadService();
* // 或使用自訂選項
* const vad = new VadService({ threshold: 0.6 });
*
* // 訂閱事件
* vad.on('speechStart', ({ timestamp, score }) => {
* console.log('Speech started:', timestamp, score);
* });
*
* vad.on('speechEnd', ({ duration }) => {
* console.log('Speech duration:', duration);
* });
*
* // 初始化
* await vad.initialize();
*
* // 處理音訊
* let state = vad.createState();
* const params = vad.createParams();
*
* const result = await vad.process(state, audioChunk, params);
* state = result.state;
* ```
*/
export declare class VadService extends EventEmitter<VadEvents> {
private session;
private chunker;
private lastSpeechStart;
private config;
private options;
private stats;
constructor(options?: VadServiceOptions);
/**
* 初始化 VAD 服務
* @param modelUrl VAD 模型 URL(可選)
* @returns Promise<void>
*/
initialize(modelUrl?: string): Promise<void>;
/**
* 處理單個音訊塊
* @param state VAD 狀態
* @param audio 音訊資料(512 樣本 @ 16kHz)
* @param params VAD 參數
* @returns VAD 結果
*/
process(state: VadState, audio: Float32Array, params: VadParams): Promise<VadResult>;
/**
* 處理連續音訊流
* @param ringBuffer 環形緩衝區
* @param state VAD 狀態
* @param params VAD 參數
* @returns 更新後的狀態
*/
processStream(ringBuffer: AudioRingBuffer, state: VadState, params: VadParams): Promise<VadState>;
/**
* 創建 VAD 狀態
* @returns 新的 VAD 狀態
*/
createState(): VadState;
/**
* 創建 VAD 參數
* @param overrides 參數覆蓋
* @returns VAD 參數
*/
createParams(overrides?: Partial<VadParams>): VadParams;
/**
* 重置服務狀態
*/
reset(): void;
/**
* 更新統計資料
*/
private updateStatistics;
/**
* 重置統計資料
*/
private resetStatistics;
/**
* 清理資源
*/
dispose(): void;
}
export default VadService;
//# sourceMappingURL=VadService.d.ts.map