语音合成与音色 API

语音合成完整调用流程、voice_id 获取、emotion 选项和自定义音色克隆接口。

EasyAI 提供统一的语音合成接口和音色克隆接口。接入顺序是:查询可用模型与音色 → 选择音色来源 → 提交文本 → 获取音频结果。

接口与认证

  • 官方 BaseURL:https://51easyai.com/api/v1。私有部署使用 https://<你的域名>/api/v1。
  • 所有接口携带 Authorization: Bearer <EasyAI API Key>,JSON 请求还需 Content-Type: application/json。
  • 模型可见性、权限、余额和部署配置会影响可用列表。模型别名及音色以当前账号的实时查询结果为准。
方法路径(相对 BaseURL)用途
GET/models/list?type=text_to_speech查询语音合成模型及预置音色
POST/speech/generations合成语音
GET/models/list?type=voice_clone查询音色克隆模型
POST/voice_clone用录音创建自定义音色
GET/voice_clone/voices查询当前 API Key 用户的克隆音色
DELETE/voice_clone/voices/{voiceId}删除本人克隆音色
GET/ai/result/{taskId}查询异步任务结果

下文 curl 示例使用环境变量:

export EASYAI_BASE_URL="https://51easyai.com/api/v1"
export EASYAI_API_KEY="替换为你的 EasyAI API Key"

1. voice_id 怎么获取

预置音色:查询所选模型的能力

curl -sS "$EASYAI_BASE_URL/models/list?type=text_to_speech" \
  -H "Authorization: Bearer $EASYAI_API_KEY"

返回结构示例(已省略其他字段;不代表每个部署均已启用此模型):

{
  "modelList": [
    {
      "name": "speech-2.8-hd",
      "alias": "MiniMax-Speech-2.8-HD",
      "provider": "minimax",
      "capabilities": {
        "text_to_speech": {
          "default_voice_id": "male-qn-qingse",
          "voices": [
            {
              "id": "male-qn-qingse",
              "name": "青涩青年音色",
              "lang": "中文",
              "gender": "男"
            }
          ]
        }
      }
    }
  ],
  "count": 1
}

合成时,model 优先填写所选项的 alias;voice_id 填写该项 capabilities.text_to_speech.voices[].id。name 是音色的显示名称,不能代替 id。部分音色还返回 audio 试听地址、tags、accent、age 等信息。

安装了 jq 时,可展开模型与音色便于选择:

curl -sS "$EASYAI_BASE_URL/models/list?type=text_to_speech" \
  -H "Authorization: Bearer $EASYAI_API_KEY" \
  | jq '.modelList[] | {model: (.alias // .name), provider, voices: .capabilities.text_to_speech.voices}'

音色必须与模型及提供方匹配。例如 MiniMax 的音色 ID 不能直接用于豆包语音模型。若 voices 缺失或为空,不能自行构造 voice_001;请核对该模型的音色配置及是否支持自动音色、参考音频等模式。

自定义音色:查询本人的克隆记录

curl -sS "$EASYAI_BASE_URL/voice_clone/voices" \
  -H "Authorization: Bearer $EASYAI_API_KEY"

此接口返回 { "data": [...] },每项的 voice_id 是合成音色 ID,id 是 EasyAI 克隆记录 ID。创建方式见本文「自定义音色」章节。

2. emotion 怎么获取

emotion 是模型支持的情绪字符串,不是需要创建或查询的音色 ID。EasyAI 当前没有独立的 emotion 列表接口。它可省略,让模型按文本自动选择情绪。

MiniMax Speech 常用选项如下;其他提供方不一定支持相同字段或取值:

emotion含义
happy开心
sad悲伤
angry愤怒
fearful害怕
disgusted厌恶
surprised惊讶
calm平静

fluent(流畅)和 whisper(低语)仅在 Speech 2.6 模型开放;Speech 2.8 不开放这两项。详细取值参考 MiniMax 语音合成参数。供应商文档中的 voice_setting.emotion 在 EasyAI 请求中可填写为顶层 emotion,如下文示例。

3. 合成语音

POST /speech/generations

请求示例

以下示例使用 MiniMax 的模型别名与预置音色。实际调用前先确认它们存在于你的模型列表中。

curl -sS -X POST "$EASYAI_BASE_URL/speech/generations" \
  -H "Authorization: Bearer $EASYAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "MiniMax-Speech-2.8-HD",
    "text": "你好,欢迎使用 EasyAI 语音合成。",
    "voice_id": "male-qn-qingse",
    "speed": 1,
    "vol": 1,
    "pitch": 0,
    "emotion": "happy"
  }'

请求参数

参数类型说明
modelstring,必填当前账号可用的 text_to_speech 模型别名,优先使用查询结果的 alias
textstring要朗读的文本;普通文本合成应填写
voice_idstring所选模型的预置音色 ID,或本人已创建的克隆音色 ID;固定音色模式填写
cloned_voice_idstring本人克隆记录的 id;使用克隆音色时建议填写,服务端会解析其 voice_id 并绑定原平台
speednumber,可选语速;MiniMax 范围 [0.5, 2],默认 1
volnumber,可选音量;MiniMax 范围 (0, 10],默认 1
pitchnumber,可选音调偏移;MiniMax 为 [-12, 12] 的整数,默认 0,表示原音调
emotionstring,可选模型支持的情绪值;MiniMax 常用选项见上文,省略时自动选择
voice_modifyobject,可选MiniMax 声线微调和音效,详见下文;与普通 pitch 分开设置
pronunciation_dictobject,可选MiniMax 发音词典,例如 { "tone": ["处理/(chu3)(li3)"] }
language_booststring,可选MiniMax 语言增强,例如 auto、Chinese、Chinese,Yue、English、Japanese
channelinteger,可选MiniMax 输出声道:1 单声道、2 双声道
text_file_idstring,可选特定模型的文本文件模式参数;文件 ID 来源和支持情况由提供方决定,普通接入优先传 text
text_promptstring,可选支持该能力的模型使用的自然语言声音描述,例如 SeedAudio
reference_audio_urlstring,可选参考音频 URL;仅用于支持参考音频模式的模型
reference_audio_datastring,可选参考音频的 Base64 数据;仅用于支持该模式的模型
referencesarray,可选原生参考项,可包含 speaker、audio_url 或 audio_data,须遵循所选模型的规则
audio_format、sample_rate、bit_ratestring / number,可选仅部分适配器支持的输出格式、采样率、码率,不能视为所有模型都生效的通用设置

上述速度、音量和音调范围仅针对 MiniMax。其他模型应按其能力与参数要求填写。MiniMax 的输出设置与声线效果见下文。

text_file_id 并非 EasyAI 文件上传接口 返回的 URL。当前 MiniMax 适配器按 text 长度选择处理流程,普通调用应传入 text,不要只传 text_file_id。

音色来源规则:voice_id / cloned_voice_id 与参考音频互斥。只有支持自动音色的模型才能省略全部音色来源;不能据此认为所有模型的 voice_id 都可省略。

MiniMax 声线、音效与音频设置

以下是 2026-10-14 补齐的能力。私有部署需要更新到包含本次 MiniMax 参数补齐的前后端版本;旧版适配器仅传语速、音量、音调和情绪,并固定保存为 MP3。接口字段和范围按 MiniMax 同步语音文档 与 长文本语音文档 核对。

EasyAI 参数MiniMax 位置与范围
pitch对应 voice_setting.pitch。[-12, 12] 的整数,调整普通音调,0 保留原音调
voice_modify.pitch原生同名字段。[-100, 100] 的整数,从低沉(负值)到明亮(正值)
voice_modify.intensity原生同名字段。[-100, 100] 的整数,从有力(负值)到柔和(正值)
voice_modify.timbre原生同名字段。[-100, 100] 的整数,从浑厚(负值)到清脆(正值)
voice_modify.sound_effects原生同名字段。单选音效;省略或空字符串表示不附加音效
audio_format对应 audio_setting.format。mp3、wav、flac、pcm、pcmu_raw、pcmu_wav、opus;默认 MP3,兼容旧值 ogg_opus
sample_rate对应 同步 audio_setting.sample_rate;长文本 audio_setting.audio_sample_rate。常规格式:8000、16000、22050、24000、32000、44100 Hz;Opus:8000、12000、16000、24000、48000 Hz;G.711 μ-law 两种格式固定 8000 Hz
bit_rate对应 audio_setting.bitrate。MP3 可用 32000、64000、128000、256000 bps;其他格式不发送该字段
channel对应 audio_setting.channel。1 或 2
pronunciation_dict.tone原生同名字段。字符串数组,每项为“原词/读法”,支持中文拼音、IPA、日语假名或替换文本
language_boost原生同名字段。按所选模型支持的语言填写;auto 自动识别,粤语为 Chinese,Yue

四种音效对应值:

选项含义
spacious_echo空旷回声
auditorium_echo礼堂回声
lofi_telephone电话音效
robotic机器人音效

声线微调和音效仅支持 MP3、WAV、FLAC。与 PCM、G.711 或 Opus 组合会返回参数错误;不应静默丢弃效果。数值 0 是有效设置,不能用省略零值的方式清理请求。

完整请求示例:

{
  "model": "MiniMax-Speech-2.8-HD",
  "text": "欢迎使用 EasyAI,请留意处理这个词的读音。",
  "voice_id": "male-qn-qingse",
  "speed": 1,
  "vol": 1,
  "pitch": 0,
  "emotion": "calm",
  "voice_modify": {
    "pitch": 20,
    "intensity": -10,
    "timbre": 15,
    "sound_effects": "spacious_echo"
  },
  "audio_format": "wav",
  "sample_rate": 32000,
  "channel": 1,
  "pronunciation_dict": { "tone": ["处理/(chu3)(li3)"] },
  "language_boost": "Chinese"
}

也兼容原生嵌套写法 voice_setting 和 audio_setting。例如 "voice_setting": {"voice_id": "male-qn-qingse", "pitch": 0}、"audio_setting": {"format": "wav", "sample_rate": 32000}。同时填写时,显式顶层字段优先,包括 0 和 false。普通接入建议使用上表的顶层字段,便于切换 EasyAI 提供方。

平台生成页、Canvas 与通用语音模板

选择 MiniMax 模型后,语音高级设置开放情绪、声线三项微调、音效、音频格式、采样率、MP3 码率、声道、发音词典和语言增强。普通音调与声线明亮度分别显示。选择其他提供方时,以该模型的能力显示参数。

通用语音模板使用 minimax_tts_params 对象保存这些高级设置,并完整传到 MiniMax 适配器。组内显式参数覆盖模板旧的格式、采样率等默认值;不能通过该组替换 model 或 voice_id。OpenAPI 调用无需套用此对象。已保存的旧模板需要使用更新后的模板配置,才能出现新增控件。

MiniMax 文本不足 8000 字符时使用供应商同步接口,达到 8000 字符时使用供应商长文本接口,EasyAI 会转换两者的采样率字段。同步专用参数 text_normalization_mode、subtitle_enable、subtitle_type 不用于长文本;语言支持也可能随模型版本变化。

声线微调调整当前音色的效果,不会创建新的 voice_id;要保存独立的自定义音色,请使用下文的录音克隆接口。

同步返回

默认等待任务完成,返回 JSON。成功结构示例(已省略计费等字段):

{
  "task_id": "任务ID",
  "status": "success",
  "data": [
    {
      "type": "audio",
      "url": "https://example.com/output/speech.mp3"
    }
  ],
  "message": "合成语音成功"
}

读取 data 中 type: "audio" 项的 url 进行播放或下载。音频不会作为 MP3 二进制直接返回。失败时检查 HTTP 状态及响应中的 message、error_code 等错误信息。

异步返回与结果查询

长文本或需要避免 HTTP 长连接等待时,在相同请求上增加 -H "x-async: true"。

{
  "task_id": "任务ID",
  "status": "submitted",
  "message": "任务已提交,请稍后查看结果",
  "query_url": "任务结果查询地址"
}

submitted 表示已提交,尚未生成完成。使用返回的 query_url(若有),或查询:

curl -sS "$EASYAI_BASE_URL/ai/result/替换为任务ID" \
  -H "Authorization: Bearer $EASYAI_API_KEY"

查询仅允许访问当前用户自己的任务。完整查询状态及回调格式见 OpenAPI 接口文档。

4. 自定义音色:录音克隆

EasyAI 已提供 POST /voice_clone。先查询 GET /models/list?type=voice_clone,选择可用的克隆模型别名。当前 MiniMax 克隆模型的预置别名为 MiniMax-Voice-Clone,是否可用以部署配置为准。

上传录音并创建音色

可直接用 multipart/form-data 上传音频,不需要先调用文件上传接口,也不要手工设置 multipart 的 Content-Type / boundary。

curl -sS -X POST "$EASYAI_BASE_URL/voice_clone" \
  -H "Authorization: Bearer $EASYAI_API_KEY" \
  -F "model=MiniMax-Voice-Clone" \
  -F "voice_id=my_voice_20261014_001" \
  -F "display_name=我的自定义音色" \
  -F "file=@./sample.wav" \
  -F "text=你好,这是我的音色试听。" \
  -F "preview_model=speech-2.8-hd" \
  -F "need_noise_reduction=true" \
  -F "need_volume_normalization=true"

此处 voice_id 是你为新音色指定的唯一标识,合成时应使用返回的 voice_id。MiniMax 要求 8–256 位、以英文字母开头,仅含字母、数字、下划线和中划线,结尾不能为下划线或中划线,并且不能与已有音色重名。

当前 MiniMax 的录音要求为 MP3、M4A 或 WAV,时长 10 秒至 5 分钟,文件不超过 20 MB;EasyAI multipart 上传也限制单个文件为 20 MB。参考 MiniMax 音色克隆文档。

也可使用可被服务端及提供方读取的音频 URL,以 JSON 提交:

{
  "model": "MiniMax-Voice-Clone",
  "voice_id": "my_voice_20261014_002",
  "audio_url": "https://example.com/sample.wav",
  "display_name": "我的自定义音色",
  "text": "你好,这是我的音色试听。",
  "preview_model": "speech-2.8-hd"
}

克隆请求参数

参数类型说明
modelstring,必填当前账号可用的 voice_clone 模型别名
voice_idstring,必填新音色的唯一标识,规则见上文
filefile,音频来源之一multipart 二进制录音,推荐使用
audio_urlstring,音频来源之一录音 URL,适用于 JSON 请求
audiostring,音频来源之一录音 URL 或音频 Data URL(如 data:audio/wav;base64,...);裸 Base64 的支持取决于提供方
file_idstring / number,音频来源之一提供方已上传音频的文件 ID;不是 EasyAI 上传接口返回的 URL
display_namestring,可选EasyAI 中保存的音色显示名称
textstring,可选克隆后的试听文本;MiniMax 最长 1000 字符,不传时可以没有试听音频
preview_modelstring,可选提供方的试听合成模型名,当前 MiniMax 默认 speech-2.8-hd;与克隆模型的 model 不同
prompt_audio / prompt_audio_url / prompt_file_idfile / string / string 或 number,可选补充示例音频,分别用于 multipart 上传、URL、提供方文件 ID;MiniMax 要求短于 8 秒
prompt_textstring,可选补充示例音频对应的文本;使用示例音频时一并填写
language_booststring,可选提供方支持的语言增强设置
text_validationstring,可选原始录音对应的校验文本;当前适配器最多保留 200 字符,此字段不是 boolean
accuracynumber,可选提供方的文本校验精度设置,按模型规则填写
need_noise_reductionboolean,可选是否进行降噪
need_volume_normalizationboolean,可选是否进行音量归一化
aigc_watermarkboolean,可选提供方的音频水印设置

选择一种音频来源即可;上传 file 时服务端自动处理临时音频。试听会执行语音生成并可能产生对应费用。

返回与后续使用

克隆成功返回结构示例(已省略其他字段;示例 ID / 地址请替换为实际返回值):

{
  "status": "success",
  "voice_id": "my_voice_20261014_001",
  "demo_audio": "https://example.com/output/preview.mp3",
  "data": [
    {
      "type": "audio",
      "url": "https://example.com/output/preview.mp3"
    }
  ],
  "cloned_voice": {
    "id": "507f1f77bcf86cd799439011",
    "voice_id": "my_voice_20261014_001",
    "display_name": "我的自定义音色",
    "provider_code": "minimax",
    "platform_runtime_id": "原执行平台ID",
    "status": "active",
    "expires_at": "2026-10-21T00:00:00.000Z"
  }
}

若未传试听 text,demo_audio 可以不存在,data 可以为空;应检查 status 与克隆记录,而非仅依赖试听 URL。

后续通过相同用户的 API Key 查询 /voice_clone/voices,取记录的 id 填入 cloned_voice_id,再调用合成:

{
  "model": "MiniMax-Speech-2.8-HD",
  "text": "这段语音使用我刚刚创建的自定义音色。",
  "cloned_voice_id": "507f1f77bcf86cd799439011",
  "speed": 1,
  "vol": 1,
  "pitch": 0
}
  • cloned_voice_id 使用记录 id,voice_id 使用音色标识,两者含义不同。也可直接传记录里的 voice_id;同一用户多个平台存在同名音色时,优先明确指定 cloned_voice_id。
  • 克隆记录绑定当前用户和实际执行平台,合成只能路由至原平台。所选合成模型也必须在该平台可用,不能直接使用其他用户或其他供应商账号的克隆音色。
  • 仅使用 status: "active" 且未过期的记录。当前 EasyAI 克隆记录按 7 天设置 expires_at,每次成功合成后重新延长 7 天;以列表实际返回值为准,过期后需要重新克隆。
  • 删除本人音色使用 DELETE /voice_clone/voices/{voiceId},voiceId 可填克隆记录 id 或 voice_id;服务端先处理上游删除,再标记本地记录。

5. 参考音频与音色设计的区别

支持参考音频的模型(例如启用了该能力的 SeedAudio)可以在单次合成时使用 reference_audio_url。该方式不会创建可复用的 EasyAI 克隆记录,也不会返回新的 voice_id:

{
  "model": "替换为支持参考音频的模型别名",
  "text": "你好,这是一段参考音频合成示例。",
  "reference_audio_url": "https://example.com/reference.wav"
}

此模式不要同时传 voice_id 或 cloned_voice_id。参考音频的格式、时长及模型支持情况由模型能力决定。

如果“自定义音色”指仅通过文字描述设计一个新音色,EasyAI 当前 OpenAPI 没有独立的 voice_design 接口。支持 text_prompt 的模型可以描述本次生成的声音风格,但不等同于创建持久音色 ID;需要重复使用的录音音色请走 /voice_clone。

常见问题

现象核对方式
模型未找到或无法调用查询同一 API Key 的模型列表,确认类型、别名、权限和余额
音色不属于当前模型从所选模型的 voices[].id 重新选择,核对提供方
情绪值被拒绝或没有效果确认该模型支持 emotion 及此取值,先省略情绪参数验证基础合成
voice_id 与参考音频不能同时使用保留一种音色来源,清除另一种模式的参数
克隆音色不存在或不属于当前用户用相同用户的 API Key 查询克隆列表,核对记录 id 与 voice_id
克隆音色已过期或平台不可用检查 status、expires_at 和原平台的模型配置,必要时重新克隆
克隆成功却没有试听音频确认是否填写 text,并检查克隆记录;不传试听文本时可以正常没有音频