语音识别
音频转文字:分句 + 逐字时间戳,可选说话人区分,按音频时长计费。
POST /v1/audio/transcriptions
curl -X POST https://api.gomiservice.com/v1/audio/transcriptions \
-H "Authorization: Bearer sk-gomi-你的Key" \
-H "Content-Type: application/json" \
-d '{
"model": "volc-asr",
"audio_url": "https://example.com/meeting.mp3",
"request_id": "asr-20261003-0001"
}'| 字段 | 必填 | 说明 |
|---|---|---|
model | 是 | 固定填 volc-asr |
audio_url | 是 | 音频地址,见下 |
request_id | 是 | 幂等键,规则同提交生成:重试复用同一个值,不会重复识别、重复扣费 |
params | 否 | JSON 字符串,可设识别语言、识别内容、说话人等,见下 |
语音识别不在 GET /v1/models 的清单里,模型固定是 volc-asr。
音频要求
- 公网可直接下载的 http(s) 地址,端口限 80 / 443 / 8080 / 8443;内网地址、带鉴权/防盗链的地址都会被拒
- 文件在本地、没有公网地址:先上传文件,拿返回的
url填进audio_url - 只收音频:mp3、wav、m4a、aac、flac、ogg 等常见格式。视频请先抽出音轨
- 单个文件 200 MB、2 小时以内
- 提交时我们会先把文件下载下来量时长(这一步决定价格),所以大文件的提交请求可能要等几十秒,客户端超时请设到 2 分钟。超时了就用同一个
request_id重试 - 地址要在任务结束前一直可用、内容不变:执行时会再从这个地址读一次音频。读到的比提交时量的明显更长,任务会失败(
INVALID_REQUEST,点数退还)
参数:params
{ "params": "{\"language\":\"en-US\",\"with_speaker_info\":true}" }| 参数 | 取值 | 默认 | 说明 |
|---|---|---|---|
language | 见下表 | zh-CN | 识别语言 |
caption_type | speech / singing / auto | speech | 识别内容:只识别说话 / 只识别唱歌 / 两者都识别 |
with_speaker_info | true / false | false | 区分说话人:开了之后每句、每个字带 attribute.speaker("1"、"2"…) |
use_ddc | off / repeat / filler | off | 口语平滑标记:repeat 标记重复说的字,filler 标记语气词。被标记的字带 extra.smoothed,静音段是一句空文本、带 attribute.event: "silent" |
use_punc | true / false | true | 加标点。只在 caption_type 为 speech 时生效 |
use_itn | true / false | true | 中文数字转阿拉伯数字(「一九七零年」→「1970年」) |
布尔参数传 JSON 的 true / false,不是字符串 "true"。不认识的参数会被拒(INVALID_REQUEST),不会静默忽略。
识别语言
| 值 | 语言 |
|---|---|
zh-CN(默认) | 普通话,含中英混合和常见方言 |
yue | 粤语 |
wuu | 上海话 |
nan | 闽南语 |
xghu | 西南官话 |
zgyu | 中原官话 |
ug | 维吾尔语 |
en-US | 英语 |
ja-JP | 日语 |
ko-KR | 韩语 |
es-MX | 西班牙语 |
ru-RU | 俄语 |
fr-FR | 法语 |
响应
{
"task": {
"task_id": "GMI-XXXXXXXXXXXXX",
"status": "pending",
"model": "volc-asr",
"output_type": "transcription",
"created_at": 1791000463,
"urls": [],
"cost_points": 3
}
}提交接口只返回一个任务(不是 tasks 数组)。拿 task_id 去查询任务,到 succeeded 后结果在 transcription 里:
{
"task": {
"task_id": "GMI-XXXXXXXXXXXXX",
"status": "succeeded",
"output_type": "transcription",
"cost_points": 3,
"transcription": {
"text": "这是一次语音识别测试,看看能不能正常拿到字幕。",
"duration_ms": 9403,
"utterances": [
{
"text": "这是一次语音识别测试,", "start_ms": 120, "end_ms": 4120,
"attribute": { "event": "speech" },
"words": [
{ "text": "这", "start_ms": 120, "end_ms": 360, "attribute": { "event": "speech" } },
{ "text": "是", "start_ms": 360, "end_ms": 520, "attribute": { "event": "speech" } }
]
},
{
"text": "看看能不能正常拿到字幕。", "start_ms": 4120, "end_ms": 9403,
"attribute": { "event": "speech" },
"words": [ { "text": "看", "start_ms": 4120, "end_ms": 4300, "attribute": { "event": "speech" } } ]
}
]
}
}
}| 字段 | 说明 |
|---|---|
text | 全文,带标点,数字已转成阿拉伯数字(「一九七零年」→「1970年」) |
duration_ms | 音频时长,毫秒 |
utterances | 分句,带起止时间(毫秒),可直接用来做字幕 |
utterances[].words | 逐字(英文是逐词)时间戳,总是有,没有就是 []。做卡拉 OK 式高亮、精确剪切点用它 |
utterances[].attribute | 厂商给的附加信息。event 一直有(speech 说话、silent 静音段);开了 with_speaker_info 多一个 speaker("1"、"2"…)。没有就没这个字段 |
utterances[].words[].attribute / .extra | 字级的附加信息,同上;开了 use_ddc 被标记的字带 extra,如 {"smoothed":"repeat"} |
开了 with_speaker_info 的一句长这样:
{
"text": "你好。", "start_ms": 0, "end_ms": 900,
"attribute": { "event": "speech", "speaker": "1" },
"words": [
{ "text": "你", "start_ms": 0, "end_ms": 400, "attribute": { "event": "speech", "speaker": "1" } },
{ "text": "好", "start_ms": 400, "end_ms": 900, "attribute": { "event": "speech", "speaker": "1" } }
]
}attribute / extra 里的字段名是厂商原样,以后厂商多给的也会原样出现在这里。
- 识别通常很快:几分钟的音频十几秒内出结果,建议 3–5 秒轮询一次
- 结果体积:带逐字时间戳和附加信息后,1 小时中文约 1MB,2 小时上限约 2MB
- 用同一个
request_id重复提交拿回的是原来那个任务,但提交接口的响应里不带识别结果——结果一律从查询任务接口取
计费
- 按音频时长计费,时长按秒向上取整。提交时量好、当场定价,提交响应里的
cost_points就是这次的价格 - 识别失败自动退还
常见错误
| code | 何时 | 处理 |
|---|---|---|
AI_AUDIO_URL_UNREACHABLE | 提交时 / 执行时 | 地址下载不了:过期、404、不是公网地址、下载太慢。message 里有具体原因,换一个可直接下载的地址 |
AI_AUDIO_INVALID | 提交时 / 执行时 | 音频本身有问题:不是音频、带视频画面、文件损坏、超过 200 MB 或 2 小时 |
INVALID_REQUEST | 提交时 | 漏了 audio_url / request_id;params 里有不认识的参数或取值不对;或 request_id 已经用在一次生图/生视频提交上 |
全部错误码见错误码。