版本 2.1.2 2026-10-13#
支持声通中文开放题 open.eval.cn。
新增#
coreType为"open.eval.cn"时由平台的开放题评测打分,看内容,语言运用与表达三项。refText必填,与声通相同,填一条或多条参考答案,多条用竖线隔开,也可以填题目,由评分模型判断是哪一种。是参考答案时作答与任意一条意思一致就算答对,短答不扣分。qType为 5 时按看图说话评,6 时按情景问答评,其他取值按自由表达评。keypoints与keywords作为采分点,两项合计最多 20 个。结果含原生开放题的字段与声通的pronunciation,fluency,integrity,coherence,speed,说明见 README 的中文开放题一节。open.eval.cn的录音同样边录边传。realtime_feedback设为 1 时中间结果只有已收音频的字节数bytes,没有朗读进度。
变更#
getSDKVersion()返回yugu-stkouyu-compat/2.1.2 (api 1.0.62),请求头User-Agent为yugu-stkouyu-compat/2.1.2。
与声通 SDK 的差异#
- 兼容接口不收图片,看图说话按自由表达的细则评分。
- 录音最长 300 秒,与其他内核相同。
破坏性变更#
- 无。其他内核的请求与结果不变,英文
open.eval仍在本地回 errId 60003。
版本 2.1.1 2026-10-13#
边录边传成为默认,最终结果压缩传输,日志给出每次评测的分段耗时。
新增#
- 录音与
setIsStream(true)的外部音频默认经平台兼容实时评测通道边录边传,与realtime_feedback的取值无关。停止录音后只需发出剩余的少量音频与结束帧,结果随后经同一通道返回。realtime_feedback设为 1 时才有中间结果,其他取值时只回调最终结果,结果 JSON 与整段上传时相同,录音文件照常写入。 YuguCompat.setStreamUpload(false)改回停止录音后整段上传,与2.1.0相同,YuguCompat.isStreamUpload()返回当前设置,YuguCompat.reset()恢复边录边传。- 实时评测通道请求 permessage-deflate 压缩,平台同意后下发的消息压缩传输,由平替层解压。解压后的大小同样受 8 MB 上限约束,超过上限的消息在解压过程中即被拒绝。兼容接口请求 gzip 压缩,同样由平替层解压。
- 日志级别为 INFO 时每次评测输出一行
timing,给出上传方式,音频时长,停止录音之后的上传,等待与下载时间,结果在网络上与解压后的字节数,以及平台给出的总耗时,评测引擎耗时与平台处理耗时。DEBUG 另外逐步输出stage行与评测引擎各环节的耗时。 - 日志级别为 INFO 或 DEBUG 时请求带
timing=1,平台附带的分段耗时只写入日志,回调前从结果 JSON 中删除。兼容接口响应头Server-Timing同样写入日志。
变更#
getSDKVersion()返回yugu-stkouyu-compat/2.1.1 (api 1.0.62),请求头User-Agent为yugu-stkouyu-compat/2.1.1。EngineSetting的setSDKLogEnabled,setLogLevel与setEnableSaveLogCatToFile在initEngine之后设置也立即生效,setSDKLogEnabled(false)恢复 WARN。默认级别仍为 WARN,YuguCompat.setLogLevel仍然优先。- 实时评测通道在结束帧之前失败而退回整段上传时,
timing行的上传方式记为ws>rest,行末给出原因,原因同时写在 WARN 日志中。
与声通 SDK 的差异#
- 边录边传需要设备能访问平台的 wss 地址,连不上时停止录音后整段上传。
SkEgn只在request带realtime_feedback1 时边写边传。
破坏性变更#
- 无。录音的上传方式改为边录边传,回调顺序与结果 JSON 不变。
版本 2.1.0 2026-10-12#
朗读进度:开启 realtime_feedback 后,学生朗读过程中 onScore 收到声通结构的中间结果。
新增#
RecordSetting.setRealtime_feedback(1)时,录音与setIsStream(true)的外部音频经平台兼容实时评测通道边录边传,OnRecorderListener.onScore先收到eof为 0 的中间结果,停止录音后收到一次eof为 1 的最终结果,最终结果与整段上传时相同。- 中间结果的
result.words为新读到的字或词,结构同声通realtime_feedback的中间结果,各项分数只表示识别结果与参考文本是否一致,回调之后不再更新。result.progress给出参考文本每个字或词的read与matched,另有readUnits,matchedUnits与totalUnits。只在有新读到的字或词时回调,进度一般比朗读晚 1 到 2 秒。 - 实时评测通道在结束帧发出之前连不上或断开时,停止录音后照常整段上传,
tokenId不变,不重复计费。结束帧发出之后断开时,用同一个tokenId重新连接,重发参数帧,全部音频与结束帧,最多 2 次,已经回调过的字不再回调,平台只计费一次,仍失败时给 errId 20009。 SkEgn的request带realtime_feedback,音频为 16000 Hz 单声道 16 位 PCM 时,中间结果同样经skegn_callback回调。- AAR 内置 WebSocket 客户端,支持 TLS 与 SNI,仍然没有运行时依赖。
变更#
getSDKVersion()返回yugu-stkouyu-compat/2.1.0 (api 1.0.62),请求头User-Agent为yugu-stkouyu-compat/2.1.0。realtime_feedback设为 1 的应用此前只收到最终结果,现在先收到eof为 0 的中间结果,与声通 SDK 的行为一致。其他取值的行为不变。
与声通 SDK 的差异#
- 中间结果需要设备能访问平台的 wss 地址,连不上时只有最终结果。
OnRecordListener没有中间结果的回调,existsAudioTrans没有中间结果。
破坏性变更#
- 无。
版本 2.0.0 2026-10-08#
声通安卓平替层的首个发布版本。
新增#
- 声通
17kouyu_1.0.0.jar的平替 AAR,com.stkouyu包中全部公共与受保护的类,接口,方法,字段与常量与声通 jar 一致,常量取值不变,接入方替换依赖,删除.so文件后原有代码照常编译运行。 - 评测在优谷雅言云平台完成,录音结束后经兼容接口
POST /{coreType}上传,onScore收到的结果 JSON 包含tokenId,recordId,applicationId,userId,refText,eof,dtLastResponse与平台返回的result。 setNeedAttachAudioUrlInResult(true)时发送attachAudioUrl=1,结果 JSON 带平台返回的录音下载地址audioUrl,地址保留 7 天,录音同时保存在本地。- 结果结构对齐声通:段落内核总是请求逐字得分,
result.sentences[].details[]中缺少overall的条目补充从scores复制的overall与pronunciation,其余内容与平台返回一致。 - 录音使用
AudioRecord采集 16000 Hz 单声道 16 位 PCM,保存为 WAV 文件,支持暂停与继续,本地能量 VAD 给出vad_status与sound_intensity,设置duration后按durationInterval回调onTick,到时后自动停止。 - 外部音频写入
feed,已有文件评测existsAudioTrans,回放playback与playWithPath,麦克风预备activeMic与releaseMic,状态查询getEngineStatus。 - 可靠性:
tokenId作为Idempotency-Key,网络重试与autoRetry重新提交复用同一个值,平台只计费一次。可重试错误自动重试 2 次,退避间隔约 200 毫秒与 400 毫秒,遵守Retry-After。 - errId:20009 表示重试用尽的临时故障,60001 到 60009 表示本地检查发现的问题,其他服务端错误给出平台业务码。音频大于 50 MB,或 WAV 与 PCM 长于 300 秒时给 60009,录音到 300 秒自动停止。
SkEgn的同名接口以 Java 实现,引擎句柄为编号,结果经skegn_callback在主线程回调。STRecorder与com.stkouyu.util中的工具类保留全部公共接口,由平替层的录音与文件实现支撑。com.stkouyu.YuguCompat提供平台地址,日志级别,重试策略与超时的配置入口。- 接口一致性核对工具
tools/api-diff/run.sh,同时运行 japicmp 与 javap 两种比对,接入方可以用自己手中的声通 jar 核对。 - 示例应用
compat-demo,只使用com.stkouyu接口。
与声通 SDK 的差异#
- 只做云端评测,
ENGINE_NATIVE与ENGINE_MULTI按云端运行。 - 不带 MP3 编码器,录音一律为 WAV,默认文件名为
<tokenId>.wav,显式设置的recordName以.mp3结尾时沿用该文件名,SimpleLame的方法返回 -1。 - 平台兼容通道没有中间结果,
realtime_feedback不发送。 - 不需要授权文件,
updateProvision与inquireProvision直接返回成功。 - 日志只写入本地文件,不上传。
- 字节码版本为 Java 8,声通 jar 为 Java 7。
破坏性变更#
- 无。