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"