UNPKG

web-asr-core

Version:

WebASR Core - Browser-based speech processing with VAD, WakeWord and Whisper - Unified all-in-one version

127 lines 3.64 kB
/** * AudioRingBuffer - 環形緩衝區for音訊資料 (Web Audio API 增強版) * * 特點: * - 固定大小的環形緩衝區,避免無限增長 * - 支援連續寫入和讀取 * - 自動覆蓋舊資料(當緩衝區滿時) * - 線程安全(如果使用 SharedArrayBuffer) * - Web Audio API 整合功能 */ export declare class AudioRingBuffer { private buffer; private capacity; private writePos; private readPos; private size; private useSharedArrayBuffer; private audioContext?; private scriptProcessor?; private audioWorklet?; /** * @param capacity 緩衝區容量(樣本數) * @param useSharedArrayBuffer 是否使用 SharedArrayBuffer(for Web Worker) */ constructor(capacity?: number, useSharedArrayBuffer?: boolean); /** * 寫入音訊資料 * @param samples 要寫入的音訊樣本 * @returns 實際寫入的樣本數 */ write(samples: Float32Array): number; /** * 讀取音訊資料 * @param length 要讀取的樣本數 * @returns 讀取的音訊資料,如果資料不足返回 null */ read(length: number): Float32Array | null; /** * 查看資料但不移動讀取位置 * @param length 要查看的樣本數 * @returns 音訊資料,如果資料不足返回 null */ peek(length: number): Float32Array | null; /** * 跳過指定數量的樣本 * @param length 要跳過的樣本數 * @returns 實際跳過的樣本數 */ skip(length: number): number; /** * 獲取可用的樣本數 */ available(): number; /** * 獲取剩餘容量 */ remaining(): number; /** * 清空緩衝區 */ clear(): void; /** * 是否為空 */ isEmpty(): boolean; /** * 是否已滿 */ isFull(): boolean; /** * 獲取緩衝區的狀態資訊 */ getStats(): { capacity: number; size: number; available: number; remaining: number; writePos: number; readPos: number; useSharedArrayBuffer: boolean; }; /** * 讀取所有可用資料 * @returns 所有可用的音訊資料 */ readAll(): Float32Array; /** * 從緩衝區獲取最新的 N 個樣本(不移動指針) * @param length 要獲取的樣本數 * @returns 最新的音訊資料 */ getLatest(length: number): Float32Array | null; /** * 獲取緩衝區容量 */ getCapacity(): number; /** * 連接到 Web Audio API 節點進行即時處理 */ connectToAudioNode(audioContext: AudioContext, useWorklet?: boolean): Promise<AudioNode>; /** * 創建 AudioWorklet 節點 */ private createAudioWorklet; /** * 創建 ScriptProcessorNode(降級方案) */ private createScriptProcessor; /** * 將 RingBuffer 資料轉換為 AudioBuffer(用於播放) */ toAudioBuffer(audioContext: AudioContext, length?: number): AudioBuffer | null; /** * 從 AudioBuffer 寫入資料 */ fromAudioBuffer(audioBuffer: AudioBuffer, channelIndex?: number): number; /** * 使用 OfflineAudioContext 進行批次處理 */ processOffline(processor: (context: OfflineAudioContext, buffer: AudioBuffer) => Promise<AudioNode>, outputSampleRate?: number): Promise<Float32Array>; /** * 使用 Web Audio API 進行重採樣 */ resample(targetSampleRate: number): Promise<Float32Array>; } export default AudioRingBuffer; //# sourceMappingURL=AudioRingBuffer.d.ts.map