UNPKG

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
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