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
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
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){
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
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()
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}
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)
}
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)
})
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
}
}
}
+ @objc func scanAction(){
+ BleManager.shared.startScanDevice()
+ }
}
extension DeviceListVC:UITableViewDelegate,UITableViewDataSource {
/// 服务器地址
// 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"