# 语音合成功能集成文档 ## 概述 在 VoiceSelector 组件中集成了基于 `useFetchVoiceTtsV2` 接口的语音合成功能,实现了智能缓存、自动播放和错误回退机制。 ## 核心功能 ### 1. 智能缓存 - 基于配置参数生成唯一哈希值作为缓存键 - 相同配置的语音只生成一次,存储在内存中 - 支持手动清除缓存 ### 2. 参数映射 - `tone` (音调) → `loudnessRate` (音量) - `speed` (语速) → `speechRate` (语速) - 参数范围:[-50, 100] ### 3. 播放逻辑 1. **优先级**:TTS 生成的语音 > 预设语音文件 2. **错误回退**:TTS 失败时自动使用预设语音 3. **状态管理**:生成中、播放中、已缓存等状态 ## 文件结构 ``` src/ ├── hooks/ │ ├── useVoiceTTS.ts # 语音合成核心 Hook │ └── useCommon.ts # TTS 接口 Hook ├── components/ │ └── features/ │ └── VoiceTTSPlayer.tsx # 独立的语音播放器组件 ├── app/ │ ├── (main)/create/components/Voice/ │ │ └── VoiceSelector.tsx # 集成了 TTS 的语音选择器 │ ├── test-voice-tts/ │ │ └── page.tsx # TTS 功能测试页面 │ └── test-voice-selector/ │ └── page.tsx # VoiceSelector 测试页面 └── docs/ └── VoiceTTSIntegration.md # 本文档 ``` ## 使用方法 ### 基础用法 ```tsx import { useVoiceTTS } from '@/hooks/useVoiceTTS' function MyComponent() { const { generateAndPlay, isPlaying, isGenerating } = useVoiceTTS() const config = { text: '你好,这是测试语音', voiceType: 'S_zh_xiaoxiao_emotion', speechRate: 0, loudnessRate: 0 } return ( ) } ``` ### VoiceSelector 集成 ```tsx import VoiceSelector from '@/app/(main)/create/components/Voice/VoiceSelector' function CreateForm() { const [voiceConfig, setVoiceConfig] = useState({ tone: 0, // 音调 [-50, 100] speed: 0, // 语速 [-50, 100] content: 'voice_id' // 语音类型ID }) return ( ) } ``` ## 接口说明 ### useFetchVoiceTtsV2 参数 ```typescript interface FetchVoiceTtsV2Request { text?: string // 文本内容 voiceType?: string // 语音类型 (以 S_ 开头) speechRate?: number // 语速 [-50, 100] loudnessRate?: number // 音量 [-50, 100] } ``` ### useVoiceTTS 选项 ```typescript interface UseVoiceTTSOptions { autoPlay?: boolean // 生成完成后自动播放,默认 true cacheEnabled?: boolean // 启用缓存,默认 true onPlayStart?: (configHash: string) => void onPlayEnd?: (configHash: string) => void onGenerateStart?: (config: FetchVoiceTtsV2Request) => void onGenerateEnd?: (config: FetchVoiceTtsV2Request, url: string) => void onError?: (error: string) => void } ``` ## 状态说明 ### VoiceSelector 状态 - **未选择**:显示提示选择语音 - **已选择 + 未生成**:显示播放按钮 - **生成中**:显示动画和 "Generating..." - **播放中**:显示播放动画 - **已缓存**:显示 "Cached" 标识 - **错误**:显示错误信息 ### 播放优先级 1. TTS 生成的语音(如果有有效的 voiceType 和 voiceText) 2. 预设语音文件(回退机制) 3. 错误处理和用户提示 ## 缓存机制 - **缓存键**:基于 `text + voiceType + speechRate + loudnessRate` 生成哈希 - **存储方式**:内存中存储(页面刷新后清除) - **清除策略**:手动清除或组件卸载时清除 ## 错误处理 1. **TTS 接口错误**:自动回退到预设语音 2. **播放错误**:显示错误信息给用户 3. **网络错误**:重试机制(在 useVoiceTTS 中实现) ## 测试页面 - `/test-voice-tts` - 独立的 TTS 功能测试 - `/test-voice-selector` - VoiceSelector 组件测试 ## 性能优化 1. **缓存机制**:避免重复生成相同配置的语音 2. **懒加载**:只在用户点击播放时才生成语音 3. **错误回退**:TTS 失败时使用预设语音,不影响用户体验 4. **状态管理**:精确的状态控制,避免不必要的重渲染 ## 扩展功能 - 支持自定义缓存策略 - 支持批量预生成常用语音 - 支持语音质量选择 - 支持播放进度控制