Blame view

ios/Runner/XSMessageMehtodChannel.swift 3.95 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
      }
      
      /**
       评测完成后的结果
       */
      func oralEvaluatingDidEnd(withResult result: [AnyHashable : Any]?, requestId request_id: String?) {
cb38bc90   liangchengyou   feat:视频跟读逻辑处理
100
101
          var resultDict:Dictionary<String, Any> = result as! Dictionary
          resultData! = resultDict;
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
102
103
104
105
106
107
108
          self.evaluateResult()
      }
      
      /**
       评测失败回调
       */
      func oralEvaluatingDidEndError(_ error: Error?, requestId request_id: String?) {
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
109
110
111
112
113
114
115
          messageChannel!.invokeMethod("voiceFail", arguments: error?.localizedDescription)
      }
      
      /**
       VAD(前置时间超时回调
       */
      func oralEvaluatingDidVADFrontTimeOut() {
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
116
          SSOralEvaluatingManager.share().cancelEvaluate()
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
117
118
119
120
121
122
      }
      
      /**
       VAD(后置时间超时回调
       */
      func oralEvaluatingDidVADBackTimeOut() {
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
123
124
125
126
          ///结束回调
          SSOralEvaluatingManager.share().stopEvaluate();
      }
  }