speech-assess API
speech-assess 是有道智云语音评测 HTTP API 的完整体中转。它保留有道原接口的核心字段风格,服务端负责读取 .env 中的 YOUDAO_APP_KEY、YOUDAO_APP_SECRET,自动生成 appKey、salt、curtime、signType=v2 和 sign,再 转发到有道接口。
现有 /api/speech-score 保留为简化版接口;需要完全对接有道文档字段时使用 /api/speech-assess。
上游接口
POST https://openapi.youdao.com/iseapi
Content-Type: application/x-www-form-urlencoded
本站接口
GET /api/speech-assess
GET /api/speech-assess/health
POST /api/speech-assess
公网地址:
https://6767.chat/api/speech-assess
语音评测概念
语音评测会自动对用户发音水平进行评价,输出完整度、流利度、准确度、综合分、单词级评分和音素级评分。它不是自由 ASR,而是跟读评测:text 必须和音频内容对应。
音频要求
| 项 | 要求 |
|---|---|
| 格式 | wav,不压缩,PCM 编码 |
| 采样率 | 推荐 16000 |
| 位深 | 16bit |
| 声道 | 单声道 |
| 编码后大小 | 不超过 20M |
| 单次最大时长 | 120s |
| 支持语言 | 英文 en,中文 zh-CHS |
转换示例:
ffmpeg -i input.mp3 -ar 16000 -ac 1 -sample_fmt s16 output.wav
请求参数
/api/speech-assess 支持两种上传方式:
multipart/form-data:传audio文件,服务端自动转 Base64 作为q。application/x-www-form-urlencoded或 JSON:直接传qBase64 字符串。
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
audio | file | 否 | multipart 文件字段。传了 audio 时服务端自动生成 q。 |
q | text | 否 | 音频文件 Base64 编码字符串。未传 audio 时必填。 |
text | text | 是 | 音频对应的参考文本,例如 have a good day。 |
langType | text | 是 | 源语言,英文 en,中文 zh-CHS。也兼容简写字段 lang。 |
format | text | 否 | 默认 wav。 |
rate | text | 否 | 默认 16000。 |
channel | text | 否 | 默认 1,仅支持单声道。 |
type | text | 否 | 默认 1,仅支持 Base64 上传。 |
phoneSeq | text | 否 | 音素序列 ip88,例如 boy 的 phoneSeq 为 bɔɪ。 |
salt | text | 否 | UUID。不传时服务端生成。 |
curtime | text | 否 | 秒级时间戳。不传时服务端生成。 |
客户端不需要传 appKey、sign、signType,也不应该传 appSecret。
curl 示例:文件上传
curl -X POST "https://6767.chat/api/speech-assess" \
-F "audio=@output.wav" \
-F "text=have a good day" \
-F "langType=en" \
-F "format=wav" \
-F "rate=16000" \
-F "channel=1" \
-F "type=1"
curl 示例:Base64 q
audio_base64="$(base64 -w 0 output.wav)"
curl -X POST "https://6767.chat/api/speech-assess" \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "q=${audio_base64}" \
--data-urlencode "text=have a good day" \
--data-urlencode "langType=en" \
--data-urlencode "format=wav" \
--data-urlencode "rate=16000" \
--data-urlencode "channel=1" \
--data-urlencode "type=1"
签名规则
上游有道签名规则:
signType = v2
sign = sha256(appKey + input + salt + curtime + appSecret)
其中 input 由 Base64 后的音频字符串 q 计算:
q.length <= 20 ? q : q[:10] + q.length + q[-10:]
本站中转会自动完成签名。
返回结构
本站返回结构:
{
"success": true,
"service": "speech-assess",
"provider": "youdao",
"upstream": "https://openapi.youdao.com/iseapi",
"youdaoErrorCode": "0",
"errorMessageZh": "成功",
"raw": {
"errorCode": "0",
"refText": "have a good day",
"overall": 100,
"integrity": 100,
"fluency": 100,
"pronunciation": 100,
"speed": 242.42421,
"words": []
}
}
raw 完整保留有道原始响应。
上游输出字段
句子级字段
| 字段 | 类型 | 含义 | 二次开发建议 |
|---|---|---|---|
errorCode | string | 识别结果错误码,一定存在。 | 先判断是否为 0,非 0 时展示 errorMessageZh。 |
requestId | string | 请求 ID。 | 记录到日志,方便排查供应商侧问题。 |
service | string | 服务标识,例如 capt。 | 一般仅用于调试。 |
version | string | 服务版本号。 | 可记录,用于观察供应商模型版本变化。 |
refText | string | 请求的参考文本。 | 展示用户本次跟读目标。 |
start | number | 句子开始时间,单位秒。 | 可用于音频波形高亮。 |
end | number | 句子结束时间,单位秒。 | 可用于截取有效发音段。 |
overall | number | 句子综合评分。 | 最适合做主分数。 |
integrity | number | 句子完整度得分。 | 判断是否漏读、少读。 |
fluency | number | 句子流利度得分。 | 判断停顿、连贯性。 |
pronunciation | number | 句子准确度得分。 | 判断发音标准程度。 |
speed | number | 语速,单位为单词/分钟。 | 可提示“过快/过慢”。 |
emotion | number | 预留字段,目前未使用。 | 不建议作为业务指标。 |
intonation | string | 预留字段,目前未使用。 | 不建议作为业务指标。 |
words | array | 单词级评分数组。 | 做逐词高亮、单词纠错、详情页的关键字段。 |