web-asr-core
Version:
WebASR Core - Browser-based speech processing with VAD, WakeWord and Whisper - Unified all-in-one version
182 lines • 4.66 kB
TypeScript
import { ConfigManager } from '../utils/config-manager';
/**
* 音訊裝置資訊
*/
export interface AudioDeviceInfo {
/** 裝置 ID */
deviceId: string;
/** 裝置標籤(名稱) */
label: string;
/** 裝置類型 */
kind: 'audioinput' | 'audiooutput';
/** 群組 ID(相同物理裝置的不同端口) */
groupId: string;
/** 是否為預設裝置 */
isDefault?: boolean;
}
/**
* 音訊擷取選項
*/
export interface AudioCaptureOptions {
/** 裝置 ID(可選,不指定則使用預設) */
deviceId?: string;
/** 目標採樣率 */
sampleRate?: number;
/** 聲道數 */
channelCount?: number;
/** 是否關閉回音消除 */
echoCancellation?: boolean;
/** 是否關閉噪音抑制 */
noiseSuppression?: boolean;
/** 是否關閉自動增益控制 */
autoGainControl?: boolean;
/** 緩衝區大小(ScriptProcessor 用) */
bufferSize?: number;
/** 是否使用 AudioWorklet(優先) */
useAudioWorklet?: boolean;
}
/**
* 音訊資料回調函數
*/
export type AudioDataCallback = (audioData: Float32Array, timestamp: number) => void;
/**
* 音訊擷取狀態
*/
export interface CaptureState {
/** 是否正在擷取 */
isCapturing: boolean;
/** 當前裝置 ID */
currentDeviceId?: string;
/** 實際採樣率 */
actualSampleRate?: number;
/** 實際聲道數 */
actualChannelCount?: number;
/** 已擷取的樣本總數 */
totalSamples: number;
/** 開始時間 */
startTime?: number;
}
/**
* AudioCapture - 麥克風音訊擷取服務
*
* 提供完整的麥克風管理功能:
* - 列舉所有音訊輸入裝置
* - 選擇特定麥克風
* - 擷取原始音訊資料
* - 自動重採樣到目標採樣率
* - 支援 AudioWorklet 和 ScriptProcessor
*/
export declare class AudioCapture {
private config;
private audioContext?;
private mediaStream?;
private sourceNode?;
private processorNode?;
private resampler;
private callbacks;
private state;
private audioWorkletLoaded;
constructor(config?: ConfigManager);
/**
* 獲取所有音訊輸入裝置列表
* @returns 音訊裝置資訊陣列
*/
getAudioDevices(): Promise<AudioDeviceInfo[]>;
/**
* 獲取預設麥克風
*/
getDefaultDevice(): Promise<AudioDeviceInfo | null>;
/**
* 開始音訊擷取
* @param options 擷取選項
*/
startCapture(options?: AudioCaptureOptions): Promise<void>;
/**
* 創建 AudioWorklet 處理器
*/
private createAudioWorkletProcessor;
/**
* 創建 ScriptProcessor(降級方案)
*/
private createScriptProcessor;
/**
* 處理音訊資料
*/
private processAudioData;
/**
* 停止音訊擷取
*/
stopCapture(): void;
/**
* 暫停音訊擷取(保持連接但停止處理)
*/
pause(): void;
/**
* 恢復音訊擷取
*/
resume(): void;
/**
* 註冊音訊資料回調
* @param callback 回調函數
*/
onAudioData(callback: AudioDataCallback): void;
/**
* 移除音訊資料回調
* @param callback 回調函數
*/
offAudioData(callback: AudioDataCallback): void;
/**
* 清除所有回調
*/
clearCallbacks(): void;
/**
* 獲取當前擷取狀態
*/
getState(): CaptureState;
/**
* 獲取擷取統計資訊
*/
getStats(): {
isCapturing: boolean;
duration: number;
totalSamples: number;
sampleRate?: number;
deviceLabel?: string;
};
/**
* 切換麥克風裝置
* @param deviceId 新裝置 ID
*/
switchDevice(deviceId: string): Promise<void>;
/**
* 監聽裝置變更
*/
onDeviceChange(callback: (devices: AudioDeviceInfo[]) => void): void;
/**
* 釋放所有資源
*/
dispose(): void;
/**
* 檢查瀏覽器相容性
*/
static checkBrowserSupport(): {
getUserMedia: boolean;
audioContext: boolean;
audioWorklet: boolean;
mediaRecorder: boolean;
};
}
/**
* 獲取全域音訊擷取實例
*/
export declare function getAudioCapture(): AudioCapture;
/**
* 便利函數:快速開始擷取
*/
export declare function startAudioCapture(callback: AudioDataCallback, options?: AudioCaptureOptions): Promise<AudioCapture>;
/**
* 便利函數:列出所有麥克風
*/
export declare function listMicrophones(): Promise<AudioDeviceInfo[]>;
export default AudioCapture;
//# sourceMappingURL=audio-capture.d.ts.map