打开方式#
进度帧#
原生开始帧带 "realtimeFeedback": true,或兼容参数帧带 "realtime_feedback": true 时,服务端在收音过程中下发进度帧。
兼容通道的进度帧沿用声通 realtime_feedback 中间结果的结构:
JSON
{"eof": 0, "recordId": "", "result": {"kernel_version": "1.0.0", "resource_version": "1.0.0",
"words": [{"charType": 0, "scores": {"pronunciation": 100, "skipped": 0, "tone": 100, "overall": 100, "overall_pron": 100},
"word": "华", "word_parts": [{"beginIndex": 0, "charType": 0, "endIndex": 0, "part": "华"}]}],
"bytes": 96000, "readUnits": 19, "matchedUnits": 18, "totalUnits": 25,
"progress": [{"word": "我", "read": true, "matched": true}, {"word": "民", "read": false, "matched": false}]}}原生通道的进度帧:
JSON
{"eof": 0, "result": {"bytes": 96000, "readUnits": 19, "matchedUnits": 18, "totalUnits": 25,
"progress": [{"word": "我", "read": true, "matched": true}, {"word": "民", "read": false, "matched": false}]}}| 字段 | 通道 | 说明 |
|---|---|---|
recordId |
兼容 | 空串,评测记录编号在终评中给出 |
result.kernel_version,result.resource_version |
兼容 | 与终评相同 |
result.words |
兼容 | 本帧新读到的字或词,按参考文本顺序,覆盖第 readUnits - words.length 到第 readUnits - 1 个单位,没有新读到的字时为空数组。每项结构同终评的 words,分数只表示识别结果与参考文本是否一致,详见下文 |
result.bytes |
两条 | 这一轮服务端已收到的音频字节数 |
result.progress |
两条 | 参考文本按原文顺序逐字或逐词列出的朗读状态。中文按字,去掉标点与空白。英文按空白分词,去掉词首词尾的标点,词内的撇号与连字符保留 |
result.progress[].word |
两条 | 字或词,取自参考文本 |
result.progress[].read |
两条 | 朗读位置已越过这个单位 |
result.progress[].matched |
两条 | 识别结果与这个单位一致 |
result.readUnits |
两条 | read 为 true 的单位数,即当前朗读位置 |
result.matchedUnits |
两条 | matched 为 true 的单位数 |
result.totalUnits |
两条 | 单位总数,等于 progress 的长度 |
- 一轮之内
read与matched只会由 false 变为 true,不会退回。matched为 true 时read也为 true。read为 true 而matched为 false,表示朗读已越过这个位置但识别结果与参考文本不一致,可能是读错,漏读或识别误差,以终评为准。 - 兼容通道的
words是增量:每个单位只在朗读位置刚越过这个单位的那一帧出现一次,把各帧的words依次拼起来就是已读的单位。识别结果一致的单位各项分数为 100,skipped为 0,不一致的各项分数为 0,skipped为 1,英文的tone为 0。下发之后不再更新,发音与声调的实际得分以终评为准。界面跟随朗读位置时,可以累加words的个数,也可以直接取readUnits。 - 进度变化时立即下发一帧,此外每收约 0.5 秒音频下发一帧。进度一般比朗读晚 1 到 2 秒,随网络情况变化。结束帧发出后,服务端对最后一段音频再识别一次,结果以进度帧在终评之前送达,终评帧是这一轮的最后一帧,之后没有进度帧。
- 进度帧不含发音评分。终评与不打开朗读进度时相同,不额外计费。
- 按字还是按词由语言决定:原生开始帧的
language以 zh 开头,或兼容 coreType 以.cn结尾或为pinyin时按字,其余按词。兼容参数帧带language时按language判断。 - 进度只对 16 kHz 16 位单声道 PCM 生效,一轮开头带 WAV 头的同样生效。其他封装格式的音频照常出终评,进度帧只有
bytes。 - 进度字段只在这一轮能跟踪进度时出现。参考文本为空,音频不是 PCM,或服务端当时无法跟踪时,进度帧为
{"eof": 0, "result": {"bytes": n}},终评不受影响。一旦出现,这一轮之后的进度帧都会带上,内容为最新状态。 - 断线重连后,服务端在新会话上重新计算进度,重放音频期间进度从零追上来,兼容通道的
words也从第一个单位重新下发。SDK 只回调readUnits与matchedUnits都不小于上一次回调的进度帧,音频缓冲策略为 DROP 时每次重连成功后从零重新计算。声通平替层按位置去掉已经回调过的单位。