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