cnAPIcnAPI
⚠️合规提示:本项目仅用于合法授权的 API 网关、内部管理和私有化部署场景。请遵守上游服务条款、平台规则、监管要求和内容安全要求。
API 文档音频(Audio)

cnAPI 语音接口:STT 与 TTS

cnAPI 语音转文字与文字转语音完整接入文档,包含生产状态、模型、字段、音频格式、音色、cURL 与 Python 示例及能力限制。

音频(Audio)

cnAPI 提供两条彼此独立的语音能力。请根据输入和输出方向选择接口,不要混用模型名或请求格式。

当前上线状态(2026-08-11)

STT 已在生产可用。TTS 适配器已经部署,真实 WAV 请求也已通过生产验证,但公开模型价格尚未配置。 正式价格启用前,普通 API Key 会收到 400 model_price_error;目前请勿把 TTS 接入生产业务。

能力总览

能力端点对外模型状态输入输出
语音转文字(STT)POST /v1/audio/transcriptionsgemini-2.5-sttgemini-3-sttgemini-3.5-sttgemini-3.6-stt生产可用,已完成真实请求验证multipart/form-data 音频文件{ "text": "..." }
文字转语音(TTS)POST /v1/audio/speechgemini-3.1-tts适配器已部署并验证 WAV;等待公开价格JSON 文本、音色和风格指令WAV 或原始 PCM 二进制
音频翻译/v1/audio/translations不支持

两条能力的共同基础地址与鉴权方式如下:

Base URL: https://cnapi.vip/v1
Authorization: Bearer $API_KEY

语音转文字(STT)

推荐请求

使用 multipart/form-data 上传音频。让 cURL 或 SDK 自动生成 multipart boundary,不要手写 Content-Type: multipart/form-data 请求头

curl --fail-with-body https://cnapi.vip/v1/audio/transcriptions \
  -H "Authorization: Bearer $API_KEY" \
  -F "file=@./meeting.wav;type=audio/wav" \
  -F "model=gemini-2.5-stt" \
  -F "prompt=这是一段产品评审会议录音,请准确识别人名和技术术语"

成功响应固定为 JSON:

{
  "text": "这里是识别后的完整文字。"
}

模型选择

以下名称是 cnAPI 对外模型名,四个模型均已完成生产真实请求验证。不要改填内部上游模型名。

模型建议用途
gemini-2.5-stt默认推荐,用于常规转录和兼容性优先的接入
gemini-3-sttGemini 3 路线的通用转录
gemini-3.5-stt新版转录路线,建议用自己的语料比较效果后切换
gemini-3.6-stt最新转录路线,建议用自己的语料比较效果后切换

cnAPI 不承诺不同模型在所有语言、口音和噪声环境下的固定准确率排序。正式选型前,请用自己的真实音频做对比测试。

请求字段

字段类型必填说明
filefile单个音频文件,最大 15 MB
modelstring填写上表中的一个 STT 对外模型名
promptstring提供场景、人名、品牌名、术语或期望书写方式,帮助模型理解上下文

当前仅保证基础 JSON 文本响应。请不要依赖 languageresponse_formattemperature、分段时间戳、逐词时间戳或说话人分离字段。

文件格式

扩展名MIME 类型
.mp3audio/mp3
.wavaudio/wav
.m4aaudio/aac
.oggaudio/ogg
.flacaudio/flac
.aiff.aifaudio/aiff

文件扩展名必须与真实编码一致。WAV 已完成端到端生产回归;遇到不兼容的编码器或容器时,优先转成标准 PCM WAV 后重试。

Python(OpenAI SDK)

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_cnAPI_KEY",
    base_url="https://cnapi.vip/v1",
)

with open("meeting.wav", "rb") as audio_file:
    result = client.audio.transcriptions.create(
        model="gemini-2.5-stt",
        file=audio_file,
        prompt="产品评审会议;术语包括 Vertex AI、cnAPI、cnAPI",
    )

print(result.text)

STT 能力边界

  • 单次同步上传,文件不超过 15 MB。
  • 自动识别输入语言并返回原语言文字;不提供 /audio/translations 英译接口。
  • 不支持 WebSocket、实时双向流、分片上传、异步长音频任务。
  • 不提供说话人分离、逐词对齐、SRT/VTT 或时间戳输出。
  • STT 与下方 TTS 是不同后端;STT 模型不能用于 /audio/speech

文字转语音(TTS)

等待公开价格

下列协议已经部署,并通过真实 WAV 生产回归。gemini-3.1-tts 正式价格配置前,普通 API Key 仍会收到 400 model_price_error

请求示例

curl --fail-with-body https://cnapi.vip/v1/audio/speech \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3.1-tts",
    "input": "欢迎使用 cnAPI 语音合成服务。",
    "voice": "Kore",
    "response_format": "wav",
    "instructions": "使用自然、沉稳、清晰的普通话播报,数字要读得准确"
  }' \
  --output speech.wav

成功响应是音频二进制,不是 JSON。客户端必须把响应体直接写入文件或音频缓冲区。

请求字段

字段类型必填默认值说明
modelstring当前对外模型为 gemini-3.1-tts
inputstring要合成的文本,去除首尾空白后不能为空
voicestringGemini 预设音色名,区分拼写;推荐先用 Kore
response_formatstringwav仅支持 wavpcm
instructionsstring用自然语言控制语气、情绪、口音、节奏、发音和场景
speednumber1范围 0.254;会转换成自然语言指令,不保证精确播放倍率

inputinstructions 和适配器生成的语速指令合并后不得超过 8000 字节。中文通常每个汉字占 3 个 UTF-8 字节,请按字节而不是字符估算。

输出格式

response_formatContent-Type音频规格使用方式
wavaudio/wav24 kHz、16-bit、单声道,带 WAV 文件头默认推荐,可直接保存和播放
pcmaudio/pcm24 kHz、16-bit、单声道,原始 PCM,无文件头用于明确支持原始 PCM 的音频管线

本站的 Vertex TTS 适配层目前不提供 MP3、Opus、AAC 或 FLAC。Google 上游其他 API 支持的格式不等于 cnAPI /audio/speech 已支持的格式。

可用音色

请使用下列官方预设名的准确拼写。完整音色与语言更新以 Google Gemini-TTS 官方文档 为准。

女声男声
Achernar、Aoede、Autonoe、Callirrhoe、Despina、Erinome、Gacrux、Kore、Laomedeia、Leda、Pulcherrima、Sulafat、Vindemiatrix、ZephyrAchird、Algenib、Algieba、Alnilam、Charon、Enceladus、Fenrir、Iapetus、Orus、Puck、Rasalgethi、Sadachbia、Sadaltager、Schedar、Umbriel、Zubenelgenubi

建议先用短句试听 2–3 个音色,再固定到生产配置。音色名不能使用 OpenAI 的 alloynovashimmer 等名称。

风格和语速控制

Gemini TTS 的主要控制方式是自然语言 instructions。例如:

{
  "instructions": "像专业纪录片旁白一样,语气克制、有温度,专有名词逐字清晰发音"
}

speed 会被适配器转成类似 “Speak at 1.2x normal speed” 的指令,因此模型会尽量遵循,但结果不是后期变速器的数学精确倍率。要求稳定风格时,优先写清楚 instructions,并用真实文案回归。

Python(HTTPX)

import httpx

payload = {
    "model": "gemini-3.1-tts",
    "input": "欢迎使用 cnAPI 语音合成服务。",
    "voice": "Kore",
    "response_format": "wav",
    "instructions": "自然、沉稳、清晰的普通话播报",
}

response = httpx.post(
    "https://cnapi.vip/v1/audio/speech",
    headers={"Authorization": "Bearer YOUR_cnAPI_KEY"},
    json=payload,
    timeout=120,
)
response.raise_for_status()

with open("speech.wav", "wb") as audio_file:
    audio_file.write(response.content)

TTS 能力边界

  • 当前 /audio/speech 只支持单音色合成,不支持多说话人对话编排。
  • 不支持 SSE、WebSocket 或流式音频返回。
  • 不支持自定义克隆音色、参考音频或 SSML。
  • 不支持 mp3opusaacflac 输出。
  • 音色、语言和表达效果由 Gemini TTS 模型决定;cnAPI 只保证本文列出的接口转换与输出封装。

常见错误

状态码常见原因处理建议
400字段缺失、格式不支持、输入过长、音色无效对照本文字段和能力边界修正请求
400model_price_error等待平台启用公开价格;重复发送相同请求无法解决
401API Key 缺失或无效检查 Bearer Token,不要在浏览器前端公开密钥
413STT 文件超过 15 MB压缩、切分或转码后重试
429速率、额度或上游容量限制指数退避重试,并检查账户额度
500 / 502 / 503上游或服务端临时异常有限次数指数退避重试,仍失败时携带请求 ID 联系支持

生产代码应记录 HTTP 状态码和 cnAPI 返回的请求 ID,但不要记录 API Key、完整私密音频或敏感转录内容。

这篇文档对您有帮助吗?