Blame view

ios/Runner/XSMessageMehtodChannel.swift 4.3 KB
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  //
  //  XSMessageMehtodChannel.swift
  //  Runner
  //
  //  Created by MacBook Pro on 2023/6/28.
  //
  
  import UIKit
  
  class XSMessageMehtodChannel: NSObject,SSOralEvaluatingManagerDelegate {
      var resultData:Dictionary<String, Any>?
      var messageChannel:FlutterMethodChannel?
      init(message:FlutterBinaryMessenger) {
          super.init()
          resultData = Dictionary()
53e9e6db   吴启风   feat:绘本语音评测逻辑
16
          messageChannel = FlutterMethodChannel.init(name: "wow_english/sing_sound_method_channel",  binaryMessenger: message)
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
17
18
19
20
21
22
23
          messageChannel!.setMethodCallHandler { call, result in
              self.handle(call, result)
          }
      }
      
      //配置评测信息
      func setEvaluateConfig(dict:Dictionary<String, Any>) {
b90a1518   liangchengyou   feat:练习接口逻辑完成
24
25
26
27
28
          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"
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
29
          let config = SSOralEvaluatingManagerConfig.init()
b90a1518   liangchengyou   feat:练习接口逻辑完成
30
31
          config.vad = true
          config.isOutputLog = false
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
32
33
          config.appKey = appKey //"a418"
          config.secretKey = secretKey //"1a16f31f2611bf32fb7b3fc38f5b2c81"'
b90a1518   liangchengyou   feat:练习接口逻辑完成
34
35
          config.frontTime = Double(frontTime)!
          config.backTime =  Double(backTime)!
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
36
37
38
39
40
41
          SSOralEvaluatingManager.register(config)
          SSOralEvaluatingManager.share().register(.line, userId: userId)
          SSOralEvaluatingManager.share().delegate = self
      }
      
      //开始评测
3c1d5c64   liangchengyou   feat:练习功能完成
42
      func evaluateVoice(dict:Dictionary<String, Any>)  {
b90a1518   liangchengyou   feat:练习接口逻辑完成
43
44
45
          let text = dict["word"] as? String ?? ""
          let type = dict["type"] as? String ?? "0"
          let userId = dict["userId"] as? String ?? "guest"
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
46
47
          let config = SSOralEvaluatingConfig()
          config.oralContent = text
b90a1518   liangchengyou   feat:练习接口逻辑完成
48
          if (type == "0") {
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
49
50
51
52
              config.oralType = .word
          } else {
              config.oralType = .sentence
          }
3c1d5c64   liangchengyou   feat:练习功能完成
53
          config.oralType = .kidSent
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
54
55
56
57
58
59
60
61
62
          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<String, Any>)
              return
          }
3c1d5c64   liangchengyou   feat:练习功能完成
63
64
          if (call.method == "startVoice") {
              self.evaluateVoice(dict: call.arguments as! Dictionary<String, Any>)
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
              return
          }
          
          if (call.method == "stopVoice") {
              SSOralEvaluatingManager.share().stopEvaluate();
              return
          }
      }
      
      //评测结果回调
      func evaluateResult() {
          messageChannel!.invokeMethod("voiceResult", arguments: resultData)
      }
      
      //SSOralEvaluatingManagerDelegate
      /**
       评测开始
       */
      func oralEvaluatingDidStart() {
          print("评测开始")
b90a1518   liangchengyou   feat:练习接口逻辑完成
85
  //        messageChannel!.invokeMethod("voiceStart", arguments: nil)
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
86
87
88
89
90
91
92
      }
      
      /**
       评测停止
       */
      func oralEvaluatingDidStop() {
          print("评测结束")
b90a1518   liangchengyou   feat:练习接口逻辑完成
93
  //        messageChannel!.invokeMethod("voiceEnd",arguments: nil)
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
      }
      
      /**
       评测完成后的结果
       */
      func oralEvaluatingDidEnd(withResult result: [AnyHashable : Any]?, requestId request_id: String?) {
          print("评测完成结果")
          let resultDict:Dictionary<String, Any> = 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();
      }
  }