如果你正打算开发一个语言学习 App,在了解了 DolphinSOE 的功能之后,你一定想马上动手开始开发。DolphinSOE 已经准备了多种开发语言的 SDK,能够帮助开发者快速上手集成发音评测功能。 本文就以 Android SDK 为例,手把手带你体验 10 分钟快速跑通一个能出分的英语发音评测 DEMO。
DolphinSOE Android Demo 运行界面在 Android 上集成发音评测,真的只需要 10 分钟吗?
跑通一个最小可运行 Demo,确实只需要 10 分钟:完成凭证申请、引入 SDK、初始化引擎、执行一次录音并获取评分。但跑通 Demo 不等于可以直接上线生产环境,业务上线还需要完成题库准备、业务 UI 开发、异常逻辑处理等工作。
但即便只是跑通 Demo,这个过程也比大多数人想象中简单得多。DolphinSOE 提供的 Android SDK 已经把录音采集、Token 维护、音频传输、获取打分结果这一整条链路都包进了客户端几行调用里。从零开始,大概需要以下的操作步骤:
| 步骤 | 预计耗时 |
|---|---|
| 提交官网表单、接收自动回复邮件 | 2 分钟 |
| 下载 SDK,把 appid/appsecret 填进示例代码 | 2 分钟 |
| 设置题型参数(评分题型、参考答案等) | 2 分钟 |
| 编译、运行 | 4 分钟 |
接入流程图准备好开发环境,跟我们一起开始吧。
两分钟完成测试申请
DolphinSOE 的测试通道相当简单:
- ① 提交测试申请:在官网提交「联系我们」表单,
- ② 接收自动回复的邮件:只需几秒钟,系统会自动回复一封邮件,邮件里附带试用的
appid/appsecret。这套测试凭证支持英语、日语、中文三种语言的发音评测,最大支持 2 路并发,能够满足本地调试和单设备演示需求。 邮件里还附了 SDK 下载地址和接口文档,安卓 SDK 下载下来解压就能用。
下载后的 Demo 工程内置完整测试界面,录音、音频播放、评分展示等基本功能均已实现,无需开发者从头搭建 UI,有效提升集成调试效率。
三步跑通第一个发音评测流程
以调用英语基础题型为例,DEMO 把接入压缩成了三步:
Step 1 · 放入 SDK 文件。 将压缩包中的 .aar 文件放入项目的 app/libs 目录。请根据项目目标设备架构(x86 / ARM)选择对应的 aar 包。
Step 2 · 填入凭证。 打开项目中的 MainActivity.java 文件,把邮件中收到的 appid / appsecret 填进这两个常量:
// MainActivity.java private static final String appIdEn = ""; // ← 填写邮件里的 appid private static final String appSecretEn = ""; // ← 填写邮件里的 appsecret
Step 3 · 编译运行。 实测运行,在 DEMO 的测试界面上选择题型,开始录音、朗读、结束录音,分数立刻出来。
到这里,一个最简单的发音评测 DEMO 就已经跑通了,是不是非常简单?
如果你接下来想把发音评测 SDK 嵌入到自己的 App里,那请继续往下看。
DEMO 在背后做了什么
如果你要把评测嵌进自己的业务界面,而不是用 DEMO 的测试页,那你需要了解引擎的初始化流程。具体在 EvalLogic.java 这个文件中。
// 1) 创建引擎单例 SpeechEval eval = SpeechEval.createInstance(this); // 2) 基础配置 eval.setSampleRate(16000); // 采样率固定 16000 eval.setListener(evalListener); // 实现 EventListener,接收结果/错误事件 eval.setInitLanguageEn(SpeechEval.InitSettingOnline.OralOnLine); //设置为在线评测模式 // 3) 初始化单例 eval.setServerAPI("api.soe.dolphin-ai.jp"); eval.init(appIdEn, appSecretEn, "user01");
初始化结果通过 engineInitState 回调回来,成功码是 "00000"。常见的失败码:13010(缺少网络权限)、11011(签名错误)、11013(appId 不存在)。在开发调试时,可优先通过该状态码配合状态码表排查相关问题。
一次评测要设置哪些参数?
- 公共参数:管「怎么连接、用什么语言、什么评分规则」,它是整个会话级别的配置,跟“评什么”无关。
- 题型参数:管「这一题评什么、怎么评」,这是每个评测任务(每次请求)的配置,核心就是“选题型+提供参考答案”。
跑通 DEMO 时,在 UI.java 中已经配置了相关的公共参数,比如语种 langType、采样率 sampleRate 等。如果你需要设置某个参数,使用 SpeechEval 类中提供的 set 方法就可以了。在这里注意,如果不希望云端留存音频数据,请调用 setAudioUrl(false) 进行设置;如需云端保存音频,请设置 setAudioUrl(true) ,音频的下载链接将随评分结果一同返回,云端存储的数据将在 30 天后自动删除。
对于题型参数,需要通过 setParamsJson 传进去:
JSONObject json = new JSONObject(); json.put("mode", "word"); // 题型:word / sentence / chapter 等等 json.put("refText", "good morning"); // 参考文本,引擎照它打分 eval.setParamsJson(json);
不同题型在参考文本怎么组织、评到什么粒度上差别很大。各题型的时长限制、refText 与评分维度差异,我们在英语发音评测基础题型这篇文章里系统讲过;完整的参数列表(以英语单词题型为例),请参考接口文档。
最后建议每次评测都传入 userId(可以自定义,DEMO 里示例是“user01”),userId 会随评测结果原样回传,便于问题排查与数据追溯。
怎样开始录音并得到评分结果?
配置好之后,评测有两种发起方式:
- 录音方式:
createRecorder()建好录音器,再start(recorder, startListener)开始;用户念完调stop()结束(也可以开后置静音检测让它自动停)。startListener用来监听开始 / 结束状态,体验更稳。 - 传文件方式:
start(wavPath, startListener),直接把一段已有的音频送进去评。文件要求 16000Hz / 16Bit / 单声道 的 wav 或 pcm,发完自动结束,不用再调用stop()。
如果中途想取消,使用 cancel() 取消本次评测,不会返回结果。
结果在 onResult 回调里以 JSON 字符串形式返回:
eval.setListener(new SpeechEval.EventListener() { @Override public void onResult(String result, boolean online) { // result 是 JSON 字符串,从中解析出各维度得分 // 具体格式请参考接口协议文档 } @Override public void onWarning(String taskId, String code, String msg) { // 处理Warning事件 } @Override public void onError(String taskId, String code, String msg) { // 处理Error事件 } });
回调分为 Warning(警告)与 Error(错误)两类:触发 Warning 仍会正常返回评测结果,比如音量过低、录音时长过短等场景;触发 Error 代表任务异常终止,不会返回评分结果,比如缺少必填参数、凭证无效等场景。
结果回调流程结语
到这里,相信你已经掌握了 DolphinSOE Android 发音评测 SDK 的基础接入流程,可以快速跑通完整的发音评测 Demo。
DolphinSOE 发音评测能力已经在海外教学场景落地验证,客户覆盖外语学习 App、学校、课外班等各类教育机构,日均评测请求约 10 万次(100k calls/day),经受住高并发教学场景的实际考验。
SDK 接入只是第一步。想要真正发挥发音评测的价值,还需要结合自身业务,设计贴合学习者的练习流程,把打分能力转化为切实的发音训练体验。如果在集成过程中遇到问题,可以查阅配套接口文档,或者联系我们获取技术支持。
