You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.6 KiB
2.6 KiB
Changelog - 角色音色预览 UI
日期: 2026-02-09
类型: 功能增强 (UI Only)
模块: 前端 - PreviewPanel
变更概述
在 SingleViewPlayer 组件的底部信息条中,为角色资源类型添加音色播放按钮 UI。
技术实现
修改文件
client/src/components/features/preview/SingleViewPlayer.tsx
实现细节
-
导入图标
- 新增
Volume2图标 (fromlucide-react)
- 新增
-
音色播放按钮
- 位置: 底部信息条左侧,标题和标签之后
- 显示条件: 仅当
currentItem?.type === 'character'时显示 - 交互逻辑:
- 点击调用
playbackState.handleVoicePlay() - 使用
e.stopPropagation()防止触发父级的面板展开
- 点击调用
- 视觉反馈:
- 默认状态: 半透明品牌色背景 + 细边框
- Hover 状态: 加深背景色和边框
- 播放中: 脉冲动画 (
animate-pulse)
- 工具提示: 根据播放状态显示 "播放角色音色" 或 "停止播放音色"
-
样式设计
// 圆形按钮,6x6 尺寸 'w-6 h-6 rounded-full' // 品牌色调 'bg-brand-default/10 hover:bg-brand-default/20' 'ring-1 ring-brand-default/20 hover:ring-brand-default/40' // 播放状态动画 playbackState.isVoicePlaying && 'bg-brand-default/20 ring-brand-default/40 animate-pulse' -
复用现有逻辑
- 使用
useMediaPlaybackHook 管理播放状态 - 音频 URL 来源:
currentItem?.voiceSampleUrl(由usePreviewData提供)
- 使用
当前状态
✅ UI 实现完成
⚠️ 功能待实现(依赖后续工作):
- 数据库添加
voice_model、voice_sample_url字段 - 后端 API 返回音色数据
- 前端数据映射和真实播放
视觉效果
┌─────────────────────────────────────────────────┐
│ [▼] 李明 [便装] [🔊] [详情] [历史] [替换] │
│ ↑ ↑ ↑ │
│ 标题 标签 音色按钮 │
└─────────────────────────────────────────────────┘
相关链接
- 父组件:
SingleViewPlayer.tsx - Hook:
useMediaPlayback.ts - 数据源:
usePreviewData.ts
后续任务
- 数据库迁移: 添加音色字段到
project_characters表 - 后端: 更新
CharacterDetailResponseSchema - 前端: 映射
voice_sample_url到StoryboardItem - 测试: 端到端播放流程验证