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
TypeScript
/**
* 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