优谷·雅言SDK 文档2.0.0

生命周期

客户端,实时会话与录音器的创建,释放与状态查询。

查看 Markdown

客户端线程安全,一个应用创建一个实例即可。客户端,实时会话与录音器都有显式的释放方法,全部可以重复调用,异常路径同样会关闭连接,取消定时器。

创建,使用与释放#

Java
try (YuguClient client = YuguClient.builder()
        .apiKey(appKey, secretKey)
        .build()) {                                       // 创建
    EvalResult r = client.evaluate(audio, config);       // 使用
    StreamSession s = client.streamEvaluate(config, listener);
    s.sendAudio(pcm);
    s.end();
    s.result().get(60, TimeUnit.SECONDS);
}                                                         // 释放:close() 自动调用

释放规则#

对象 释放 释放后
客户端 close() 未结束的实时会话依次进入 CANCELLED 与 CLOSED,进行中的请求以 90004 结束,之后的调用以 90004 失败。小程序同时释放 createRecorder 创建的录音器
实时会话 cancel() 或 close() 进入 CANCELLED 与 CLOSED,不再回调终评与错误,连接关闭回调照常触发
录音器 release() 停止录音,释放麦克风,注销监听器

Java 客户端实现 AutoCloseable,可以用 try-with-resources 管理,SDK 线程都是守护线程,不阻止 JVM 退出。示例里安卓在 onDestroy 释放,iOS 在 deinit 里释放,网页在 pagehide 事件里释放,小程序在页面 onUnload 里释放。

状态查询#

对象 查询
客户端 网页与小程序 isClosed(),Java getOpenSessionCount() 返回尚未关闭的会话数
实时会话 getState() 或 state,isActive() 在终态之前为 true
录音器 安卓,iOS,网页与小程序的录音器状态都是 IDLE,RECORDING,PAUSED,STOPPED,RELEASED,iOS 用 recorder.state 查询,其余用 getState()

声通平替层#

Java
// 创建:进入评测页面时
SkEgnManager manager = SkEgnManager.getInstance(context);
EngineSetting es = EngineSetting.getInstance(context).setOnInitEngineListener(new OnInitEngineListener() {
    @Override public void onStartInitEngine() { }
    @Override public void onInitEngineSuccess() { /* 可以开始评测 */ }
    @Override public void onInitEngineFailed(String reason) { /* appKey 为空,地址不合法等 */ }
});
manager.initEngine(appKey, secretKey, userId, es);

// 使用:每道题一次
RecordSetting rs = new RecordSetting(CoreType.CN_SENT_EVAL, "今天天气很好");
rs.setDuration(15000);
manager.startRecord(rs, new OnRecorderListener() {
    @Override public void onStart() { }
    @Override public void onStartRecordFail(String reason) { }
    @Override public void onPause() { }
    @Override public void onTick(long millisUntilFinished, double percentUntilFinished) { }
    @Override public void onRecordEnd() { }
    @Override public void onRecording(int vadStatus, int soundIntensity) { }
    @Override public void onScore(String json) {
        // 结果 JSON 或错误 JSON,见“结果 JSON”与“错误 JSON”两节
    }
});
manager.stopRecord();

// 释放:离开页面时,可以重复调用
manager.clearActivityListener();
manager.recycle();

平替层沿用声通的引擎单例与回调写法,引擎初始化一次,每道题调用一次开始与结束,页面退出时销毁引擎。

更新于 2026-10-08