From: liangzhenying <867174124@qq.com> Date: Wed, 12 Mar 2025 02:57:31 +0000 (+0800) Subject: Merge branch 'v2' into v21 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=dd7c2f11917b7700313c2622b119935fa2f06b64;p=mirrors%2FIOTBluetooth-iOS.git Merge branch 'v2' into v21 # Conflicts: # IOTBluetooth/IOTBluetooth/IOTBluetooth.xcworkspace/xcuserdata/yaozuopan.xcuserdatad/UserInterfaceState.xcuserstate # IOTBluetooth/IOTBluetooth/IOTBluetooth.xcworkspace/xcuserdata/yaozuopan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist # IOTBluetooth/IOTBluetooth/IOTBluetooth/IBAiManager.swift # IOTBluetooth/IOTBluetooth/IOTBluetooth/IBluetooth.swift --- dd7c2f11917b7700313c2622b119935fa2f06b64 diff --cc IOTBluetooth/IOTBluetooth/IOTBluetooth.xcworkspace/xcuserdata/yaozuopan.xcuserdatad/UserInterfaceState.xcuserstate index 368b7f0,e7e7e0b..ef75042 Binary files differ diff --cc IOTBluetooth/IOTBluetooth/IOTBluetooth/IBAiManager.swift index 9c61cd4,6e3b371..86de35c --- a/IOTBluetooth/IOTBluetooth/IOTBluetooth/IBAiManager.swift +++ b/IOTBluetooth/IOTBluetooth/IOTBluetooth/IBAiManager.swift @@@ -43,7 -41,7 +43,8 @@@ public class IBAiManager var responseId = "" var reply = "" - + var recordData = Data() ++ var isLogin:Bool{ return MixSdk.shared.auth.authorized @@@ -55,7 -53,23 +56,7 @@@ setupChatCallBack() } - func aiValid(_ data:Data){ - - /// 检查chatGPT key是否有效 - /// - Parameters: - /// - key: key - /// - completeHandler: 结果回调 - public func checkChatptValid(_ key:String ,completeHandler: @escaping MSChatGptCheckKeyCallBack){ - guard let key = chatGptKey else{ - Logger.log("请先设置chatGPT key") - completeHandler(false,nil) - return - } - MixSdk.shared.chatGpt.isValidKey(key, completeHandler: completeHandler) - } - - - + func checkAiValid(_ data:Data){ let result = IBGeneralParser.dataPacket(data) let platform = chatModeMap[result.int] ?? .doubao let key = platform == .chatGPT ? chatGptKey : nil @@@ -106,21 -100,14 +107,15 @@@ //取消当前思考 func cancelThinkAction(){ -- MixSdk.shared.chat.reset() ++// MixSdk.shared.chat.reset() + MixSdk.shared.voiceChat.reset() cancelThink?() } - func aiRequest(_ data:Data){ + func startRecord(_ data:Data){ + recordData = Data() - Logger.log("开始录音:") let result = IBGeneralParser.dataPacket(data) let code = result.int - IBSender() - .ability(IBAbility.aiReady) - .parameters([.value(1)]) - .response {[weak self] result in - self?.fectchAiAudio() - } + - let platform = chatModeMap[code] ?? .doubao Logger.log("使用模型:",platform.title) useMode?(platform) @@@ -131,35 -118,47 +126,21 @@@ } else{ MixSdk.shared.setPlatform(platform,key: nil) - //开始任务 - MixSdk.shared.voiceChat.start() } ++ MixSdk.shared.voiceChat.start() } - func fectchAiAudio(){ - IBSender() - .ability(IBAbility.fetchAiAudio) - .parameters([]) - .response {[weak self] result in - guard let self = self else {return} - responseId = "\(Date().timeIntervalSince1970)" - if result.isSuccess,let data = result.value as? Data{ - receiveAiData(sbcData: data) - } - else{ - Logger.log(result) - let model = IBAiResponse(responseId) - model.type = 0 - model.state = "end" - model.content = "录音解析错误" - sendRelpy(model: model) - } - } + func stopRecord(_ data:Data){ + Logger.log("结束录音:") + receiveFullData(sbcData: recordData) } - } - extension IBAiManager{ - func receiveAiData(sbcData:Data){ + func receiveRecordData(data:Data){ + recordData.append(data) + } -} -extension IBAiManager{ - - func sendAiState(isValid:Bool,gptKey:String?){ - let model = IBAiValid() - model.isValid = isValid - model.key = gptKey - IBSender() - .ability(IBAbility.aiValid) - .parameters([.aiValid(model)]) - .response { result in - - } - } - - func saveRecordData(data:Data){ - Logger.log("文件大小 \(data.count)") - let filePath = NSHomeDirectory() + "/Documents/\(Date().format(.long2)).sbc" - let url = URL(fileURLWithPath: filePath) - do { - try data.write(to: url) - print("保存路径 \(filePath)") - } catch let error { - print("\(error)") - } - } -} -extension IBAiManager{ + private func receiveFullData(sbcData:Data){ - saveRecordData(data: sbcData) ++// saveRecordData(data: sbcData) let pcmData = MSAudioConvert.sbcTopcm(sbcData) if pcmData.count == 0{ ++ Logger.log("sbc2pcm失败") Logger.log("sbc2pcm失败") let model = IBAiResponse(responseId) model.type = 0 @@@ -168,6 -167,6 +149,7 @@@ sendRelpy(model: model) return } ++ guard let pcmPath = IBTools.saveToFile(data: pcmData) else {return} MixSdk.shared.stt.sentenceRecognize(filePath: pcmPath,format:"pcm",sample_rate:"16000",lang: "zh-cn") {[weak self] text, error in guard let self = self else {return} @@@ -197,8 -196,8 +179,20 @@@ } } } -- - private func sendToChatGpt(content text:String){ ++ func saveRecordData(data:Data){ ++ Logger.log("文件大小 \(data.count)") ++ let filePath = NSHomeDirectory() + "/Documents/\(Date().format(.long2)).sbc" ++ let url = URL(fileURLWithPath: filePath) ++ do { ++ try data.write(to: url) ++ print("保存路径 \(filePath)") ++ } catch let error { ++ print("\(error)") ++ } ++ } ++} ++extension IBAiManager{ + func sendToChatGpt(content text:String){ reply = "" MixSdk.shared.chatGpt.send(content: text) {[weak self] response, error in guard let self = self else {return} diff --cc IOTBluetooth/IOTBluetooth/IOTBluetooth/IBReceiveManager.swift index fb16d51,e419482..6aee76d --- a/IOTBluetooth/IOTBluetooth/IOTBluetooth/IBReceiveManager.swift +++ b/IOTBluetooth/IOTBluetooth/IOTBluetooth/IBReceiveManager.swift @@@ -25,7 -25,23 +25,26 @@@ class IBReceiveManager guard let data = characteristic.value else { return } if data.count == 2 && data.int == 0 { - // Logger.log("收到0000指令异常") + //Logger.log("收到0000指令异常") + return + } + + if characteristic.uuid.uuidString == recordCharacteristicUUID { + //手表发送录音开始 + if(data.bytes[1] == 0x08 && data.bytes[2] == 0x01){ + IBAiManager.shared.startRecord(data) + } + //手表发送录音结束 + else if(data.bytes[1] == 0x08 && data.bytes[2] == 0x02){ + IBAiManager.shared.stopRecord(data) + } + else{ + //音频数据 - IBAiManager.shared.receiveRecordData(data: data) ++ let index = data.prefix(4).int ++ let content = data.suffix(from: 4) ++ Logger.log("index = \(index)",content) ++ IBAiManager.shared.receiveRecordData(data: content) + } return }