EZOnlineScorer 0.0.4

EZOnlineScorer 0.0.4

测试已测试
语言语言 Obj-CObjective C
许可证 自定义
发布最后发布2017年9月

Johnny Huang 维护。



  • 作者:
  • Johnny

OnlineScorer-iOS


适用于 iOS 的 OnlineScorer。

安装

OnlineScorer 需要 iOS 8.0 或更高版本的开发目标。

OnlineScorer 可用作动态框架或静态库。有两种方式可以将 OnlineScorer 集成到您的项目中

  • 使用 CocoaPods
  • 手动安装

我们强烈建议使用 CocoaPods 将 OnlineScorer 集成到项目中。

Podfile

platform :ios, '8.0'
use_frameworks!

pod 'EZOnlineScorer'

手动安装

您可以从 OnlineScorer-iOS 下载最新的库

将 OnlineScorer 克隆或下载到项目源目录后,将 EZOnlineScorer.xcodeproj 拖动到您的项目/工作空间中,然后按以下步骤操作。

  1. 进入目标设置中的“通用”选项卡。在“嵌入的二进制文件”部分,点击加号按钮并添加“EZOnlineScorer.framework”。

  2. 仍然在“通用”选项卡中,在“链接框架和库”部分,点击加号按钮并添加“libicucore.tbd”

要将 OnlineScorer 导入到 Obj-C 中,如果您的项目是用 swift 编写的,添加 #import <EZOnlineScorer/EZOnlineScorer.h> 到您的 swift 桥接头,或者只需在需要的位置使用 import EZOnlineScorer

用法

EZOnlineScorer 的主要类是 EZOnlineScorerRecorder。在开始录音之前,配置 AppID 和 secret。如果需要,您还可以设置 socketURL。

EZOnlineScorerRecorder.configureAppID("test", secret: "test")
//set socket URL only when needed
EZOnlineScorerRecorder.setSocketURL(URL(string: "ws://test.test:1080/test")!)

要执行在线评分,首先创建一个评分有效负载对象(当前仅支持 EZReadAloudPayload),然后使用此有效负载创建 EZOnlineScorerRecorder。

let payload = EZReadAloudPayload(referenceText: "I will study Endlish very hard!")
let scorer = EZOnlineScorerRecorder(payload: payload)!

请注意,EZOnlineScorerRecorder 不管理 AVAudioSession。您需要请求录音权限,并在录音之前将 AVAudioSession 设置为正确的类别(录制或播放和录制)并激活 AVAudioSession。

guard AVAudioSession.sharedInstance().recordPermission() == .granted else {
    //request record permission
    return
}
do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryRecord)
    try AVAudioSession.sharedInstance().setActive(true)

    //begin record
    scorer.record(to: recordURL)
    //or record to a temp file
    scorer.record()
} catch {
    //failed to configure AVAudioSession 
    let alert = UIAlertController(title: "未能开启录音", message: error.localizedDescription, preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "好的", style: .default, handler: nil))
    present(alert, animated: true, completion: nil)
}

录音完成后,调用 stopRecording()。EZOnlineScorerRecorder 需要一些时间来处理,您可以通过 isProcessing & isRecording 属性检查其状态。当评分状态更改或生成报告时,EZOnlineScorerRecorder 将调用其代理。


安装

使用 OnlineScorer 需要 deployment target 为 iOS8.0 以上。

OnlineScorer 提供动态链接库和静态库两种版本,支持 CocoaPods 和手动安装两种集成方式。我们强烈推荐使用 CocoaPods 集成。

Podfile

platform :ios, '8.0'
use_frameworks!

pod 'EZOnlineScorer'

手动集成

您可以在 OnlineScorer-iOS 下载到最新版本的 OnlineScorer。

当您下载或克隆 OnlineScorer 至项目目录后,将 EZOnlineScorer.xcodeproj 文件拖入您的 project/workspace 中,然后按照以下说明进行配置。

  1. 在现代项目的 target settings 中的 "General" 选项卡,点击 "Embedded Binaries" 下的加号,添加 "EZOnlineScorer.framework"。
  2. 继续在 "General" 选项卡,点击 "Linked Frameworks and Libraries" 下的加号,添加 "libicucore.tbd"。

在 ObjC 中使用 OnlineScorer,需要 #import <EZOnlineScorer/EZOnlineScorer.h>。如果您该项目以 Swift 编写,您可以将 #import <EZOnlineScorer/EZOnlineScorer.h> 添加到您的 Swift 桥接头,也可以在 Swift 文件中使用 import EZOnlineScorer

使用方法

EZOnlineScorer 的主类是 EZOnlineScorerRecorder。在开始录音之前,您需要配置好 AppID 和 secret。如果您需要,也可以配置 socketURL。

EZOnlineScorerRecorder.configureAppID("test", secret: "test")
//set socket URL only when needed
EZOnlineScorerRecorder.setSocketURL(URL(string: "ws://test.test:1080/test")!)

在线打分需要先创建一个 scorer payload 对象(目前只支持 EZReadAloudPayload),然后再使用这个 scorer payload 创建 EZOnlineScorerRecorder。

let payload = EZReadAloudPayload(referenceText: "I will study Endlish very hard!")
let scorer = EZOnlineScorerRecorder(payload: payload)!

请注意,EZOnlineScorerRecorder 不负责管理 AVAudioSession。您需要自行申请录音权限并设置正确的 AVAudioSession category,并在录音前激活 AVAudioSession,否则录音将直接失败。

guard AVAudioSession.sharedInstance().recordPermission() == .granted else {
    //request record permission
    return
}
do {
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryRecord)
    try AVAudioSession.sharedInstance().setActive(true)

    //begin record
    scorer.record(to: recordURL)
    //or record to a temp file
    scorer.record()
} catch {
    //failed to configure AVAudioSession 
    let alert = UIAlertController(title: "未能开启录音", message: error.localizedDescription, preferredStyle: .alert)
    alert.addAction(UIAlertAction(title: "好的", style: .default, handler: nil))
    present(alert, animated: true, completion: nil)
}

当录音结束时调用 stopRecording(),EZOnlineScorerRecorder 需要一些时间和服务器交换数据。您可以通过 isProcessing 和 isRecording 属性来确定当前状态。当打分、录音状态变化或报告生成后,EZOnlineScorerRecorder 会通知其 delegate。

服务端返回错误列表

0 - 成功 -1 - 参数错误 -8 - 音频过长(目前限制120秒) -20 - 认证失败 -30 - 请求过于频繁 -31 - 余额不足 -40 - 并发不足,需要重试(仅限 WeChat) -41 - 排队超时(除 WeChat 外) -97 - 接收音频数据超时(超过15秒没有数据包) -99 - 计算资源不可用 -100 - 其他错误(例如从微信服务器下载音频失败)

打分报告格式

EZReadAloudPayload 类型返回 json 示例

{
    "fluency": 99,
    "integrity": 100,
    "locale": "en",
    "overall": 100,
    "pronunciation": 100,
    "version": "2.1.0",
    "words": [
        {
            "scores": {
                "pronunciation": 100
            },
            "word": "i"
        },
        {
            "scores": {
                "pronunciation": 100
            },
            "word": "will"
        },
        {
            "scores": {
                "pronunciation": 100
            },
            "word": "study"
        },
        {
            "scores": {
                "pronunciation": 100
            },
            "word": "english"
        },
        {
            "scores": {
                "pronunciation": 100
            },
            "word": "very"
        },
        {
            "scores": {
                "pronunciation": 100
            },
            "word": "hard"
        }
    ]
}