产品文档
语音识别
更新于 2026-09-04
蒙古语/中文语音转文字,支持音频文件转写与 WebSocket 实时流式识别。
能力与场景
语音识别提供音频文件转写与实时流式识别两种形态,对蒙古语多口音场景做过专项训练。典型场景:字幕生成、会议记录、语音输入法、呼叫中心质检。
端点列表
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /v1/asr/transcriptions | 音频文件转写(multipart 上传整段音频) |
| WSS | /v1/asr/realtime | 实时流式识别(WebSocket,连续送入音频帧) |
每个端点的请求参数、响应结构与可运行代码示例见本页下方「API 参考」(随接口定义自动生成,始终与线上一致)。
调用要点
- 文件转写适合已录制完成的音频;实时识别适合边说边出字的交互场景。
- 实时接口为原生 WebSocket:握手后先发
start控制帧,再连续发送 16kHz / 16-bit / 单声道 PCM 音频帧,服务端持续返回中间结果与分句最终结果;完整帧协议与可运行示例见本页下方「API 参考」。 - 文件转写的音频格式、大小与时长上限以 API 参考为准。
- 按音频**时长(秒)**计费,实时识别按会话累计的音频时长计。
支持语种
- 文件转写与实时流式(WebSocket)共用同一语种列表。
- 传统蒙古文与西里尔蒙古文在语音上是同一种语言,
mw/xle_mw的区别只在识别结果的书写系统。
音频语言(参数 language):
| 代码 | 语种 | 说明 |
|---|---|---|
xle_mw | 西里尔蒙古文 | 默认值;蒙古国通用的西里尔字母书写 |
mw | 传统蒙古文 | 与西里尔蒙古文语音相同,差别只在识别结果的书写系统 |
zh | 中文 | 简体中文 |
en | 英语 | — |
es | 西班牙语 | — |
fr | 法语 | — |
de | 德语 | — |
ja | 日语 | — |
ko | 韩语 | — |
ru | 俄语 | — |
pt | 葡萄牙语 | — |
ar | 阿拉伯语 | — |
hi | 印地语 | — |
id | 印尼语 | — |
yue | 粤语 | 繁体书写 |
完整代码表与各产品对照见「语种与语言代码」。
计费
- 计费单位:秒
- 每月免费额度于月初重置,优先于余额抵扣;超出部分按单价从智能云余额扣费。
- 仅对成功的调用计费;失败调用不扣费。
- 实时单价与免费额度见本页下方「当前价格」(后台调价即时生效),总规则见「计费与免费额度」。
当前价格
以下为实时生效价,与定价页同源;调价后此处立即同步。仅对成功调用计费,免费额度优先抵扣。
| 计费单位 | 单价 | 每月免费额度 |
|---|---|---|
| 按秒计费 | ¥0.01 / 秒 | 360 秒 / 月 |
API 参考
本产品共 2 个接口,以下内容随接口定义自动生成。 需要跨产品查找接口时可前往接口索引。
音频文件转写
/v1/asr/transcriptions整段音频文件转文字(非实时)。支持 wav/mp3/m4a/aac/flac/ogg/opus/webm 等常见格式(不支持的格式服务端自动转码)。两种投递方式:multipart/form-data 上传 file 字段,或 application/json 提交 audioUrl 由服务端下载(超时 30 秒)。音频上限 100MB。按有效语音秒数计费。
请求参数application/json
| 参数 | 类型 | 说明 |
|---|---|---|
file可选 | file | 音频文件(multipart 方式,与 audioUrl 二选一) |
audioUrl可选 | string | 音频公网 URL(JSON 方式,与 file 二选一) 示例: https://example.com/meeting.mp3 |
language可选 | string | 音频语言(默认 xle_mw=西里尔蒙古文) 示例: xle_mw |
diarization可选 | boolean | 是否开启说话人分离 示例: false |
响应示例200 · application/json
{
"text": "Сайн байна уу Би туслах байна",
"segments": [
{
"start": 0.4,
"end": 3.2,
"text": "Сайн байна уу",
"speaker": "说话人1"
}
],
"durationSeconds": 63
}代码示例
curl -X POST "https://cloud.heimori.cn/v1/asr/transcriptions" \
-H "Authorization: Bearer sk-heimori-..." \
-F "file=@example.wav" \
-F "audioUrl=https://example.com/meeting.mp3" \
-F "language=xle_mw" \
-F "diarization=false"实时语音识别(WebSocket 流式)
wss://cloud.heimori.cn/v1/asr/realtime边说边出字的流式识别:客户端持续推送 PCM 音频帧,服务端持续返回中间结果与分句最终结果。协议为文本 JSON 控制帧 + 二进制音频帧,基址 wss://cloud.heimori.cn。
鉴权:握手时携带 Authorization: Bearer sk-heimori-... 请求头;
浏览器原生 WebSocket 不能自定义请求头,可改用查询参数 ?key=sk-heimori-...(注意不要把密钥暴露在前端页面里,建议由你的服务端中转)。
音频格式:二进制帧为 16kHz / 16-bit / 单声道 PCM(小端), 单帧不超过 128KB 且字节数为偶数;建议每 100–200ms 发送一帧。
帧协议:
| 方向 | 帧 | 说明 |
|---|---|---|
| C→S | {"type":"start","language":"xle_mw","sampleRate":16000,"format":"pcm"} | 开始会话;language 见下方取值,sampleRate / format 可省略(只支持 16000 / pcm) |
| S→C | {"type":"started","requestId":"..."} | 会话就绪,可以开始发音频;requestId 用于对账与排障 |
| C→S | 二进制 PCM 帧 | 持续发送音频 |
| S→C | {"type":"result","text":"...","isFinal":false} | 中间结果(会被后续结果覆盖) |
| S→C | {"type":"result","text":"...","isFinal":true} | 一个完整分句的最终结果 |
| C→S | {"type":"end"} | 音频发送完毕,等待剩余结果 |
| S→C | {"type":"done","durationSeconds":12.4} | 会话结束并给出计费时长,随后服务端以 1000 关闭连接 |
| S→C | {"type":"error","code":"...","message":"..."} | 任意阶段的错误,code 与 HTTP 接口错误码一致 |
language 取值:xle_mw / mw / zh / en / es / fr / de / ja / ko / ru / pt / ar / hi / id / yue(默认 xle_mw),含义见「语种与语言代码」。
连接约束:
- 建立连接后 30 秒内必须发送
start,否则以invalid_request关闭; - 连续 120 秒无任何消息视为空闲,服务端主动关闭;
- 单连接最长 60 分钟音频;
- 每条连接占用一个并发席位(与密钥的并发上限共享)。
计费:按服务端实际接收的音频时长计秒(不足 1 秒进 1 秒),连接结束时一次性结算;上游识别失败的连接不扣费。
握手参数
| 参数 | 类型 | 说明 |
|---|---|---|
keyquery可选 | string | API Key(仅当客户端无法设置 Authorization 请求头时使用,二选一) 示例: sk-heimori-... |
代码示例
# 用 wscat 手工调试(npm install -g wscat);二进制音频帧无法在终端手敲,
# 这里只演示握手与控制帧,完整示例见 Python / JavaScript 标签
wscat -c "wss://cloud.heimori.cn/v1/asr/realtime" \
-H "Authorization: Bearer sk-heimori-..."
> {"type":"start","language":"xle_mw"}
< {"type":"started","requestId":"..."}
> {"type":"end"}
< {"type":"done","durationSeconds":0}