// // XSMessageMehtodChannel.swift // Runner // // Created by MacBook Pro on 2023/6/28. // import UIKit class XSMessageMehtodChannel: NSObject,SSOralEvaluatingManagerDelegate { var resultData:Dictionary? var messageChannel:FlutterMethodChannel? init(message:FlutterBinaryMessenger) { super.init() resultData = Dictionary() messageChannel = FlutterMethodChannel.init(name: "wow_english/sing_sound_method_channely", binaryMessenger: message) messageChannel!.setMethodCallHandler { call, result in self.handle(call, result) } } //配置评测信息 func setEvaluateConfig(dict:Dictionary) { let appKey = dict["appKey"] as? String ?? "" let secretKey = dict["secretKey"] as? String ?? "" let userId = dict["userId"] as? String ?? "guest" let frontTime = dict["frontTime"] as? String ?? "3" let backTime = dict["frontTime"] as? String ?? "3" let config = SSOralEvaluatingManagerConfig.init() config.vad = true config.isOutputLog = false config.appKey = appKey //"a418" config.secretKey = secretKey //"1a16f31f2611bf32fb7b3fc38f5b2c81"' config.frontTime = Double(frontTime)! config.backTime = Double(backTime)! SSOralEvaluatingManager.register(config) SSOralEvaluatingManager.share().register(.line, userId: userId) SSOralEvaluatingManager.share().delegate = self } //开始评测 func evaluateVoice(dict:Dictionary) { let text = dict["word"] as? String ?? "" let type = dict["type"] as? String ?? "0" let userId = dict["userId"] as? String ?? "guest" let config = SSOralEvaluatingConfig() config.oralContent = text if (type == "0") { config.oralType = .word } else { config.oralType = .sentence } config.oralType = .kidSent config.userId = userId SSOralEvaluatingManager.share().startEvaluateOral(with: config) } func handle(_ call: FlutterMethodCall,_ result: @escaping FlutterResult) { if (call.method == "initVoiceSdk") { self.setEvaluateConfig(dict:call.arguments as! Dictionary) return } if (call.method == "startVoice") { self.evaluateVoice(dict: call.arguments as! Dictionary) return } if (call.method == "stopVoice") { SSOralEvaluatingManager.share().stopEvaluate(); return } } //评测结果回调 func evaluateResult() { messageChannel!.invokeMethod("voiceResult", arguments: resultData) } //SSOralEvaluatingManagerDelegate /** 评测开始 */ func oralEvaluatingDidStart() { print("评测开始") // messageChannel!.invokeMethod("voiceStart", arguments: nil) } /** 评测停止 */ func oralEvaluatingDidStop() { print("评测结束") // messageChannel!.invokeMethod("voiceEnd",arguments: nil) } /** 评测完成后的结果 */ 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("评测失败") messageChannel!.invokeMethod("voiceFail", arguments: error?.localizedDescription) } /** VAD(前置时间)超时回调 */ func oralEvaluatingDidVADFrontTimeOut() { print("前置超时--->取消") SSOralEvaluatingManager.share().cancelEvaluate() if(resultData?.keys.count == 0) { resultData!["result"] = "0" self.evaluateResult(); } } /** VAD(后置时间)超时回调 */ func oralEvaluatingDidVADBackTimeOut() { print("后置超时--->结束") ///结束回调 SSOralEvaluatingManager.share().stopEvaluate(); } }