为了统一语音合成坊的异步任务管理,创建了4个新表(V2版本),采用零影响迁移策略。
用途: 异步语音识别任务
核心字段:
task_id: DashScope返回的任务ID(唯一标识)model: ASR模型名称file_url: 音频文件URLstatus: 任务状态result_text: 识别结果文本result_url: 识别结果文件URL(长文本场景)duration: 音频时长(秒)bill: 费用(元)状态流转:
PENDING (提交任务)
→ PROCESSING (识别中)
→ SUCCEEDED (成功) / FAILED (失败)
使用场景:
用途: 异步语音合成任务
核心字段:
task_id: DashScope返回的任务ID(唯一标识)model: TTS模型名称voice: 音色IDtext: 合成文本内容audio_url: 生成的音频文件URLstatus: 任务状态duration: 音频时长(秒)format: 音频格式(mp3/wav/pcm)characters: 文本字符数bill: 费用(元)custom_name: 用户自定义名称状态流转:
PENDING (提交任务)
→ PROCESSING (合成中)
→ SUCCEEDED (成功) / FAILED (失败)
使用场景:
用途: 异步声音克隆任务
核心字段:
task_id: DashScope返回的任务ID(唯一标识)voice_id: 生成的音色ID(完成后才有)target_model: 目标TTS模型prefix: 音色前缀名称voice_name: 音色名称(用户输入)audio_url: 原始音频文件URLstatus: 任务状态bill: 费用(元)状态流转:
PENDING (提交任务)
→ PROCESSING (训练中)
→ SUCCEEDED (成功,生成voice_id) / FAILED (失败)
使用场景:
注意事项:
voice_id 在任务成功完成后才有值用途: 长文本分段合成和拼接
核心字段:
task_id: 本地生成的UUID(唯一标识)model: TTS模型voice: 音色IDtext: 原始长文本text_length: 文本总长度segment_count: 分段数量segments: JSONB数组,存储分段信息audio_url: 最终拼接的音频URLstatus: 任务状态progress: 进度百分比(0-100)duration: 总时长(秒)bill: 费用(元)segments 字段格式:
[
{
"index": 1,
"text": "第一段文本内容...",
"task_id": "dashscope_task_id_1",
"audio_url": "https://oss.../segment_1.mp3",
"duration": 10.5,
"status": "SUCCEEDED"
},
{
"index": 2,
"text": "第二段文本内容...",
"task_id": "dashscope_task_id_2",
"audio_url": "https://oss.../segment_2.mp3",
"duration": 12.3,
"status": "PROCESSING"
}
]
状态流转:
PENDING (创建任务)
→ PROCESSING (分段合成中,progress更新)
→ SUCCEEDED (所有分段完成并拼接) / FAILED (失败)
使用场景:
处理流程:
所有表使用相同的状态码:
| 状态 | 说明 | 可操作 |
|---|---|---|
| PENDING | 任务已创建,等待处理 | 可取消 |
| PROCESSING | 任务处理中 | 可查询进度 |
| SUCCEEDED | 任务成功完成 | 可下载结果 |
| FAILED | 任务失败 | 查看 error_message |
| 新表 | 旧表 | 关系 |
|---|---|---|
| asr_recognition_v2 | asr_task + asr_recognition | 合并并统一为异步 |
| audio_synthesis_v2 | audio_synthesis | 添加异步支持 |
| voice_clone_v2 | voice_clone | 添加 task_id 字段 |
| long_text_audio | - | 全新功能 |
迁移策略:
所有表都有以下索引:
user_id - 用户查询优化task_id - 任务查询优化(唯一索引)status - 状态过滤优化created_at - 时间排序优化(降序)POST /api/v2/audio/synthesis
POST /api/v2/audio/recognition
POST /api/v2/audio/voice-clone
POST /api/v2/audio/long-text
GET /api/v2/audio/task/{task_id}
GET /api/v2/audio/tasks?type=synthesis&status=SUCCEEDED&page=1&size=20
DELETE /api/v2/audio/task/{task_id}
// 轮询间隔建议
const POLL_INTERVALS = {
PENDING: 2000, // 2秒
PROCESSING: 3000, // 3秒
SUCCEEDED: 0, // 停止轮询
FAILED: 0 // 停止轮询
};
// 最大轮询次数
const MAX_POLL_COUNT = 100; // 5分钟(3秒 * 100)
所有表都有 bill 字段记录费用:
建议定期清理:
建议监控: