<title>文字转语音节点实现</title>

> 本文档抓取自官方文档中心（2026-10-10 快照），具体功能以实际产品为准。

# 文字转语音节点实现文档

## 概述

为视频工作流实现了全新的文字转语音节点，支持音色克隆和情感控制。

## 实现的功能

### 输入参数

1. **生成文本**（必填）：要转换为语音的文本内容，支持放大编辑按钮（`\u2922`）在模态框中编辑长文本
2. **参考音色音频**（可选）：用于声音克隆的参考音频文件，支持在线预览和清除
3. **情感控制方式**：

   - 与参考音频相同（默认）
   - 使用情感参考音频
4. **情感参考音频**（可选）：当选择"使用情感参考音频"时可用，支持在线预览和清除
5. **情感权重**（可选）：范围0-1.6，步进0.1，默认1.0，调整情感强度

### 输出

- 生成的音频文件，可在线播放和下载

## 技术实现

### 文件修改清单

1. **`/web/video_workflow.html`**

   - 在添加菜单中新增"文字转语音"菜单项
   - 引入新的JavaScript文件 `text_to_speech_node.js`
2. **`/web/js/text_to_speech_node.js`**（新建）

   - 使用 `createNodeBase` 基类工厂创建节点
   - 实现 `createTextToSpeechNode()` 函数：创建文字转语音节点
   - 实现 `createTextToSpeechNodeWithData()` 函数：从保存的数据恢复节点（使用 `createNodeWithDataFactory`）
   - 实现音频上传、生成、轮询状态、下载等完整功能
   - 已注册到节点注册表（`registerNodeType('text_to_speech', ...)`）
3. **`/web/js/events.js`**

   - 添加菜单项点击事件处理器
4. **`/web/js/workflow.js`**

   - 在 `restoreNode()` 函数中添加对 `text_to_speech` 节点类型的支持

## API接口

节点使用以下API接口（与 `@/web/index.html` 的AI音频生成功能相同）：

- **生成接口**：`POST /api/audio-generate`

  - 参数：
  
    - `text`: 生成文本
    - `user_id`: 用户ID
    - `emo_control_method`: 情感控制方式（0或1）
    - `ref_audio`: 参考音频文件（可选）
    - `emo_ref_audio`: 情感参考音频文件（可选）
    - `emo_weight`: 情感权重（可选，0-1.6）
    - `auth_token`: 认证令牌
- **状态查询接口**：`GET /api/audio-status/{audio_id}`

  - 返回音频生成状态和结果

## 节点特性

1. **音频上传**：支持上传参考音频和情感参考音频，选择文件后自动显示播放器预览，支持清除
2. **实时状态**：生成过程中显示实时状态，使用通用的 `pollTaskStatus` 函数轮询任务状态
3. **结果预览**：生成成功后可直接在节点内播放音频
4. **数据持久化**：节点数据可随工作流保存和加载，恢复时自动还原文本、情感设置和生成结果
5. **输出端口**：节点包含输出端口，可连接到其他节点（预留扩展）
6. **国际化 (i18n)**：所有用户界面文本均支持国际化，通过 `window.t()` 函数翻译
7. **节点注册**：使用 `createNodeBase` 基类工厂创建，已注册到节点注册表，支持工作流保存/加载/撤销

## 使用流程

1. 在工作流画布中点击"+"按钮
2. 选择"添加节点" → "文字转语音"
3. 输入要转换的文本（可点击放大编辑按钮 `\u2922` 在模态框中编辑长文本）
4. （可选）上传参考音色音频，支持在线预览
5. （可选）选择情感控制方式并上传情感参考音频
6. 点击"生成语音"按钮
7. 等待生成完成，可在节点内播放或下载音频

## 注意事项

1. 需要用户登录后才能使用语音生成功能
2. 音频文件在生成时直接作为 FormData 发送，无需预先上传
3. 生成过程使用通用的 `pollTaskStatus` 函数轮询，支持成功、失败、超时三种回调
4. 支持工作流的保存、加载和撤销功能
5. 恢复工作流时，如果之前生成成功，会自动显示状态和音频播放器
