Skip to content

[Feature] 火山引擎 TTS 支持新版音频生成 HTTP API(/api/v3/tts/create) #9657

Description

@zxzxovo

功能描述

希望 AstrBot 的火山引擎 TTS Provider 增加对新版“音频生成 HTTP API”的支持。

官方文档:
https://docs.volcengine.com/docs/6561/2550782?lang=zh

目前 AstrBot 中的 volcengine_tts 使用旧版接口:

  • 请求地址:https://openspeech.bytedance.com/api/v1/tts
  • 鉴权方式:Authorization: Bearer; <api_key>
  • 配置参数:AppIDclustervoice_type
  • 响应中读取 data 字段中的 Base64 音频

新版接口的主要区别如下:

  • 请求地址:POST https://openspeech.bytedance.com/api/v3/tts/create
  • 新版控制台使用请求头 X-Api-Key 鉴权,不再需要 AppIDcluster
  • 请求体使用 modeltext_promptreferencesaudio_config
  • 当前文档中的模型为 seed-audio-1.0
  • 可通过 references[].speaker 指定豆包语音合成模型 2.0 或声音复刻音色
  • 响应可能包含 Base64 编码的 audio,或者具有有效期的音频 url

建议保留现有旧版接口,以避免影响已有用户,同时通过以下任一方式增加新版接口:

  1. 新增独立的“火山引擎音频生成 HTTP API” TTS Provider;或
  2. 在现有火山引擎 TTS Provider 中增加“API 版本/协议类型”选项。

建议第一阶段至少支持以下配置:

  • API Key
  • API Base,默认 https://openspeech.bytedance.com/api/v3/tts/create
  • Model,默认 seed-audio-1.0
  • Speaker ID(可选)
  • 输出格式,默认 mp3
  • Sample Rate
  • Speech Rate
  • Loudness Rate
  • Pitch Rate
  • Timeout

在普通 TTS 场景中,可以将 AstrBot 传入的待合成文本映射到 text_prompt;配置了 Speaker ID 时,将其放入:

{
  "references": [
    {
      "speaker": "<speaker_id>"
    }
  ]
}

建议同时兼容新版接口响应中的 audio 和 url:
存在 audio 时,进行 Base64 解码并保存为临时音频文件;
仅存在 url 时,下载音频到 AstrBot 临时目录后返回文件路径。
参考请求:

{
  "model": "seed-audio-1.0",
  "text_prompt": "需要合成的文本",
  "references": [
    {
      "speaker": "<speaker_id>"
    }
  ],
  "audio_config": {
    "format": "mp3",
    "sample_rate": 48000,
    "pitch_rate": 0,
    "speech_rate": 0,
    "loudness_rate": 0
  },
  "watermark": {}
}

使用场景

火山引擎新版控制台推荐使用 X-Api-Key 鉴权,并提示旧版控制台后续会下线。当前 AstrBot 的火山引擎 TTS Provider 仍按照旧接口的 AppID + cluster + token 方式配置,使用新版控制台创建的 API Key 时无法直接接入。

增加新版接口后,可以:

  • 直接使用新版控制台生成的 API Key;
  • 使用 seed-audio-1.0 音频生成模型;
  • 使用豆包语音合成模型 2.0 的音色或声音复刻音色;
  • 在保留旧版 Provider 兼容性的同时,为新用户提供推荐的接入方式;
  • 避免旧版控制台下线后,现有火山引擎 TTS Provider 缺少可用的新接入方案。

初期只需支持“文本 + Speaker ID”的常规 TTS 场景即可,参考音频、参考图片、字幕和复杂 Prompt 等高级能力可以后续再扩展。

使用场景

No response

检查清单

  • 我已在 Issue 列表中搜索过相关功能,确认该功能想法从未被提出过。
  • 我建议的功能与 AstrBot 本体相关,而非在建议某一插件的功能。
  • 我已阅读并同意本项目的贡献者行为准则
  • (可选)我愿意提交 PR 以帮助实现该功能。

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:providerThe bug / feature is about AI Provider, Models, LLM Agent, LLM Agent Runner.enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions