UNPKG

web-asr-core

Version:

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

261 lines 6.4 kB
/** * Web Speech API 純函數服務 * * @description 提供語音合成(TTS)和語音識別(STT)的無狀態純函數實作 * * 架構設計: * 1. Resources: SpeechSynthesis/SpeechRecognition 實例(重複使用) * 2. State: 語音狀態(由呼叫者維護) * 3. Processing: 純函數處理(無副作用) * * @module speech */ import { ConfigManager } from '../utils/config-manager'; /** * TTS(文字轉語音)資源 */ export interface TTSResources { /** 語音合成器實例 */ synth: SpeechSynthesis; /** 可用的語音列表 */ voices: SpeechSynthesisVoice[]; /** 是否支援語音合成 */ isSupported: boolean; } /** * STT(語音轉文字)資源 */ export interface STTResources { /** 語音識別器實例 */ recognition: any | null; /** 是否支援語音識別 */ isSupported: boolean; /** 支援的語言列表 */ supportedLanguages: string[]; } /** * TTS 狀態 */ export interface TTSState { /** 是否正在說話 */ isSpeaking: boolean; /** 是否暫停 */ isPaused: boolean; /** 當前文字 */ currentText: string; /** 當前語音 */ currentVoice: string | null; /** 語速(0.1-10) */ rate: number; /** 音調(0-2) */ pitch: number; /** 音量(0-1) */ volume: number; /** 佇列中的文字 */ queue: string[]; } /** * STT 狀態 */ export interface STTState { /** 是否正在監聽 */ isListening: boolean; /** 是否連續識別 */ continuous: boolean; /** 識別語言 */ language: string; /** 暫時結果 */ interimTranscript: string; /** 最終結果 */ finalTranscript: string; /** 置信度分數 */ confidence: number; /** 錯誤訊息 */ error: string | null; /** 無語音超時計數器 */ noSpeechCounter: number; } /** * TTS 參數 */ export interface TTSParams { /** 要說的文字 */ text: string; /** 語音名稱或語言代碼 */ voice?: string; /** 語速(0.1-10,預設 1) */ rate?: number; /** 音調(0-2,預設 1) */ pitch?: number; /** 音量(0-1,預設 1) */ volume?: number; /** 是否加入佇列(預設 false,會中斷當前語音) */ queue?: boolean; } /** * STT 參數 */ export interface STTParams { /** 識別語言(預設 'zh-TW') */ language?: string; /** 是否連續識別(預設 false) */ continuous?: boolean; /** 是否返回暫時結果(預設 true) */ interimResults?: boolean; /** 最大替代結果數(預設 1) */ maxAlternatives?: number; } /** * TTS 結果 */ export interface TTSResult { /** 更新後的狀態 */ state: TTSState; /** 是否成功開始說話 */ started: boolean; /** 錯誤訊息 */ error?: string; } /** * STT 結果 */ export interface STTResult { /** 更新後的狀態 */ state: STTState; /** 識別的文字 */ transcript: string; /** 是否為最終結果 */ isFinal: boolean; /** 置信度(0-1) */ confidence: number; /** 替代結果 */ alternatives?: Array<{ transcript: string; confidence: number; }>; } /** * 載入 TTS 資源 * * @returns TTS 資源物件 */ export declare function loadTTSResources(): Promise<TTSResources>; /** * 載入 STT 資源 * * @returns STT 資源物件 */ export declare function loadSTTResources(): STTResources; /** * 創建初始 TTS 狀態 * * @param config 配置管理器 * @returns 初始 TTS 狀態 */ export declare function createTTSState(config?: ConfigManager): TTSState; /** * 創建初始 STT 狀態 * * @param config 配置管理器 * @returns 初始 STT 狀態 */ export declare function createSTTState(config?: ConfigManager): STTState; /** * 開始說話(TTS) * * @param resources TTS 資源 * @param state 當前狀態 * @param params 說話參數 * @returns 更新後的結果 */ export declare function speak(resources: TTSResources, state: TTSState, params: TTSParams): TTSResult; /** * 暫停說話 * * @param resources TTS 資源 * @param state 當前狀態 * @returns 更新後的狀態 */ export declare function pauseSpeech(resources: TTSResources, state: TTSState): TTSState; /** * 恢復說話 * * @param resources TTS 資源 * @param state 當前狀態 * @returns 更新後的狀態 */ export declare function resumeSpeech(resources: TTSResources, state: TTSState): TTSState; /** * 停止說話 * * @param resources TTS 資源 * @param state 當前狀態 * @returns 更新後的狀態 */ export declare function stopSpeech(resources: TTSResources, state: TTSState): TTSState; /** * 開始語音識別(STT) * * @param resources STT 資源 * @param state 當前狀態 * @param params 識別參數 * @returns 更新後的狀態 */ export declare function startRecognition(resources: STTResources, state: STTState, params?: STTParams): STTState; /** * 停止語音識別 * * @param resources STT 資源 * @param state 當前狀態 * @returns 更新後的狀態 */ export declare function stopRecognition(resources: STTResources, state: STTState): STTState; /** * 處理識別結果 * * @param state 當前狀態 * @param event 識別事件 * @returns 更新後的結果 */ export declare function processRecognitionResult(state: STTState, event: any): STTResult; /** * 處理識別錯誤 * * @param state 當前狀態 * @param error 錯誤事件 * @returns 更新後的狀態 */ export declare function processRecognitionError(state: STTState, error: any): STTState; /** * 取得可用語音列表 * * @param resources TTS 資源 * @param language 語言篩選(可選) * @returns 語音列表 */ export declare function getAvailableVoices(resources: TTSResources, language?: string): Array<{ name: string; lang: string; localService: boolean; }>; /** * 檢查瀏覽器支援 * * @returns 支援狀態 */ export declare function checkBrowserSupport(): { tts: boolean; stt: boolean; details: { hasSpeechSynthesis: boolean; hasSpeechRecognition: boolean; hasWebkitSpeechRecognition: boolean; }; }; declare global { interface Window { SpeechRecognition: any; webkitSpeechRecognition: any; } } //# sourceMappingURL=speech.d.ts.map