Blame view

ios/Runner/XSMessageMehtodChannel.swift 5.4 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>) {
997ea0d6   liangchengyou   feat:绘本闪退问题修复
24
25
26
27
28
29
30
31
32
          var appKey = "a418"
          var secretKey = "c11163aa6c834a028da4a4b30955be99"
          var service = "wss://api.cloud.ssapi.cn"
          var userId = "guest"
          var frontTime = "3"
          var backTime = "3"
          if (!dict.keys.isEmpty) {
              appKey = dict["appKey"] as? String ?? ""
              secretKey = dict["secretKey"] as? String ?? ""
31d42f06   liangchengyou   feat:视频跟读录音修改
33
              service = dict["service"] as? String ?? ""
997ea0d6   liangchengyou   feat:绘本闪退问题修复
34
35
36
              userId = dict["userId"] as? String ?? "guest"
              frontTime = dict["frontTime"] as? String ?? "3"
              backTime = dict["frontTime"] as? String ?? "3"
997ea0d6   liangchengyou   feat:绘本闪退问题修复
37
          }
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
38
          let config = SSOralEvaluatingManagerConfig.init()
b90a1518   liangchengyou   feat:练习接口逻辑完成
39
40
          config.vad = true
          config.isOutputLog = false
997ea0d6   liangchengyou   feat:绘本闪退问题修复
41
42
          config.appKey = appKey
          config.secretKey = secretKey
b90a1518   liangchengyou   feat:练习接口逻辑完成
43
44
          config.frontTime = Double(frontTime)!
          config.backTime =  Double(backTime)!
997ea0d6   liangchengyou   feat:绘本闪退问题修复
45
          config.setValue(service, forKey: "service")
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
46
47
48
49
50
51
          SSOralEvaluatingManager.register(config)
          SSOralEvaluatingManager.share().register(.line, userId: userId)
          SSOralEvaluatingManager.share().delegate = self
      }
      
      //开始评测
3c1d5c64   liangchengyou   feat:练习功能完成
52
      func evaluateVoice(dict:Dictionary<String, Any>)  {
b90a1518   liangchengyou   feat:练习接口逻辑完成
53
54
55
          let text = dict["word"] as? String ?? ""
          let type = dict["type"] as? String ?? "0"
          let userId = dict["userId"] as? String ?? "guest"
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
56
57
          let config = SSOralEvaluatingConfig()
          config.oralContent = text
b90a1518   liangchengyou   feat:练习接口逻辑完成
58
          if (type == "0") {
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
59
60
61
62
              config.oralType = .word
          } else {
              config.oralType = .sentence
          }
3c1d5c64   liangchengyou   feat:练习功能完成
63
          config.oralType = .kidSent
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
64
65
66
67
          config.userId = userId
          SSOralEvaluatingManager.share().startEvaluateOral(with: config)
      }
      
37b78a15   liangchengyou   feat:添加录音插件
68
69
70
71
72
73
74
75
76
77
78
79
80
      //开始评测(本地音频文件)
      func evaluateLocalVoice(dict:Dictionary<String, Any>)  {
          let text = dict["word"] as? String ?? ""
          let type = dict["type"] as? String ?? "0"
          let userId = dict["userId"] as? String ?? "guest"
          let voicePath = dict["voicePath"] as? String ?? ""
          let config = SSOralEvaluatingConfig()
          config.oralContent = text
          if (type == "0") {
              config.oralType = .word
          } else {
              config.oralType = .sentence
          }
9efff6ae   liangchengyou   feat:视频跟读逻辑修改
81
          config.oralType = .sentence
37b78a15   liangchengyou   feat:添加录音插件
82
83
84
85
          config.userId = userId
          SSOralEvaluatingManager.share().startEvaluateOral(withWavPath: voicePath, config: config)
      }
      
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
86
87
88
89
90
      func handle(_ call: FlutterMethodCall,_ result: @escaping FlutterResult) {
          if (call.method == "initVoiceSdk") {
              self.setEvaluateConfig(dict:call.arguments as!  Dictionary<String, Any>)
              return
          }
3c1d5c64   liangchengyou   feat:练习功能完成
91
92
          if (call.method == "startVoice") {
              self.evaluateVoice(dict: call.arguments as! Dictionary<String, Any>)
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
93
94
95
              return
          }
          
dae7f2fd   吴启风   feat:增加android端先声...
96
          if (call.method == "startLocalVoice") {
37b78a15   liangchengyou   feat:添加录音插件
97
98
99
100
              self.evaluateLocalVoice(dict: call.arguments as! Dictionary<String, Any>)
              return
          }
          
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
101
102
103
104
          if (call.method == "stopVoice") {
              SSOralEvaluatingManager.share().stopEvaluate();
              return
          }
31d42f06   liangchengyou   feat:视频跟读录音修改
105
106
107
108
109
          
          if (call.method == "cancelVoice") {
              SSOralEvaluatingManager.share().cancelEvaluate();
              return;
          }
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
110
111
112
113
114
115
116
117
118
119
120
121
122
      }
      
      //评测结果回调
      func evaluateResult() {
          messageChannel!.invokeMethod("voiceResult", arguments: resultData)
      }
      
      //SSOralEvaluatingManagerDelegate
      /**
       评测开始
       */
      func oralEvaluatingDidStart() {
          print("评测开始")
45390cfc   liangchengyou   feat:失败回调
123
          messageChannel!.invokeMethod("voiceStart", arguments: nil)
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
124
125
126
127
128
129
130
      }
      
      /**
       评测停止
       */
      func oralEvaluatingDidStop() {
          print("评测结束")
45390cfc   liangchengyou   feat:失败回调
131
          messageChannel!.invokeMethod("voiceEnd",arguments: nil)
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
132
133
134
135
136
137
      }
      
      /**
       评测完成后的结果
       */
      func oralEvaluatingDidEnd(withResult result: [AnyHashable : Any]?, requestId request_id: String?) {
45390cfc   liangchengyou   feat:失败回调
138
          let resultDict:Dictionary<String, Any> = result as! Dictionary
cb38bc90   liangchengyou   feat:视频跟读逻辑处理
139
          resultData! = resultDict;
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
140
141
142
143
144
145
146
          self.evaluateResult()
      }
      
      /**
       评测失败回调
       */
      func oralEvaluatingDidEndError(_ error: Error?, requestId request_id: String?) {
45390cfc   liangchengyou   feat:失败回调
147
148
149
150
151
          let nsError = error as? NSError
          var map = Dictionary<String, Any>()
          map["code"] = nsError?.code
          map["message"] = error?.localizedDescription
          messageChannel!.invokeMethod("voiceFail", arguments:map)
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
152
153
154
155
156
157
      }
      
      /**
       VAD(前置时间超时回调
       */
      func oralEvaluatingDidVADFrontTimeOut() {
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
158
          SSOralEvaluatingManager.share().cancelEvaluate()
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
159
160
161
162
163
164
      }
      
      /**
       VAD(后置时间超时回调
       */
      func oralEvaluatingDidVADBackTimeOut() {
e3c2820c   liangchengyou   feat:先声SDK逻辑调整
165
166
167
168
          ///结束回调
          SSOralEvaluatingManager.share().stopEvaluate();
      }
  }