Skip to content

[Feature Request] 网页版 BYOK TTS 增加豆包语音(火山引擎)支持 #1396

Description

@imzihuailin

功能需求

希望 Enjoy 网页版的 BYOK TTS 增加豆包语音(火山引擎)Provider 支持。

当前情况

网页版目前仅支持 OpenAI 和 Azure TTS。

选择 OpenAI TTS 并填写自定义 API Endpoint 时,Enjoy 会按照 OpenAI TTS 协议调用:

POST {endpoint}/audio/speech

同时使用 OpenAI 格式的鉴权方式、请求参数和响应处理。

豆包语音 V3 API 不兼容 OpenAI TTS 协议,因此无法通过修改 Base URL 接入。

不兼容原因

虽然新版豆包语音使用单个 API Key,但其接口协议与 OpenAI TTS 不同:

  • API Key 通过 X-Api-Key Header 传递,而不是 Authorization: Bearer <API_KEY>

  • 需要额外提供 X-Api-Resource-Id,例如 seed-tts-2.0

  • TTS 接口为:

    POST https://openspeech.bytedance.com/api/v3/tts/unidirectional

  • 请求体使用 req_params.textreq_params.speakerreq_params.audio_params 等字段

  • 返回结果为流式数据,需要解析并合并其中的音频内容

  • Resource ID 需要与音色所属的模型版本匹配

因此,当前的 OpenAI 自定义 Endpoint 功能不足以接入豆包语音。

希望实现

建议在以下位置增加“豆包语音 / Volcengine”Provider:

设置 → AI 服务 → TTS → 使用自己的 API Key

建议支持以下配置:

  • API Key
  • Resource ID,例如 seed-tts-2.0
  • Speaker / 音色 ID
  • 输出格式,例如 MP3
  • 采样率
  • 可选的语速、音量和情感参数

调用时按照豆包语音 V3 协议:

  1. 将 API Key 放入 X-Api-Key
  2. 添加 X-Api-Resource-Id
  3. 将文本、音色和音频参数转换为豆包请求体
  4. 解析流式响应并合并音频数据
  5. 将生成的音频交给现有播放器和缓存逻辑

如果浏览器直接请求存在 CORS 或安全限制,可以考虑通过 Enjoy 后端代理调用。

使用场景

豆包语音提供了较丰富的中英文音色。支持该 Provider 后,国内用户可以直接使用自己的火山引擎 API Key 和额度,用于:

  • 电子书朗读
  • 影子跟读
  • 句子发音
  • 其他网页版 TTS 场景

参考文档

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions