feat(P1): 一键生成配音支持从配音素材库选用户上传的音频 #567
Reference in New Issue
Block a user
Delete Branch "fix/p1-oneclick-voice-asset-selection"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
智能剪辑(一键生成)配音选择目前只有预设音色/TTS/克隆三种,缺少最常用的「选我上传的配音文件」。
方案
复用 voice_library_id 字段传配音素材库的 asset_id,worker端下载配音时:
前端配合
前端加「我的配音」Tab,调用素材接口(assets?kind=voice)列出配音库音频,用户选中后把asset_id填到voice_library_id即可。
voice_library_id字段支持传入配音素材库的asset_id: - 先查asset表取storage_key下载(用户上传的配音) - 查不到再fallback旧版voice/{id}.mp3路径(向后兼容)🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
代码审查结果 - PR #567
⚠️ 问题(1个需要修改)
session) 的生命周期内(try块中)直接调用了download_asset。如果该下载操作涉及网络 I/O 且耗时较长,会导致数据库连接被长时间占用而不释放。在 Worker 高并发运行场景下,极易耗尽数据库连接池,导致新任务阻塞或服务崩溃。try块中获取asset.storage_key,确保在finally块中关闭session之后,再执行耗时的download_asset操作。💡 建议(2个可选)
SessionLocal和SQLAlchemyAssetRepository。虽然这能规避循环导入问题,但会增加函数调用的微小开销,并掩盖代码结构设计问题。建议优先尝试将导入移至文件顶部;若必须在此处导入,建议添加注释说明原因(如 "Avoid circular import")。try...finally...close手动管理会话,代码稍显冗余。如果SessionLocal返回的对象支持上下文协议(SQLAlchemy 通常支持),推荐使用with SessionLocal() as session:语法,更加简洁且安全。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-07-19 10:27:27 | 模型:
🗑️ 预览环境已清理
PR #567 已关闭或合并,对应的预览环境已被清理。