// ============================================================ // EdgeProcessor — 边缘预处理(VAD + 关键帧检测) // 职责:浏览器端语音活动检测、关键帧筛选 // 技术:@ricky0123/vad-web(VAD)、ONNX Runtime Web(关键帧检测) // ============================================================ import { useCallback, useState } from "react"; export interface VADOptions { /** 语音结束回调,携带录音 Float32Array */ onSpeechEnd?: (audio: Float32Array) => void; /** 语音开始回调 */ onSpeechStart?: () => void; } export function useVAD(_options?: VADOptions) { const [isSpeaking] = useState(false); // TODO: 初始化 @ricky0123/vad-web,加载后设为 true const isReady = false; // TODO: 实现 VAD 初始化 // 1. 加载 @ricky0123/vad-web // 2. 配置 VAD 参数(阈值、最小语音时长等) // 3. 连接麦克风 stream // 4. 在 onSpeechEnd 时收集音频并回调 _options.onSpeechEnd const start = useCallback(() => { // TODO: 启动 VAD 监听 }, []); const stop = useCallback(() => { // TODO: 停止 VAD 监听 }, []); return { isSpeaking, isReady, start, stop }; } // ---- 关键帧检测(ONNX Runtime Web)---- export function useKeyframeDetection() { // TODO: 加载 ONNX 模型后设为 true const isReady = false; // TODO: 实现关键帧检测 // 1. 加载 ONNX 模型 // 2. 对比当前帧与上一帧的像素差异 // 3. 超过阈值则判定为关键帧 const isKeyframe = useCallback( (_currentFrame: ImageData, _previousFrame: ImageData): boolean => { // TODO: 实现像素差异对比 return true; // 暂时所有帧都视为关键帧 }, [], ); return { isReady, isKeyframe }; }