骨传导AI调试
authorliangzhenying <867174124@qq.com>
Mon, 15 Dec 2025 10:35:19 +0000 (18:35 +0800)
committerliangzhenying <867174124@qq.com>
Mon, 15 Dec 2025 10:35:19 +0000 (18:35 +0800)
DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DCBleRecord.swift
DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DCChat.swift
DeepChordsSdk_iOS/DeepChordsSdk/Example/DeepChordsSdk/DCRecord.swift
DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/VC/BleSdkEarPhonesAsrVC.swift
DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/VC/BleSdkPhoneAsrVC.swift
DeepChordsSdk_iOS/DeepChordsSdk/Example/Example/VC/DeviceListVC.swift
ShenYin/ShenYin/Api/Config.swift

index b54d987..ba9a340 100644 (file)
@@ -9,15 +9,16 @@ import StarburstSdk
 
 public class DCBleRecord {
     public static let shared = DCBleRecord()
-    
+    var recordList : [(String,Int)] = []
+    var recordText = ""
     
     public func setup(textCallback:@escaping (String)->Void){
         let asr = StarburstAsrConfig()
-        asr.isTranslate = true;
-        asr.fromLanguage = "zh-CN"
-        asr.toLanguage = "en-US"
-        asr.isTTs = true
-        asr.ttsFormat = "mp3"
+//        asr.isTranslate = true;
+//        asr.fromLanguage = "zh-CN"
+//        asr.toLanguage = "en-US"
+//        asr.isTTs = true
+//        asr.ttsFormat = "mp3"
         StarburstSdk.shared().setupDeviceRecord(with: nil, asrConfig: asr) { config in
             DCLogger.debug("录音类型 \(config!.type == 0x00 ? "实时录音" : "通话录音")")
         } recognizeText: { [weak self]  model in
@@ -26,7 +27,19 @@ public class DCBleRecord {
             
             if let text = model.textResult{
                 DCLogger.debug("识别 = \(text)")
-                textCallback(text)
+                let msg = recordList.firstIndex (where: { (str,idx) in
+                    return idx == model.definiteIndex;
+                })
+                if (msg == nil) {
+                    recordList.append((model.textResult,model.definiteIndex))
+                } else {
+                    recordList[msg!] = (model.textResult,model.definiteIndex)
+                }
+                recordText = recordList.compactMap({ (str,idx) in
+                    return str
+                }).joined(separator: "\n")
+                
+                textCallback(recordText)
             }
             
         } stateChange: { [weak self]  code in
index 896baa4..2d1d4cb 100644 (file)
@@ -7,9 +7,36 @@
 
 import StarburstSdk
 
+/// Ai回应模型
+public class ChatCellModel:NSObject,NSCoding  {
+    public var type: Int = 0//1发,0收
+    public var content: String = ""
+    public var id:Int = 0
+    
+    required public override init() { }
+    
+    public func encode(with aCoder: NSCoder) {
+        aCoder.encode("\(type)", forKey: "type")
+        aCoder.encode(content, forKey: "content")
+        aCoder.encode("\(id)", forKey: "id")
+    }
+    
+    required public init?(coder aDecoder: NSCoder) {
+        type = Int(aDecoder.decodeObject(forKey: "type") as? String ?? "0") ?? 0
+        content = aDecoder.decodeObject(forKey: "content") as? String ?? ""
+        id = Int(aDecoder.decodeObject(forKey: "id") as? String ?? "0") ?? 0
+    }
+}
+
+
 public class DCChat{
     public static let shared = DCChat()
     var speakerList = [StarbusrtSpeaker]()
+    
+    
+    var dataList:[ChatCellModel] = []
+    public var chatStateChange:((Int)->Void)?
+    public var chatNeedReloadData:(()->Void)?
     public var dialogId = 0
     
     public func getVcSpeekerList(finished:@escaping (Any,Bool)->Void){
@@ -36,23 +63,37 @@ public class DCChat{
         StarburstSdk.shared().setupVoiceChat(with: config) { dialogId in
             print("开始对话 = \(dialogId)")
         } textCallback: {[weak self] model in
-            guard let model = model else { return }
-            self?.dialogId = model.dialogId
-
-            if let textResult = model.textResult,textResult.count > 0 {
-                let text = "[send]" + model.textResult + "\n"
-                DCLogger.debug(text)
-                asrCallback(model.textResult)
-            } else if model.conversationFinish == true && model.responseText != nil
-                        && model.responseText!.count > 0
-            {
-                let text = "[send]" + model.responseText + "\n"
-                DCLogger.debug(text)
-                responseCallback(model.responseText)
-            } else {
-                return
+            guard let self = self else { return }
+            guard let textModel = model else { return }
+            self.dialogId = textModel.dialogId
+            
+            if let text = textModel.textResult{
+                asrCallback(text)
+            }
+            else if let text = textModel.responseText{
+                responseCallback(text)
             }
             
+//            Logger.debug(text,index)
+//            guard let text = text else{
+//                return
+//            }
+
+//            if dataList.last?.id == -1 {
+//                dataList.removeLast()
+//            }
+//            if let model = dataList.last,model.id == textModel.definiteIndex,model.type == 1,let text = textModel.textResult {
+//                model.content = text
+//            }
+//            else{
+//                let model = ChatCellModel()
+//                model.type = 1
+//                model.content = textModel.textResult ?? ""
+//                model.id = textModel.definiteIndex
+//                dataList.append(model)
+//            }
+//            chatNeedReloadData?()
+            
         } responseVoice: { [weak self] (dialogId,data, finish) in
             guard let self = self else { return }
             self.dialogId = dialogId
index 868d90b..2fc6c5f 100644 (file)
@@ -7,7 +7,9 @@
 import StarburstSdk
 
 public class DCRecord {
-    public static let shared = DCRecord()    
+    public static let shared = DCRecord()
+    var recordList : [(String,Int)] = []
+    var recordText = ""
     
     public func start(fromLanguage:String,toLanguage:String,textCallback:@escaping (String)->Void){
         let config = StarburstAsrConfig()
@@ -20,12 +22,26 @@ public class DCRecord {
         StarburstSdk.shared().startRecordAsr(config) {voiceData in
             //print("录音的音频流 = \(voiceData!)")
         } recognizeText: {[weak self] model in
-            DCLogger.debug(model)
+            guard let self = self else {return}
             guard let model = model else {return}
-            if let text = model.textResult ,model.definite{
-                DCLogger.debug("确定  text = \(text)")
-                textCallback(text)
+            
+            if let text = model.textResult{
+                DCLogger.debug("识别 = \(text)")
+                let msg = recordList.firstIndex (where: { (str,idx) in
+                    return idx == model.definiteIndex;
+                })
+                if (msg == nil) {
+                    recordList.append((model.textResult,model.definiteIndex))
+                } else {
+                    recordList[msg!] = (model.textResult,model.definiteIndex)
+                }
+                recordText = recordList.compactMap({ (str,idx) in
+                    return str
+                }).joined(separator: "\n")
+                
+                textCallback(recordText)
             }
+
 //            guard let self = self else {return}
 //            self.resetTimer()
 //            guard let model = model else {return}
index 162cb9c..d371c46 100644 (file)
@@ -43,7 +43,7 @@ class BleSdkEarPhonesAsrVC: BaseVC {
         DCBleRecord.shared.setup {[weak self] text in
             guard let self = self else{return}
             
-            self.textView.text += text
+            self.textView.text = text
             let range = NSMakeRange(textView.text.count - 1, 1)
             self.textView.scrollRangeToVisible(range)
         }
index de577c7..41cbaac 100644 (file)
@@ -94,7 +94,7 @@ extension BleSdkPhoneAsrVC{
         DCRecord.shared.start(fromLanguage: fromLanguage, toLanguage: toLanguage, textCallback: { [weak self] text in
             guard let self = self else{return}
             
-            self.textView.text += text
+            self.textView.text = text
             let range = NSMakeRange(textView.text.count - 1, 1)
             self.textView.scrollRangeToVisible(range)
         })
index 34efe20..ed0a221 100644 (file)
@@ -24,7 +24,7 @@ class DeviceListVC: BaseVC{
     
     func setupViews(){
         self.title = "扫描"
-        
+        self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "扫描", style: .done, target: self, action: #selector(scanAction))
         tableView.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)
         tableView.delegate = self
         tableView.dataSource = self
@@ -55,6 +55,9 @@ class DeviceListVC: BaseVC{
             }
         }
     }
+    @objc func scanAction(){
+        BleManager.shared.startScanDevice()
+    }
 }
 
 extension DeviceListVC:UITableViewDelegate,UITableViewDataSource {
index ad0d9b3..90e740b 100644 (file)
@@ -19,6 +19,8 @@ class DCConfig{
     /// 服务器地址
 //    static let baseURL = "http://118.145.178.188:32000"
     static let baseURL = "https://app-api.deepchords.com"
+//    static let baseURL = "https://app-api.deepchords-ai.com"
+    
     /// 用户隐私协议地址
     static let yonghuBaseURL = "https://pub-tos.deepchords.com"