// // VoiceXSMessageChannel.swift // Runner // // Created by MacBook Pro on 2023/6/28. // import UIKit class VoiceXSMessageChannel: NSObject,SSOralEvaluatingManagerDelegate { var resultData:Dictionary? var channel:FlutterBasicMessageChannel? init(messager:FlutterBinaryMessenger) { super.init() resultData = Dictionary() self.setEvaluateConfig() channel = FlutterBasicMessageChannel(name: "com.owEnglish.voiceXs.BasicMessageChannel", binaryMessenger: messager) channel!.setMessageHandler { message, reply in if let dict = message as? Dictionary { self.evaluateVioce(dict: dict); } } } //配置评测信息 func setEvaluateConfig() { let config = SSOralEvaluatingManagerConfig.init() config.appKey = "a418" config.secretKey = "1a16f31f2611bf32fb7b3fc38f5b2c81" config.vad = true config.frontTime = 3 config.backTime = 3 config.isOutputLog = false SSOralEvaluatingManager.register(config) SSOralEvaluatingManager.share().register(.line, userId: "321") SSOralEvaluatingManager.share().delegate = self } //开始评测 func evaluateVioce(dict:Dictionary) { let text = dict["word"] as! String let type = dict["type"] as! Int let userId = dict["userId"] as! String let config = SSOralEvaluatingConfig() config.oralContent = text if (type == 0) { config.oralType = .word } else { config.oralType = .sentence } config.userId = userId SSOralEvaluatingManager.share().startEvaluateOral(with: config) } //评测结果回调 func evaluateResult() { channel!.sendMessage(resultData) {(reply) in self.resultData?.removeAll() } } //SSOralEvaluatingManagerDelegate /** 评测开始 */ func oralEvaluatingDidStart() { print("评测开始") } /** 评测停止 */ func oralEvaluatingDidStop() { print("评测结束") } /** 评测完成后的结果 */ func oralEvaluatingDidEnd(withResult result: [AnyHashable : Any]?, requestId request_id: String?) { print("评测完成结果") let resultDict:Dictionary = result?["result"] as! Dictionary resultData!["result"] = "1" //分数 resultData!["overall"] = resultDict["overall"] self.evaluateResult() } /** 评测失败回调 */ func oralEvaluatingDidEndError(_ error: Error?, requestId request_id: String?) { print("评测失败") resultData!["result"] = "0" self.evaluateResult() } /** VAD(前置时间)超时回调 */ func oralEvaluatingDidVADFrontTimeOut() { print("前置超时--->取消") SSOralEvaluatingManager.share().cancelEvaluate() if(resultData?.keys.count == 0) { resultData!["result"] = "0" self.evaluateResult(); } } /** VAD(后置时间)超时回调 */ func oralEvaluatingDidVADBackTimeOut() { print("后置超时--->结束") ///结束回调 SSOralEvaluatingManager.share().stopEvaluate(); } }