playboy/deepchords重构
authorliangzhenying <867174124@qq.com>
Thu, 19 Mar 2026 06:48:03 +0000 (14:48 +0800)
committerliangzhenying <867174124@qq.com>
Thu, 19 Mar 2026 06:48:03 +0000 (14:48 +0800)
105 files changed:
ShenYin/DeepChordsSdk/DCBleManager.swift
ShenYin/DeepChordsSdk/DCBleRecord.swift
ShenYin/DeepChordsSdk/DCCallRecord.swift
ShenYin/DeepChordsSdk/DCChat.swift
ShenYin/DeepChordsSdk/DCLogger.swift
ShenYin/DeepChordsSdk/DCPhoneRecord.swift
ShenYin/DeepChordsSdk/DCSdk.swift
ShenYin/DeepChordsSdk/DCText.swift
ShenYin/DeepChordsSdk/DCTts.swift
ShenYin/DeepChordsSdk/DCZh2En.swift
ShenYin/DeepChordsSdk/DirectCompatibility.swift [new file with mode: 0644]
ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstSdk.h [deleted file]
ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstSdkManager.h [deleted file]
ShenYin/DeepChordsSdk/StarburstSdk.framework/StarburstSdk [deleted file]
ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeDirectory [deleted file]
ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements [deleted file]
ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements-1 [deleted file]
ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeResources [deleted file]
ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeSignature [deleted file]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/Info.plist [new file with mode: 0644]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/AIGCErrorCode.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/AIGCErrorCode.h with 100% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/CustomChatWebSocketClient.h [new file with mode: 0644]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/CustomVoiceChatConfig.h [new file with mode: 0644]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/FileProcessingManager.h [new file with mode: 0644]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/FileResultTaskPoller.h [new file with mode: 0644]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/FileTaskResult.h [new file with mode: 0644]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/ITaskProcessStatusListener.h [new file with mode: 0644]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarbaustVoiceChatModel.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarbaustVoiceChatModel.h with 81% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstAsrConfig.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstAsrConfig.h with 79% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstAsrModel.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstAsrModel.h with 80% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstAudioStreamConfig.h [new file with mode: 0644]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstConfig.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstConfig.h with 97% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstFileAsrModel.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstFileAsrModel.h with 70% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstOffLineFile.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstOffLineFile.h with 85% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstPhoneSdk.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstPhoneSdk.h with 61% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstSdk.h [new file with mode: 0644]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstSdkManager.h [new file with mode: 0644]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstStreamModel.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstStreamModel.h with 88% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstVoiceChatRecorder.h [new file with mode: 0644]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarbusrtSpeaker.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarbusrtSpeaker.h with 85% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StartburstDecoderConfig.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstDecoderConfig.h with 87% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StartburstGlassChat.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstGlassChat.h with 55% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StartburstGlassesSdk.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstGlassesSdk.h with 59% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StartburstMixSdk.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StartburstMixSdk.h with 52% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/TextToImageCallback.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/TextToImageCallback.h with 96% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/TextToImageManager.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/TextToImageManager.h with 97% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/TextToSpeechCallback.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/TextToSpeechCallback.h with 100% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/TextToSpeechManager.h [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/TextToSpeechManager.h with 74% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Info.plist [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Info.plist with 52% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Modules/module.modulemap [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/Modules/module.modulemap with 65% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/PrivacyInfo.xcprivacy [moved from ShenYin/DeepChordsSdk/StarburstSdk.framework/PrivacyInfo.xcprivacy with 100% similarity]
ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/StarburstSdkDirect [new file with mode: 0755]
ShenYin/ShenYin.xcodeproj/project.pbxproj
ShenYin/ShenYin/Cache/UserModel.swift
ShenYin/ShenYin/Channel/CCAiSupportLanguage.swift [moved from ShenYin/ShenYin/lan/CCAiSupportLanguage.swift with 100% similarity]
ShenYin/ShenYin/Channel/CCCommon.swift [new file with mode: 0644]
ShenYin/ShenYin/Channel/DeepChords/JoySdk/VC/JoyTabBC.swift
ShenYin/ShenYin/Channel/DeepChords/JoySdk/tool/CCBleManager.swift
ShenYin/ShenYin/Channel/DeepChords/JoySdk/tool/CCConfig.swift
ShenYin/ShenYin/Channel/DeepChords/JoySdk/tool/CCDevice.swift
ShenYin/ShenYin/Channel/DeepChords/JoySdk/tool/CCPage.swift
ShenYin/ShenYin/Channel/PLAYBOY/DcSdk/VC/PbAiFunctionVC.swift
ShenYin/ShenYin/Channel/PLAYBOY/DcSdk/VC/PbChatVC.swift
ShenYin/ShenYin/Channel/PLAYBOY/DcSdk/VC/PbModeVC.swift
ShenYin/ShenYin/Channel/PLAYBOY/DcSdk/VC/PbTctyVC.swift
ShenYin/ShenYin/Channel/PLAYBOY/DcSdk/tool/CCBleManager.swift
ShenYin/ShenYin/Channel/PLAYBOY/DcSdk/tool/CCConfig.swift
ShenYin/ShenYin/Channel/PLAYBOY/DcSdk/tool/CCDevice.swift
ShenYin/ShenYin/Channel/PLAYBOY/DcSdk/tool/CCPage.swift
ShenYin/ShenYin/Resource/colors/Colors+YL.swift
ShenYin/ShenYin/UI/Base/BaseVC.swift
ShenYin/ShenYin/UI/Customer/CustomerCell.swift
ShenYin/ShenYin/UI/Home/Chat/CCRole.swift
ShenYin/ShenYin/UI/Home/Dialog/DialogRecordBar.swift
ShenYin/ShenYin/UI/Home/FieldRecording/RecordBar.swift
ShenYin/ShenYin/UI/Home/FieldRecording/RhythView.swift
ShenYin/ShenYin/UI/Home/HistoryRecord/VC/CalendarPickerVC.swift
ShenYin/ShenYin/UI/Home/Root/CurrentDeviceView.swift
ShenYin/ShenYin/UI/Home/Scan/BleScanVC.swift
ShenYin/ShenYin/UI/Home/Scan/DeviceVM.swift
ShenYin/ShenYin/UI/Launch/AppManager.swift
ShenYin/ShenYin/UI/Login/Controller/ForgetVC.swift
ShenYin/ShenYin/UI/Login/Controller/LoginVC.swift
ShenYin/ShenYin/UI/Login/Controller/RegisterVC.swift
ShenYin/ShenYin/UI/Login/Controller/SmsLoginVC.swift
ShenYin/ShenYin/UI/Login/View/CodeView.swift
ShenYin/ShenYin/UI/Login/View/CustomInputView.swift
ShenYin/ShenYin/UI/Login/View/LoginBgView.swift
ShenYin/ShenYin/UI/Login/View/LoginHeaderView.swift
ShenYin/ShenYin/UI/Login/View/PasswordView.swift
ShenYin/ShenYin/UI/Login/View/RegionView.swift
ShenYin/ShenYin/UI/Mine/Feedback/FeekbackVC.swift
ShenYin/ShenYin/UI/Mine/ProtocolVC.swift
ShenYin/ShenYin/UI/Mine/RevokeVC.swift
ShenYin/ShenYin/UI/Mine/Root/MineHeaderView.swift
ShenYin/ShenYin/UI/Mine/UserInfo/UserInfoVC.swift
ShenYin/ShenYin/UI/Mode/CustomEqVC.swift
ShenYin/ShenYin/UI/Mode/FindVC.swift
ShenYin/ShenYin/UI/Mode/ModeFindView.swift
ShenYin/ShenYin/UI/Raisound/RSChatCell.swift
ShenYin/ShenYin/UI/common/BrokenLineView.swift
ShenYin/ShenYin/UI/common/CustomButton.swift
ShenYin/ShenYin/UI/common/LogVC.swift
ShenYin/ShenYin/UI/common/pop/PopTextField.swift
ShenYin/ShenYin/UI/common/pop/RecordTipsView.swift

index fe33588..0bac9ed 100644 (file)
@@ -7,7 +7,7 @@
 
 import Foundation
 import CoreBluetooth
-import StarburstSdk
+import StarburstSdkDirect
 
 
 /// 蓝牙管理
index b629e91..73fe130 100644 (file)
@@ -5,7 +5,7 @@
 //  Created by liangshi on 2025/12/9.
 //
 
-import StarburstSdk
+import StarburstSdkDirect
 
 //20001,///开始录音
 //20002,///停止录音
index ab64fec..deadbd6 100644 (file)
@@ -5,7 +5,7 @@
 //  Created by liangshi on 2025/12/30.
 //
 
-import StarburstSdk
+import StarburstSdkDirect
 
 /// 通话录音
 public class DCCallRecord {
index 3bdd384..b849b79 100644 (file)
@@ -5,7 +5,7 @@
 //  Created by liangshi on 2025/12/15.
 //
 
-import StarburstSdk
+import StarburstSdkDirect
 
 /// 角色模型
 public class DCRole{
index b609102..918ba28 100644 (file)
@@ -6,7 +6,7 @@
 //
 
 import Foundation
-import StarburstSdk
+import StarburstSdkDirect
 
 /// 日记管理
 public class DCLogger {
index 172c4c3..f297f72 100644 (file)
@@ -4,7 +4,7 @@
 //
 //  Created by liangshi on 2025/12/9.
 //
-import StarburstSdk
+import StarburstSdkDirect
 
 public class DCPhoneRecord {
     /// 单利
index 8238e97..c1293dd 100644 (file)
@@ -5,7 +5,7 @@
 //  Created by liangshi on 2025/11/25.
 //
 import Foundation
-import StarburstSdk
+import StarburstSdkDirect
 public class DCSdk{
     public static let shared = DCSdk()
     
index e0078b6..59b34f0 100644 (file)
@@ -4,7 +4,7 @@
 //
 //  Created by liangshi on 2026/1/15.
 //
-import StarburstSdk
+import StarburstSdkDirect
 
 /// 文本操作类
 public class DCText{
index 7236dc0..fa9ab5d 100644 (file)
@@ -4,7 +4,7 @@
 //
 //  Created by liangshi on 2026/2/26.
 //
-//import StarburstSdk
+//import StarburstSdkDirect
 //public class DCTts:NSObject{
 //    public static let shared = DCTts()
 //    
index ab7d462..e5fe601 100644 (file)
@@ -5,7 +5,7 @@
 //  Created by liangshi on 2025/12/29.
 //
 
-import StarburstSdk
+import StarburstSdkDirect
 
 
 /// 响应模型
diff --git a/ShenYin/DeepChordsSdk/DirectCompatibility.swift b/ShenYin/DeepChordsSdk/DirectCompatibility.swift
new file mode 100644 (file)
index 0000000..641aa3a
--- /dev/null
@@ -0,0 +1,35 @@
+import Foundation
+@_exported import StarburstSdkDirect
+
+// Compatibility aliases so the Demo can compile against Direct framework
+// without rewriting all sample code symbols.
+
+typealias StarburstAsrConfig = SBD_StarburstAsrConfig
+typealias StarburstBleAsrConfig = SBD_StarburstBleAsrConfig
+typealias StarburstAsrFileConfig = SBD_StarburstAsrFileConfig
+typealias StarburstTslConfig = SBD_StarburstTslConfig
+typealias StarburstVoiceChatConfig = SBD_StarburstVoiceChatConfig
+
+typealias StarburstPhoneSdk = SBD_StarburstPhoneSdk
+// Direct framework exposes `SBD_StarburstSdk` (not `SBD_StarburstSdkManager`)
+typealias StarburstSdk = SBD_StarburstSdk
+typealias StarburstSdkManager = SBD_StarburstSdk
+typealias StarburstConfig = SBD_StarburstConfig
+
+typealias StartburstMixSdk = SBD_StartburstMixSdk
+typealias StartburstGlassesSdk = SBD_StartburstGlassesSdk
+typealias StartburstGlassChat = SBD_StartburstGlassChat
+typealias StartburstDecoderConfig = SBD_StartburstDecoderConfig
+typealias StarbusrtSpeaker = SBD_StarbusrtSpeaker
+
+typealias StarburstAsrModel = SBD_StarburstAsrModel
+typealias StarburstStreamModel = SBD_StarburstStreamModel
+typealias StarburstFileAsrModel = SBD_StarburstFileAsrModel
+typealias StarburstTranslateResult = SBD_StarburstTranslateResult
+typealias StarburstAsrTtsResult = SBD_StarburstAsrTtsResult
+
+// Note: the original model name in headers is `StarbaustVoiceChatModel` (typo kept for compatibility)
+typealias StarbaustVoiceChatModel = SBD_StarbaustVoiceChatModel
+typealias StarbustVoiceChatModel = SBD_StarbaustVoiceChatModel
+typealias StarburstVoiceChatModel = SBD_StarbaustVoiceChatModel
+
diff --git a/ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstSdk.h b/ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstSdk.h
deleted file mode 100644 (file)
index fb26542..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-//
-//  Starburst.h
-//  Starburst
-//
-//  Created by cookies on 2023/6/12.
-//
-
-#import <Foundation/Foundation.h>
-
-//! Project version number for Starburst.
-//FOUNDATION_EXPORT double StarburstSdkVersionNumber;
-
-//! Project version string for Starburst.
-//FOUNDATION_EXPORT const unsigned char StarburstSdkVersionString[];
-
-// In this header, you should import all the public headers of your framework using statements like #import <StarburstSdk/PublicHeader.h>
-
-#import <StarburstSdk/StarburstSdkManager.h>
-#import <StarburstSdk/StarburstConfig.h>
-#import <StarburstSdk/StarburstPhoneSdk.h>
-#import <StarburstSdk/StartburstMixSdk.h>
-#import <StarburstSdk/StartburstGlassesSdk.h>
-#import <StarburstSdk/StartburstGlassChat.h>
-#import <StarburstSdk/StarburstAsrConfig.h>
-#import <StarburstSdk/StarburstAsrModel.h>
-#import <StarburstSdk/StarburstFileAsrModel.h>
-#import <StarburstSdk/StarbaustVoiceChatModel.h>
-#import <StarburstSdk/StarbusrtSpeaker.h>
-#import <StarburstSdk/StarburstStreamModel.h>
-#import <StarburstSdk/StarburstOffLineFile.h>
-#import <StarburstSdk/StartburstDecoderConfig.h>
-#import <StarburstSdk/TextToImageManager.h>
-#import <StarburstSdk/TextToImageCallback.h>
-#import <StarburstSdk/AIGCErrorCode.h>
-#import <StarburstSdk/TextToSpeechManager.h>
-#import <StarburstSdk/TextToSpeechCallback.h>
diff --git a/ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstSdkManager.h b/ShenYin/DeepChordsSdk/StarburstSdk.framework/Headers/StarburstSdkManager.h
deleted file mode 100644 (file)
index 1aa3a71..0000000
+++ /dev/null
@@ -1,195 +0,0 @@
-//
-//  StarburstSdk.h
-//  VoiceDemo
-//
-//  Created by incar on 2024/9/12.
-//
-
-#import <Foundation/Foundation.h>
-#import <StarburstSdk/StarburstAsrConfig.h>
-#import <StarburstSdk/StarburstAsrModel.h>
-#import <StarburstSdk/StarbaustVoiceChatModel.h>
-#import <StarburstSdk/StarburstFileAsrModel.h>
-#import <StarburstSdk/StarburstOffLineFile.h>
-#import <StarburstSdk/StarburstStreamModel.h>
-#import <StarburstSdk/StarbusrtSpeaker.h>
-#import <StarburstSdk/StartburstDecoderConfig.h>
-
-typedef NS_OPTIONS(NSInteger,StarburstCode) {
-    StarburstCode_Start_Record = 20001,///开始录音
-    StarburstCode_Stop_Record = 20002,///停止录音
-    StarburstCode_Record_Error = 20003,///录音出错
-    StarburstCode_Ble_Disconected = 20004,///蓝牙断开
-    StarburstCode_Websocket_Connected = 30001,///socket连上
-    StarburstCode_Websocket_Disconnected = 30002,///socket断开连接
-    StarburstCode_Websocket_Connecting = 30003,///socket连接中...
-    StarburstCode_Websocket_pingTimeOut = 30004,///ping超时
-    StarburstCode_Net_Error = 50000,///网络错误
-    StarburstCode_UnAuth = 60000,///未鉴权
-};
-
-typedef void (^AudioIntensityInputCallback)(NSArray<NSNumber*> *left,
-                                            NSArray<NSNumber*> *right,
-                                            NSTimeInterval timestampMs);
-
-@interface StarburstSdk : NSObject
-//@property (nonatomic, strong)void (^authSuccessCallback)(void);/// 鉴权成功回调
-@property (nonatomic, strong)void (^authCallback)(int code,NSString *msg);/// 鉴权结果回调,code200代表成功,其他为失败
-@property (nonatomic, readonly)BOOL didAuth;// 是否已经鉴权
-@property (nonatomic, strong)void (^websocketStateCallback)(BOOL connected);/// websocket状态回调,true为已连接,false未链接
-@property (nonatomic, strong)void (^bleRecordStateCallback)(int state);/// 耳机录音状态回调,1录音,2结束录音
-@property (nonatomic, strong)void (^sendToBleCallback)(NSData *data);/// 发送给蓝牙设备
-
-/// 单利
-+ (instancetype)shared;
-
-/// 收到蓝牙设备传过来的数据,交给sdk处理
-/// - Parameter data:数据
-- (void)receiveBleData:(NSData *)data;
-
-/// 蓝牙设备已经连上(蓝牙连接和断开都需要通知sdk)
-- (void)bleConnected;
-
-/// 蓝牙断开连接(在监听到蓝牙断开的时候,调用该方法通知sdk结束当前任务)
-- (void)bleDisConnected;
-
-///// 【文本摘要】
-///// - Parameters:
-/////   - text: 识别的文本
-/////   - recognize: 识别结果回调
-/////   - error: 错误回调
-- (void)summaryByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
-
-/// 【文本摘要】--流式
-/// - Parameters:
-///   - text: 摘要的文字
-///   - recognize: 结果回调
-///   - error: 错误回调
-- (void)summaryByTextWithSplit:(NSString *)text recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
-
-/// 取消 【文本摘要】--流式
--(void)cancelSummaryByTextWithSplit;
-
-/// 【文本翻译】
-/// - Parameters:
-///   - text: 翻译的文字
-///   - config: 翻译配置
-///   - recognize: 识别结果回调
-///   - error: 错误回调
-- (void)translateByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
-
-/// 【文本翻译】--流式
-/// - Parameters:
-///   - text: 翻译的文字
-///   - config: 翻译配置
-///   - recognize: 结果回调
-///   - error: 错误回调
-- (void)translateByTextWithSplit:(NSString *)text config:(StarburstTslConfig*)config recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
-
-
-/// 取消 【文本翻译】--流式
--(void)cancelTranslateByTextWithSplit;
-
-/// 【同声传译】开始手机拾音
-/// - Parameters:
-///   - config: 识别配置
-///   - voiceRecordData: 录音音频流回调
-///   - recognizeText: 识别回调
-///   - stateChange: 状态回调
-///   - interrupt:打断回调(接听电话等打断)
-- (void)startRecordAsr:(StarburstAsrConfig*)config voiceRecord:(void (^)(NSData*))voiceData recognizeText:(void (^)(StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange interruption:(void(^)(void))interrupt;
-
-/// 【同声传译】结束手机拾音
-/// - Parameter fileCallback: 录音文件回调
-- (void)stopRecordAsr:(void(^)(NSString *filePath))callback;
-
-/// 【自定义音频流识别】开始
-/// - Parameters:
-///   - config: ASR识别配置(和手机拾音配置一致)
-///   - recognize: 文本识别结果回调
-///   - stateChange: 状态变化回调
-- (void)startCustomAsr:(StarburstAsrConfig*)config
-          recognizeText:(void (^)(StarburstAsrModel *model))recognize
-            stateChange:(void(^)(StarburstCode code))stateChange;
-
-/// 【自定义音频流识别】发送音频数据
-/// - Parameter data: 外部采集的音频 PCM 或其他格式(根据 config 设定)
-- (void)sendCustomAudioData:(NSData *)data;
-
-/// 【自定义音频流识别】结束
-- (void)stopCustomAsr;
-
-/// 开始耳机拾音
-/// - Parameters:
-///   - config: 识别配置
-- (void)startDeviceRecord:(StarburstBleAsrConfig*)config;
-
-/// 结束耳机拾音
-- (void)stopDeviceRecord;
-
-/// 设置耳机拾音回调
-/// - Parameters:
-///   - recordPath: 录音文件保存的路径。如果文件已经存在,则音频数据会追加到尾部;如果不存在,则创建新文件;传nil则会按之前时间格式创建新文件
-///   - asrConfig: 识别配置
-///   - bleConfig: 耳机录音类型回调
-///   - recognize: 识别回调
-///   - stateChange: 状态回调
-///   - path: 录音结束,录音文件地址回调
-- (void)setupDeviceRecordWith:(NSString *)recordPath asrConfig:(StarburstAsrConfig*)asrConfig bleConfig:(void (^)(StarburstBleAsrConfig*))bleConfig recognizeText:(void (^)(StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
-
-
-/// opus输出给app,app解码后将数据通过inputPcmData传回给sdk
-- (void)outputOpusData:(void (^)(StartburstDecoderConfig *copusConfig,NSData*opusData))recordCallBack;
-
-/// opus解码后传给sdk
-- (void)inputPcmData:(NSData *)pcmData;
-
-
-
-
-
-/// 获取音色列表
-/// - Parameter callBack: 结果回调
-- (void)getVcSpeekerList:(void (^)(NSArray <StarbusrtSpeaker*> *list,BOOL success))callBack;
-
-///  设置voice chat回调,目前只支持蓝牙设备发起对话
-/// - Parameters:
-///   - config: 对话配置
-///   - startCallBack: 开始回调
-///   - textCallBack: 文本识别回调
-///   - voiceCallBack: AI语音回复回调
-///   - stateChange: 状态回调
-///   - finished:录音地址回调
-- (void)setupVoiceChatWith:(StarburstVoiceChatConfig*)config start:(void (^)(NSInteger dialogId))startCallback textCallback:(void (^)(StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish, NSInteger sampleRate))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
-
-/// 终止voice chat对话
-- (void)stopVoiceChat:(NSInteger)dialogId;
-
-/// 开始播放tts
-- (void)startPlayTtsAudio:(NSInteger)dialogId;
-
-/// 结束播放tts
-- (void)stopPlayTtsAudio:(NSInteger)dialogId;
-
-///  发送文字对话
-/// - Parameters:
-///   - text: 对话的文字
-///   - isTts: 是否tts
-- (void)sendVoiceChat:(NSString *)text tts:(BOOL)isTts;
-
-
-//不可用
-- (void)setupPhoneChatWith:(StarburstVoiceChatConfig*)config start:(void (^)(NSInteger dialogId))startCallback textCallback:(void (^)(StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish,NSInteger sampleRate))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
-//不可用
-- (void)startPhoneChat:(int)vadType;
-//不可用
-- (void)stopPhoneChat;
-//不可用
-- (void)registerWithProductKey:(NSString *)productKey productSecret:(NSString *)productSecret deviceName:(NSString *)deviceName random:(NSString *)random finished:(void (^)(NSString *deviceSecret,NSError *error))finished;
-//不可用
-- (void)connectWithProductKey:(NSString *)productKey  deviceName:(NSString *)deviceName deviceSecret:(NSString *)deviceSecret finished:(void (^)(BOOL isSuccess,NSError *error))finished;
-- (void)setInputAudioIntensityCallback:(AudioIntensityInputCallback)callback;
-
--(NSString *)getDeviceName;
-@end
-
diff --git a/ShenYin/DeepChordsSdk/StarburstSdk.framework/StarburstSdk b/ShenYin/DeepChordsSdk/StarburstSdk.framework/StarburstSdk
deleted file mode 100644 (file)
index fed75fa..0000000
Binary files a/ShenYin/DeepChordsSdk/StarburstSdk.framework/StarburstSdk and /dev/null differ
diff --git a/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeDirectory b/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeDirectory
deleted file mode 100644 (file)
index 0cc28a0..0000000
Binary files a/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeDirectory and /dev/null differ
diff --git a/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements b/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements
deleted file mode 100644 (file)
index 4b131e2..0000000
Binary files a/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements and /dev/null differ
diff --git a/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements-1 b/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements-1
deleted file mode 100644 (file)
index b5e14ee..0000000
Binary files a/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeRequirements-1 and /dev/null differ
diff --git a/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeResources b/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeResources
deleted file mode 100644 (file)
index 17c777d..0000000
+++ /dev/null
@@ -1,432 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-       <key>files</key>
-       <dict>
-               <key>Headers/AIGCErrorCode.h</key>
-               <data>
-               6X+BFAl1GUlE673wijlbbmSDK7o=
-               </data>
-               <key>Headers/StarbaustVoiceChatModel.h</key>
-               <data>
-               O8K7t0c5zyFzqsMRLB06Q9rMy98=
-               </data>
-               <key>Headers/StarburstAsrConfig.h</key>
-               <data>
-               tSk0X4yTu1hQB88SVtxWkHcfTRY=
-               </data>
-               <key>Headers/StarburstAsrModel.h</key>
-               <data>
-               YMyp9i53bEO3diakJf+v5x2v2a0=
-               </data>
-               <key>Headers/StarburstConfig.h</key>
-               <data>
-               s3KYCCc8Cq0RWmlyfW7qe20T0c8=
-               </data>
-               <key>Headers/StarburstFileAsrModel.h</key>
-               <data>
-               KCay85nepjWFLxW32vUBaknoYTk=
-               </data>
-               <key>Headers/StarburstOffLineFile.h</key>
-               <data>
-               28IGQ1ND/MHAAnUNKNBxuvS5ROc=
-               </data>
-               <key>Headers/StarburstPhoneSdk.h</key>
-               <data>
-               rwT9UO4f4YJAdgYM9SUrQo6cW0M=
-               </data>
-               <key>Headers/StarburstSdk.h</key>
-               <data>
-               aWY4JErrzMt9gCv0UqKyp5t+qGM=
-               </data>
-               <key>Headers/StarburstSdkManager.h</key>
-               <data>
-               qhZrrBq0fWMMexpfZdAUj4ZVVNg=
-               </data>
-               <key>Headers/StarburstStreamModel.h</key>
-               <data>
-               cdW3VKYRIjOHM5xn0Zzt3fioFro=
-               </data>
-               <key>Headers/StarbusrtSpeaker.h</key>
-               <data>
-               SBlLEersGuEueZNxVNc2uyepfts=
-               </data>
-               <key>Headers/StartburstDecoderConfig.h</key>
-               <data>
-               CEyiYJhRwvumcRqNLLoJARHeU24=
-               </data>
-               <key>Headers/StartburstGlassChat.h</key>
-               <data>
-               EKmAva0NghWkD5BgB3v2JyOqcQo=
-               </data>
-               <key>Headers/StartburstGlassesSdk.h</key>
-               <data>
-               zjj7I7WFlFcTzkseAMNaUZyEIyI=
-               </data>
-               <key>Headers/StartburstMixSdk.h</key>
-               <data>
-               CLg1FGxHPySPI5qCJH4N1zAZIw4=
-               </data>
-               <key>Headers/TextToImageCallback.h</key>
-               <data>
-               djrQqQ5J0JGsXn7fyLOzs0g705Q=
-               </data>
-               <key>Headers/TextToImageManager.h</key>
-               <data>
-               f7vVMHfHHqbi4Bi4seJMqHn4wnU=
-               </data>
-               <key>Headers/TextToSpeechCallback.h</key>
-               <data>
-               Q6/osX2ZUFgH9dbRA17GNlOraXI=
-               </data>
-               <key>Headers/TextToSpeechManager.h</key>
-               <data>
-               /j5GzHn6HDrV0eCdlQiwGi65QEQ=
-               </data>
-               <key>Info.plist</key>
-               <data>
-               LYDkUlG3+K2ItUesIisY3Luuk1c=
-               </data>
-               <key>Modules/module.modulemap</key>
-               <data>
-               0SW07sgC8aptSEw6560m065YdrY=
-               </data>
-               <key>PrivacyInfo.xcprivacy</key>
-               <data>
-               SRctDO3cqibONLEG7CPcNZVBnXw=
-               </data>
-       </dict>
-       <key>files2</key>
-       <dict>
-               <key>Headers/AIGCErrorCode.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       6X+BFAl1GUlE673wijlbbmSDK7o=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       kB/hT+CxZkfSQW7qym0IydflbAkE3AYBvdij+bCDmlw=
-                       </data>
-               </dict>
-               <key>Headers/StarbaustVoiceChatModel.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       O8K7t0c5zyFzqsMRLB06Q9rMy98=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       Te3DhLKFm7g9Cqh68BOLUikve5gURqN9RWUPumoYzZY=
-                       </data>
-               </dict>
-               <key>Headers/StarburstAsrConfig.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       tSk0X4yTu1hQB88SVtxWkHcfTRY=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       EY1t77d6qelm3wi1yYEcG5Kw1HNnR8mziKSGBadmqOg=
-                       </data>
-               </dict>
-               <key>Headers/StarburstAsrModel.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       YMyp9i53bEO3diakJf+v5x2v2a0=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       r5bjhqHYbfX3MyhkjDOmAbqeXjuBI9fSoQRq/L0POEU=
-                       </data>
-               </dict>
-               <key>Headers/StarburstConfig.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       s3KYCCc8Cq0RWmlyfW7qe20T0c8=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       q5+7n+PJt+RNcfGHp6EMO49CqhiFTaqcIZQbeDtZcTk=
-                       </data>
-               </dict>
-               <key>Headers/StarburstFileAsrModel.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       KCay85nepjWFLxW32vUBaknoYTk=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       Y1+wOB3+K0CSFktnWVRMaxl9SsvQMDAZcFup9gudCFg=
-                       </data>
-               </dict>
-               <key>Headers/StarburstOffLineFile.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       28IGQ1ND/MHAAnUNKNBxuvS5ROc=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       JqjH7qjguq8OEs3MklD/pyfD9ULJzpCwIyS37AvPIe8=
-                       </data>
-               </dict>
-               <key>Headers/StarburstPhoneSdk.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       rwT9UO4f4YJAdgYM9SUrQo6cW0M=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       kAdf5gAAX2xUk1XeiyxZjeGRvGhNe10TZexUz4PhxWU=
-                       </data>
-               </dict>
-               <key>Headers/StarburstSdk.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       aWY4JErrzMt9gCv0UqKyp5t+qGM=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       rnnCMlslMnwvphEZDLtWFp+XfQ1GqRFbhT7jnUVbBV4=
-                       </data>
-               </dict>
-               <key>Headers/StarburstSdkManager.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       qhZrrBq0fWMMexpfZdAUj4ZVVNg=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       J/65oVgQZfwUd8TWmGj/cvoeb7k9t79kPFQCeVGYRIQ=
-                       </data>
-               </dict>
-               <key>Headers/StarburstStreamModel.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       cdW3VKYRIjOHM5xn0Zzt3fioFro=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       XC3yJkUL3sL1YkFBUADx+q+Q47YB040DrB7QEhOJa7w=
-                       </data>
-               </dict>
-               <key>Headers/StarbusrtSpeaker.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       SBlLEersGuEueZNxVNc2uyepfts=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       yCNcI1umW3Pgn7rtgMv5kZTDZXr/QxvPNRoNjcIrTJU=
-                       </data>
-               </dict>
-               <key>Headers/StartburstDecoderConfig.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       CEyiYJhRwvumcRqNLLoJARHeU24=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       PlYBO1RRT96qRTFSidHUui8kpiVj0/pQW85jqIjCtzY=
-                       </data>
-               </dict>
-               <key>Headers/StartburstGlassChat.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       EKmAva0NghWkD5BgB3v2JyOqcQo=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       YIfvJ+AmQws0QANocYZxmOahypPKgbsEZXeR6wEInTA=
-                       </data>
-               </dict>
-               <key>Headers/StartburstGlassesSdk.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       zjj7I7WFlFcTzkseAMNaUZyEIyI=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       h+sX2xVUY3pWvU9949WQN6IoZau4WG4Ad1qRwJeC6Yk=
-                       </data>
-               </dict>
-               <key>Headers/StartburstMixSdk.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       CLg1FGxHPySPI5qCJH4N1zAZIw4=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       Z6H7+vUoMzMfpR9r7joECzicS9kOX4b/rqZb0fOMoaU=
-                       </data>
-               </dict>
-               <key>Headers/TextToImageCallback.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       djrQqQ5J0JGsXn7fyLOzs0g705Q=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       q/BtJzWpEpHfy9C5Bf07jUccilYQqgy94yGf3KLWwKM=
-                       </data>
-               </dict>
-               <key>Headers/TextToImageManager.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       f7vVMHfHHqbi4Bi4seJMqHn4wnU=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       N96kZDSkodLOSzvpZTi6amQVAYq0AzsFO6tvFFlQEoE=
-                       </data>
-               </dict>
-               <key>Headers/TextToSpeechCallback.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       Q6/osX2ZUFgH9dbRA17GNlOraXI=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       EXuN8dBBPFNJNuxSb0kaSfMs+i0WbS/9uA9tJ95RhlY=
-                       </data>
-               </dict>
-               <key>Headers/TextToSpeechManager.h</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       /j5GzHn6HDrV0eCdlQiwGi65QEQ=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       ikdltWnYn+xcIZztjJovnuoIDocq2Zwz81BLGh2HmZM=
-                       </data>
-               </dict>
-               <key>Modules/module.modulemap</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       0SW07sgC8aptSEw6560m065YdrY=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       js/u3ymUzjIe0pCJDIjb2G3IBfLvIq7aILJo9tH8J8k=
-                       </data>
-               </dict>
-               <key>PrivacyInfo.xcprivacy</key>
-               <dict>
-                       <key>hash</key>
-                       <data>
-                       SRctDO3cqibONLEG7CPcNZVBnXw=
-                       </data>
-                       <key>hash2</key>
-                       <data>
-                       cuaVRkQIQRl8fLAPRH2XlUdsPxO0W90uL0WcSHvmSnY=
-                       </data>
-               </dict>
-       </dict>
-       <key>rules</key>
-       <dict>
-               <key>^.*</key>
-               <true/>
-               <key>^.*\.lproj/</key>
-               <dict>
-                       <key>optional</key>
-                       <true/>
-                       <key>weight</key>
-                       <real>1000</real>
-               </dict>
-               <key>^.*\.lproj/locversion.plist$</key>
-               <dict>
-                       <key>omit</key>
-                       <true/>
-                       <key>weight</key>
-                       <real>1100</real>
-               </dict>
-               <key>^Base\.lproj/</key>
-               <dict>
-                       <key>weight</key>
-                       <real>1010</real>
-               </dict>
-               <key>^version.plist$</key>
-               <true/>
-       </dict>
-       <key>rules2</key>
-       <dict>
-               <key>.*\.dSYM($|/)</key>
-               <dict>
-                       <key>weight</key>
-                       <real>11</real>
-               </dict>
-               <key>^(.*/)?\.DS_Store$</key>
-               <dict>
-                       <key>omit</key>
-                       <true/>
-                       <key>weight</key>
-                       <real>2000</real>
-               </dict>
-               <key>^.*</key>
-               <true/>
-               <key>^.*\.lproj/</key>
-               <dict>
-                       <key>optional</key>
-                       <true/>
-                       <key>weight</key>
-                       <real>1000</real>
-               </dict>
-               <key>^.*\.lproj/locversion.plist$</key>
-               <dict>
-                       <key>omit</key>
-                       <true/>
-                       <key>weight</key>
-                       <real>1100</real>
-               </dict>
-               <key>^Base\.lproj/</key>
-               <dict>
-                       <key>weight</key>
-                       <real>1010</real>
-               </dict>
-               <key>^Info\.plist$</key>
-               <dict>
-                       <key>omit</key>
-                       <true/>
-                       <key>weight</key>
-                       <real>20</real>
-               </dict>
-               <key>^PkgInfo$</key>
-               <dict>
-                       <key>omit</key>
-                       <true/>
-                       <key>weight</key>
-                       <real>20</real>
-               </dict>
-               <key>^embedded\.provisionprofile$</key>
-               <dict>
-                       <key>weight</key>
-                       <real>20</real>
-               </dict>
-               <key>^version\.plist$</key>
-               <dict>
-                       <key>weight</key>
-                       <real>20</real>
-               </dict>
-       </dict>
-</dict>
-</plist>
diff --git a/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeSignature b/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeSignature
deleted file mode 100644 (file)
index cf66e23..0000000
Binary files a/ShenYin/DeepChordsSdk/StarburstSdk.framework/_CodeSignature/CodeSignature and /dev/null differ
diff --git a/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/Info.plist b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/Info.plist
new file mode 100644 (file)
index 0000000..29a256e
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+       <key>AvailableLibraries</key>
+       <array>
+               <dict>
+                       <key>BinaryPath</key>
+                       <string>StarburstSdkDirect.framework/StarburstSdkDirect</string>
+                       <key>LibraryIdentifier</key>
+                       <string>ios-arm64</string>
+                       <key>LibraryPath</key>
+                       <string>StarburstSdkDirect.framework</string>
+                       <key>SupportedArchitectures</key>
+                       <array>
+                               <string>arm64</string>
+                       </array>
+                       <key>SupportedPlatform</key>
+                       <string>ios</string>
+               </dict>
+       </array>
+       <key>CFBundlePackageType</key>
+       <string>XFWK</string>
+       <key>XCFrameworkFormatVersion</key>
+       <string>1.0</string>
+</dict>
+</plist>
diff --git a/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/CustomChatWebSocketClient.h b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/CustomChatWebSocketClient.h
new file mode 100644 (file)
index 0000000..33d66e0
--- /dev/null
@@ -0,0 +1,75 @@
+//
+//  CustomChatWebSocketClient.h
+//  IOT
+//
+//  Created by ByteDance on 2026/1/26.
+//
+#import <Foundation/Foundation.h>
+
+@class CustomVoiceChatConfig;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol CustomChatWebSocketClientDelegate <NSObject>
+@optional
+- (void)chatClientDidOpen;
+- (void)chatClientDidCloseWithCode:(NSInteger)code reason:(NSString *_Nullable)reason wasClean:(BOOL)wasClean;
+- (void)chatClientDidFailWithError:(NSError *)error;
+
+- (void)chatClientDidReceiveText:(NSString *)text;
+
+/// 收到 TTS 二进制(如果服务端有 16字节头:dialogId/index/timestamp)
+- (void)chatClientDidReceiveTtsData:(NSData *)data
+                           dialogId:(uint32_t)dialogId
+                              index:(uint32_t)index
+                          timestamp:(uint64_t)timestamp
+                           isFinish:(BOOL)isFinish;
+
+- (void)chatClientDidStartStreaming:(NSInteger)dialogId;
+- (void)chatClientDidStopStreaming:(NSInteger)dialogId;
+- (void)chatClientDidInterrupt:(NSInteger)dialogId;
+@end
+
+@interface CustomChatWebSocketClient : NSObject
+
+@property (class, nonatomic, readonly) CustomChatWebSocketClient *shared;
+
+@property (nonatomic, weak) id<CustomChatWebSocketClientDelegate> delegate;
+@property (nonatomic, assign) BOOL enableLog;
+
+/// 外部只控 VAD:YES => start,NO => stop
+@property (atomic, assign, readonly) BOOL vadActive;
+@property (atomic, assign, readonly) BOOL streaming;
+
+/// role 变更 => contextId 变更(保持旧类行为)
+@property (nonatomic, copy, readonly) NSString *contextId;
+
+/// 缓存策略:VAD=true 但尚未open/start时缓存少量音频,防起声丢帧
+@property (nonatomic, assign) BOOL enablePendingAudioBuffer;     // default YES
+@property (nonatomic, assign) NSUInteger maxPendingAudioFrames;  // default 50
+
+/// 统一配置(可更新)
+- (void)updateConfig:(void (^)(CustomVoiceChatConfig *config))block;
+
+/// 建连/断连(url内部写死)
+- (void)connect;
+- (void)disconnect;
+
+/// 音频源持续 push;只有 vadActive=true 才会真正发送
+- (void)pushAudioFrame:(NSData *)data;
+
+/// VAD控制
+- (void)updateVadActive:(BOOL)active;
+
+/// 主动 stop(等同 VAD=false 的 stop)
+- (void)stop;
+
+/// 打断(保留)
+- (void)interrupt;
+
+/// (可选)如果你们鉴权header需要外部注入token等:只给一个“注入request”的钩子,不接收URL
+- (void)setRequestDecorator:(void (^ _Nullable)(NSMutableURLRequest *request))decorator;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/CustomVoiceChatConfig.h b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/CustomVoiceChatConfig.h
new file mode 100644 (file)
index 0000000..1305b59
--- /dev/null
@@ -0,0 +1,41 @@
+//
+//  CustomVoiceChatConfig.h
+//  IOT
+//
+//  Created by ByteDance on 2026/1/26.
+//
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface CustomVoiceChatConfig : NSObject
+
+@property (nonatomic, copy, nullable) NSString *role;      /// 对话角色
+@property (nonatomic, copy, nullable) NSString *language;  /// 如 zh-CN
+
+/// 输入音频(multi_start 字段:format + codec)
+@property (nonatomic, copy) NSString *format;        /// default "raw"
+@property (nonatomic, copy) NSString *codec;         /// default "raw" / "opus"
+@property (nonatomic, assign) NSInteger sampleRate;  /// default 16000
+@property (nonatomic, assign) NSInteger channel;     /// default 1
+
+/// 透传:multi_start.extraInfo
+@property (nonatomic, strong, nullable) NSDictionary *extraInfo;
+
+/// TTS
+@property (nonatomic, assign) BOOL tts;
+@property (nonatomic, copy, nullable) NSString *ttsAudioFormat;   /// default "pcm"
+@property (nonatomic, copy, nullable) NSString *ttsSpeakerType;   /// "clone" etc
+@property (nonatomic, copy, nullable) NSString *ttsSpeakerId;
+
+/// 其它(如你旧类有)
+@property (nonatomic, assign) BOOL debugEnable;              /// default YES
+@property (nonatomic, assign) NSInteger ttsBinaryBurstSize;  /// default 0
+@property (nonatomic, assign) NSInteger ttsBinaryBurstDelay; /// default 0
+
+@property (nonatomic, copy, nullable) NSString *customPrompt;
+@property (nonatomic, copy, nullable) NSString *pictureFormat;    /// default "jpg"
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/FileProcessingManager.h b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/FileProcessingManager.h
new file mode 100644 (file)
index 0000000..a03f2b8
--- /dev/null
@@ -0,0 +1,43 @@
+//
+//  FileProcessingManager.h
+//  IOT
+//
+//  Created by ByteDance on 2025/12/24.
+//
+
+#import <Foundation/Foundation.h>
+#import "ITaskProcessStatusListener.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+
+@protocol IFileTaskCreatedCallback <NSObject>
+- (void)onTaskCreated:(NSString *)taskId;
+- (void)onError:(NSInteger)code message:(NSString *)message;
+@end
+
+@interface FileProcessingManager : NSObject
+
++ (instancetype)shared;
+
+- (void)createFileAsrTask:(NSURL *)fileURL
+                language:(NSString *)language
+                 summary:(BOOL)summary
+           speakerSplit:(BOOL)speakerSplit
+             sampleRate:(int)sampleRate
+                 format:(NSString *)format
+                  codec:(NSString *)codec
+              callback:(id<IFileTaskCreatedCallback>)callback;
+
+- (void)createTextSummaryTask:(NSString *)text
+                     language:(NSString *)language
+                     callback:(id<IFileTaskCreatedCallback>)callback;
+
+- (void)addQueryTaskId:(NSString *)taskId;
+- (void)cancelQueryTaskId:(NSString *)taskId;
+- (void)setTaskProcessStatusListener:(id<ITaskProcessStatusListener>)listener;
+- (void)removeAllQueryTask;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/FileResultTaskPoller.h b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/FileResultTaskPoller.h
new file mode 100644 (file)
index 0000000..da3019e
--- /dev/null
@@ -0,0 +1,23 @@
+//
+//  FileResultTaskPoller.h
+//  IOT
+//
+//  Created by ByteDance on 2026/1/5.
+//
+
+#import <Foundation/Foundation.h>
+#import "ITaskProcessStatusListener.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface FileResultTaskPoller : NSObject
+
+- (void)addTask:(NSString *)taskId;
+- (void)cancelTask:(NSString *)taskId;
+- (void)setListener:(id<ITaskProcessStatusListener>)listener;
+- (void)shutdown;
+- (void)removeAll;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/FileTaskResult.h b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/FileTaskResult.h
new file mode 100644 (file)
index 0000000..c4a2eee
--- /dev/null
@@ -0,0 +1,31 @@
+//
+//  SBFileTaskResult.h
+//  IOT
+//
+//  Created by ByteDance on 2026/1/5.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SBAudioPiece : NSObject
+@property(nonatomic, copy) NSString *text;
+@property(nonatomic, assign) long long startTime;   // start_time
+@property(nonatomic, assign) long long endTime;     // end_time
+@property(nonatomic, assign) NSInteger speaker;     // additions.speaker,解析不到则 -1
+@end
+
+@interface FileTaskResult : NSObject
+@property(nonatomic, assign) NSInteger code;
+@property(nonatomic, copy) NSString *msg;
+@property(nonatomic, copy) NSString *taskId;
+@property(nonatomic, copy) NSString *requestId;
+@property(nonatomic, copy) NSString *text;
+@property(nonatomic, copy) NSString *summary;
+@property(nonatomic, strong) NSArray<SBAudioPiece *> *pieces;
+
++ (nullable instancetype)fromJSONData:(NSData *)data error:(NSError * _Nullable * _Nullable)error;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/ITaskProcessStatusListener.h b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/ITaskProcessStatusListener.h
new file mode 100644 (file)
index 0000000..5077fc2
--- /dev/null
@@ -0,0 +1,19 @@
+//
+//  ITaskProcessStatusListener.h
+//  IOT
+//
+//  Created by ByteDance on 2026/1/5.
+//
+
+#import <Foundation/Foundation.h>
+@class FileTaskResult;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol ITaskProcessStatusListener <NSObject>
+- (void)onProcessing:(NSString *)taskId code:(NSInteger)code;
+- (void)onSuccess:(NSString *)taskId result:(FileTaskResult *)result;
+- (void)onFailure:(NSString *)taskId message:(NSString *)message;
+@end
+
+NS_ASSUME_NONNULL_END
@@ -1,14 +1,14 @@
 //
 //  StarbaustVoiceChatModel.h
-//  StarburstSdk
+//  SBD_StarburstSdk
 //
 //  Created by incar on 2024/11/22.
 //
 
 #import <Foundation/Foundation.h>
-#import <StarburstSdk/StarburstAsrModel.h>
+#import "StarburstAsrModel.h"
 
-@interface StarbaustVoiceChatModel : NSObject
+@interface SBD_StarbaustVoiceChatModel : NSObject
 @property (nonatomic, assign) NSInteger code;/// 状态码,200成功
 @property (nonatomic, strong) NSString *msg;/// 提示语
 @property (nonatomic, strong) NSString *requestId;/// 请求id
@@ -22,8 +22,8 @@
 @property (nonatomic, assign) NSInteger definiteIndex;/// 已确定的识别结果序列号
 //@property (nonatomic, assign) NSInteger conversationIndex;/// 已确定的响应结果序列号
 @property (nonatomic, assign) BOOL conversationFinish;/// 对话是否结束
-@property (nonatomic, strong) StarburstTranslateResult *translateResult;///翻译结果
-@property (nonatomic, strong) StarburstAsrTtsResult *ttsResult;///tts音频流
+@property (nonatomic, strong) SBD_StarburstTranslateResult *translateResult;///翻译结果
+@property (nonatomic, strong) SBD_StarburstAsrTtsResult *ttsResult;///tts音频流
 @property (nonatomic, assign) NSInteger playAudioSampleRate;
 @end
 
@@ -1,6 +1,6 @@
 //
 //  StarburstAsrConfig.h
-//  StarburstSdk
+//  SBD_StarburstSdk
 //
 //  Created by incar on 2024/9/14.
 //
@@ -23,7 +23,7 @@
 //马来语 ms-MY
 
 /// voice chat配置
-@interface StarburstVoiceChatConfig : NSObject
+@interface SBD_StarburstVoiceChatConfig : NSObject
 @property (nonatomic, strong) NSString *role;/// 对话⻆⾊设定;默认为⽆特⾊的智能助⼿
 //@property (nonatomic, assign) int channel;/// 默认为1,只⽀持1:单声道、2:双声道
 @property (nonatomic, strong) NSString *language;/// 语⾔编码,默认为普通话(zh-CN)
@@ -34,7 +34,7 @@
 @end
 
 /// 手机录音asr配置
-@interface StarburstAsrConfig : NSObject
+@interface SBD_StarburstAsrConfig : NSObject
 /// 是否翻译,默认 false。如果为 true 翻译源语言和目标语言不能是同一种语言
 @property (nonatomic, assign) BOOL isTranslate;
 /// 源语言编码,默认为普通话(zh-CN),auto_lang 自动识别
 @property (nonatomic, strong) NSString *ttsType;
 /// TTS 声色设置
 @property (nonatomic, strong) NSString *ttsSpeaker;
+/// TTS 声色类型
+@property (nonatomic, strong, nullable) NSString *ttsSpeakerType;
+/// TTS 声色 ID
+@property (nonatomic, strong, nullable) NSString *ttsSpeakerId;
+/// 是否使用 LLM 翻译,默认 NO
+@property (nonatomic, assign) BOOL llmTranslate;
 /// 音频封装格式(opus 原始流 raw,封装 ogg)
 @property (nonatomic, strong) NSString *format;
 /// 音频编码格式(opus、raw)
 @end
 
 /// 蓝牙耳机录音asr配置
-@interface StarburstBleAsrConfig : NSObject
+@interface SBD_StarburstBleAsrConfig : NSObject
 @property (nonatomic, assign) NSInteger type;/// 0x00实时录音,0x0c通话录音,其他待定
 @end
 
 /// 文件/文本asr配置
-@interface StarburstAsrFileConfig : NSObject
+@interface SBD_StarburstAsrFileConfig : NSObject
 @property (nonatomic, assign) BOOL isTranslate;/// 是否翻译,默认false
 @property (nonatomic, strong) NSString *fromLanguage;/// 语⾔编码
 @property (nonatomic, strong) NSString *toLanguage;/// ⽬标语⾔编码
 /// 翻译增强,默认 NO
 @property (nonatomic, assign) BOOL enableTranslateImprove; // enableTranslateImprove
 @property (nonatomic, assign) BOOL speakerSplit;/// 是否区分说话人,默认false
+/// TTS 声色类型(如 "clone" 时配合 ttsSpeakerId 使用)
+@property (nonatomic, strong, nullable) NSString *ttsSpeakerType;
+/// TTS 声色 ID
+@property (nonatomic, strong, nullable) NSString *ttsSpeakerId;
+/// 是否使用 LLM 翻译,默认 NO
+@property (nonatomic, assign) BOOL llmTranslate;
 @end
 
 
 /// 翻译配置
-@interface StarburstTslConfig : NSObject
+@interface SBD_StarburstTslConfig : NSObject
 @property (nonatomic, strong) NSString *fromLanguage;/// 语⾔编码
 @property (nonatomic, strong) NSString *toLanguage;/// ⽬标语⾔编码
+/// TTS 声色类型(如 "clone" 时配合 ttsSpeakerId 使用)
+@property (nonatomic, strong, nullable) NSString *ttsSpeakerType;
+/// TTS 声色 ID
+@property (nonatomic, strong, nullable) NSString *ttsSpeakerId;
+/// 是否使用 LLM 翻译,默认 NO
+@property (nonatomic, assign) BOOL llmTranslate;
 @end
@@ -1,6 +1,6 @@
 //
 //  StarburstAsrModel.h
-//  StarburstSdk
+//  SBD_StarburstSdk
 //
 //  Created by incar on 2024/9/13.
 //
@@ -10,7 +10,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 /// 说话人分离结果(单段)
-@interface StarburstSpeakerSegment : NSObject
+@interface SBD_StarburstSpeakerSegment : NSObject
 @property (nonatomic, copy, nullable) NSString *speakerId;     /// 说话人ID(字符串,如 "1")
 @property (nonatomic, assign) NSInteger startTime;             /// 起始时间(ms)
 @property (nonatomic, assign) NSInteger endTime;               /// 结束时间(ms)
@@ -21,7 +21,7 @@ NS_ASSUME_NONNULL_BEGIN
 @end
 
 /// 翻译结果
-@interface StarburstTranslateResult : NSObject
+@interface SBD_StarburstTranslateResult : NSObject
 @property (nonatomic, copy, nullable) NSString *text;  /// 语音识别后翻译的结果片段
 @property (nonatomic, assign) BOOL definite;           /// 当前翻译片段是否确定
 @property (nonatomic, assign) int definiteIndex;       /// 已翻译片段序号
@@ -30,7 +30,7 @@ NS_ASSUME_NONNULL_BEGIN
 @end
 
 /// tts音频流
-@interface StarburstAsrTtsResult : NSObject
+@interface SBD_StarburstAsrTtsResult : NSObject
 @property (nonatomic, assign) NSInteger index;            /// 音频数据片段的序号
 @property (nonatomic, assign) NSInteger translateIndex;   /// 翻译的序号
 @property (nonatomic, copy, nullable) NSString *streamPiece; /// 音频流(Base64/文本)
@@ -38,7 +38,7 @@ NS_ASSUME_NONNULL_BEGIN
 @end
 
 /// 识别结果
-@interface StarburstAsrModel : NSObject
+@interface SBD_StarburstAsrModel : NSObject
 @property (nonatomic, assign) NSInteger channel;            /// 0非立体声,1左声道,2右声道
 @property (nonatomic, assign) NSInteger code;               /// 状态码
 @property (nonatomic, copy, nullable) NSString *msg;        /// 提示语
@@ -49,10 +49,10 @@ NS_ASSUME_NONNULL_BEGIN
 @property (nonatomic, assign) NSInteger definiteIndex;      /// 已确定的识别结果序列号
 @property (nonatomic, assign) BOOL isLastPackage;           /// 是否为最后一包,后续没有数据(包括asr、tts、翻译结果)
 
-@property (nonatomic, strong, nullable) StarburstTranslateResult *translateResult; /// 翻译结果
-@property (nonatomic, strong, nullable) StarburstAsrTtsResult *ttsResult;          /// tts音频流
+@property (nonatomic, strong, nullable) SBD_StarburstTranslateResult *translateResult; /// 翻译结果
+@property (nonatomic, strong, nullable) SBD_StarburstAsrTtsResult *ttsResult;          /// tts音频流
 
-@property (nonatomic, copy, nullable) NSArray<StarburstSpeakerSegment *> *speakerResult; /// 说话人分离结果数组
+@property (nonatomic, copy, nullable) NSArray<SBD_StarburstSpeakerSegment *> *speakerResult; /// 说话人分离结果数组
 
 + (instancetype)modelWith:(NSDictionary *)dict;
 @end
diff --git a/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstAudioStreamConfig.h b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstAudioStreamConfig.h
new file mode 100644 (file)
index 0000000..c00512f
--- /dev/null
@@ -0,0 +1,32 @@
+//
+//  StarburstAudioStreamConfig.h
+//  IOT
+//
+//  Created by ByteDance on 2026/1/29.
+//
+
+
+// StarburstAudioStreamConfig.h
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SBD_StarburstAudioStreamConfig : NSObject
+
+/// "pcm" / "opus" / "aac" ...(由你们协议约定)
+/// 建议统一小写
+@property (nonatomic, copy) NSString *codec;
+
+/// 通用音频参数(对 pcm 必填;对 opus 视你们服务端要求)
+@property (nonatomic, assign) NSInteger sampleRate;      // e.g. 16000
+@property (nonatomic, assign) NSInteger channels;        // e.g. 1
+
+/// PCM 专用(codec == "pcm" 时使用)
+@property (nonatomic, assign) NSInteger bitsPerSample;   // e.g. 16
+
+@property (nonatomic, assign) NSInteger opusInputPackageSize;
+@property (nonatomic, assign) NSInteger opusOutputPackageSize;
+
+@end
+
+NS_ASSUME_NONNULL_END
@@ -1,6 +1,6 @@
 //
 //  StarburstConfig.h
-//  StarburstSdk
+//  SBD_StarburstSdk
 //
 //  Created by liangshi on 2025/6/18.
 //
@@ -16,7 +16,7 @@ typedef NS_OPTIONS(NSInteger,StarburstSdkType) {
 };
 
 
-@interface StarburstConfig : NSObject
+@interface SBD_StarburstConfig : NSObject
 @property (nonatomic, readonly)NSString *logs;/// 获取日志
 @property (nonatomic, strong)void (^logCallback)(NSString *log);/// 日志输出回调
 @property (nonatomic, assign)BOOL isDebug;/// 是否打印日志,默认false
@@ -1,6 +1,6 @@
 //
 //  StarburstFileAsrModel.h
-//  StarburstSdk
+//  SBD_StarburstSdk
 //
 //  Created by incar on 2024/9/27.
 //
@@ -8,20 +8,20 @@
 #import <Foundation/Foundation.h>
 
 /// 该段说话人
-@interface StarburstFileAsrAdditions : NSObject
+@interface SBD_StarburstFileAsrAdditions : NSObject
 @property (nonatomic, strong) NSString *speaker;/// 该段说话人编号
 @end
 
 /// 识别片段
-@interface StarburstFileAsrPieces : NSObject
+@interface SBD_StarburstFileAsrPieces : NSObject
 @property (nonatomic, strong) NSString *text;/// 片段识别的内筒
 @property (nonatomic, assign) NSInteger start_time;///片段对应文件进度,单位毫秒
 @property (nonatomic, assign) NSInteger end_time;///  片段对应文件进度,单位毫秒
-@property (nonatomic, strong) StarburstFileAsrAdditions *additions;///该段说话人
+@property (nonatomic, strong) SBD_StarburstFileAsrAdditions *additions;///该段说话人
 @end
 
 /// 文件识别结果模型
-@interface StarburstFileAsrModel : NSObject
+@interface SBD_StarburstFileAsrModel : NSObject
 @property (nonatomic, assign) NSInteger code;/// 状态码
 @property (nonatomic, strong) NSString *msg;/// 提示语
 @property (nonatomic, strong) NSString *requestId;/// 请求id
@@ -29,8 +29,8 @@
 @property (nonatomic, strong) NSString *text;/// 语⾳识别内容
 @property (nonatomic, strong) NSString *summary;/// 识别摘要内容
 @property (nonatomic, strong) NSString *transText;///识别后翻译结果
-@property (nonatomic, strong) NSArray<StarburstFileAsrPieces *> *pieces;///识别片段
+@property (nonatomic, strong) NSArray<SBD_StarburstFileAsrPieces *> *pieces;///识别片段
 
-+ (StarburstFileAsrModel *)modelWith:(NSDictionary *)dict;
++ (SBD_StarburstFileAsrModel *)modelWith:(NSDictionary *)dict;
 @end
 
@@ -1,6 +1,6 @@
 //
 //  StarburstOffLineFile.h
-//  StarburstSdk
+//  SBD_StarburstSdk
 //
 //  Created by incar on 2024/10/8.
 //
@@ -10,7 +10,7 @@
 NS_ASSUME_NONNULL_BEGIN
 
 /// 离线文件
-@interface StarburstOffLineFile : NSObject
+@interface SBD_StarburstOffLineFile : NSObject
 
 @property (nonatomic, assign) uint8_t fileType;/// 0x00所有文件、0x01左耳列表、0x02右耳列表
 @property (nonatomic, assign) NSInteger fileId;/// 文件id
@@ -1,22 +1,22 @@
 //
 //  StarburstPhoneSdk.h
-//  StarburstSdk
+//  SBD_StarburstSdk
 //
 //  Created by liangshi on 2025/3/11.
 //
 
 #import <Foundation/Foundation.h>
-#import <StarburstSdk/StarburstSdkManager.h>
-#import <StarburstSdk/StarburstAsrConfig.h>
-#import <StarburstSdk/StarburstAsrModel.h>
-#import <StarburstSdk/StarbaustVoiceChatModel.h>
-#import <StarburstSdk/StarburstFileAsrModel.h>
-#import <StarburstSdk/StarburstOffLineFile.h>
-#import <StarburstSdk/StarburstStreamModel.h>
-#import <StarburstSdk/StarbusrtSpeaker.h>
+#import "StarburstSdkManager.h"
+#import "StarburstAsrConfig.h"
+#import "StarburstAsrModel.h"
+#import "StarbaustVoiceChatModel.h"
+#import "StarburstFileAsrModel.h"
+#import "StarburstOffLineFile.h"
+#import "StarburstStreamModel.h"
+#import "StarbusrtSpeaker.h"
 
 
-@interface StarburstPhoneSdk : NSObject
+@interface SBD_StarburstPhoneSdk : NSObject
 @property (nonatomic, readonly)BOOL didAuth;/// 是否已经鉴权
 @property (nonatomic, strong)void (^websocketStateCallback)(BOOL connected);/// websocket状态回调,true为已连接,false未链接
 
 /////   - path: 文件路径
 /////   - recognize: 识别结果回调
 /////   - error: 错误回调
-//- (void)asrByFile:(NSURL *)filePath config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+//- (void)asrByFile:(NSURL *)filePath config:(SBD_StarburstAsrFileConfig*)config recognizeText:(void (^)(SBD_StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
 
 /// 【文本摘要】
 /// - Parameters:
 ///   - text: 识别的文本
 ///   - recognize: 识别结果回调
 ///   - error: 错误回调
-- (void)summaryByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+- (void)summaryByText:(NSString *)text config:(SBD_StarburstAsrFileConfig*)config recognizeText:(void (^)(SBD_StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
 
 /// 【文本摘要】--流式
 /// - Parameters:
 ///   - text: 摘要的文字
 ///   - recognize: 结果回调
 ///   - error: 错误回调
-- (void)summaryByTextWithSplit:(NSString *)text recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+- (void)summaryByTextWithSplit:(NSString *)text recognizeText:(void (^)(SBD_StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
 
 /// 取消 【文本摘要】--流式
 -(void)cancelSummaryByTextWithSplit;
@@ -71,7 +71,7 @@
 ///   - config: 翻译配置
 ///   - recognize: 识别结果回调
 ///   - error: 错误回调
-- (void)translateByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+- (void)translateByText:(NSString *)text config:(SBD_StarburstAsrFileConfig*)config recognizeText:(void (^)(SBD_StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
 
 /// 【文本翻译】--流式
 /// - Parameters:
@@ -79,7 +79,7 @@
 ///   - config: 翻译配置
 ///   - recognize: 结果回调
 ///   - error: 错误回调
-- (void)translateByTextWithSplit:(NSString *)text config:(StarburstTslConfig*)config recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+- (void)translateByTextWithSplit:(NSString *)text config:(SBD_StarburstTslConfig*)config recognizeText:(void (^)(SBD_StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
 
 /// 取消 【文本翻译】--流式
 -(void)cancelTranslateByTextWithSplit;
@@ -90,7 +90,7 @@
 ///   - voiceRecordData: 录音音频流回调
 ///   - recognizeText: 识别回调
 ///   - stateChange: 状态回调
-- (void)startRecordAsr:(StarburstAsrConfig*)config voiceRecord:(void (^)(NSData*))voiceData recognizeText:(void (^)(StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange interruption:(void(^)(void))interrupt;
+- (void)startRecordAsr:(SBD_StarburstAsrConfig*)config voiceRecord:(void (^)(NSData*))voiceData recognizeText:(void (^)(SBD_StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange interruption:(void(^)(void))interrupt;
 
 /// 【同声传译】结束手机拾音
 /// - Parameter fileCallback: 录音文件回调
 ///   - voiceCallBack: AI语音回复回调
 ///   - stateChange: 状态回调
 ///   - finished:录音地址回调
-- (void)setupPhoneChatWith:(StarburstVoiceChatConfig*)config start:(void (^)(NSInteger dialogId))startCallback textCallback:(void (^)(StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish,NSInteger sampleRate))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
+- (void)setupPhoneChatWith:(SBD_StarburstVoiceChatConfig*)config start:(void (^)(NSInteger dialogId))startCallback textCallback:(void (^)(SBD_StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish,NSInteger sampleRate))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
 
 /// 手机拾音,开始对话
 /// - Parameter vadType: 0 vad检测,1不启用vad(手动控制开始/结束讲话)
 
 /// 获取音色列表
 /// - Parameter callBack: 结果回调
-- (void)getVcSpeekerList:(void (^)(NSArray <StarbusrtSpeaker*> *list,BOOL success))callBack;
+- (void)getVcSpeekerList:(void (^)(NSArray <SBD_StarbusrtSpeaker*> *list,BOOL success))callBack;
 
 @end
 
diff --git a/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstSdk.h b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstSdk.h
new file mode 100644 (file)
index 0000000..adbc04d
--- /dev/null
@@ -0,0 +1,43 @@
+//
+//  Starburst.h
+//  Starburst
+//
+//  Created by cookies on 2023/6/12.
+//
+
+#import <Foundation/Foundation.h>
+
+//! Project version number for Starburst.
+//FOUNDATION_EXPORT double StarburstSdkVersionNumber;
+
+//! Project version string for Starburst.
+//FOUNDATION_EXPORT const unsigned char StarburstSdkVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import <SBD_StarburstSdk/PublicHeader.h>
+
+#import "StarburstSdkManager.h"
+#import "StarburstConfig.h"
+#import "StarburstPhoneSdk.h"
+#import "StartburstMixSdk.h"
+#import "StartburstGlassesSdk.h"
+#import "StartburstGlassChat.h"
+#import "StarburstAsrConfig.h"
+#import "StarburstAsrModel.h"
+#import "StarburstFileAsrModel.h"
+#import "StarbaustVoiceChatModel.h"
+#import "StarbusrtSpeaker.h"
+#import "StarburstStreamModel.h"
+#import "StarburstOffLineFile.h"
+#import "StartburstDecoderConfig.h"
+#import "TextToImageManager.h"
+#import "TextToImageCallback.h"
+#import "AIGCErrorCode.h"
+#import "TextToSpeechManager.h"
+#import "TextToSpeechCallback.h"
+#import "FileProcessingManager.h"
+#import "FileResultTaskPoller.h"
+#import "FileTaskResult.h"
+#import "StarburstVoiceChatRecorder.h"
+#import "StarburstAudioStreamConfig.h"
+//#import "CustomChatWebSocketClient.h"
+//#import "CustomVoiceChatConfig.h"
diff --git a/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstSdkManager.h b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstSdkManager.h
new file mode 100644 (file)
index 0000000..d3616f5
--- /dev/null
@@ -0,0 +1,259 @@
+//
+//  StarburstSdk.h
+//  VoiceDemo
+//
+//  Created by incar on 2024/9/12.
+//
+
+#import <Foundation/Foundation.h>
+#import "StarburstAsrConfig.h"
+#import "StarburstAsrModel.h"
+#import "StarbaustVoiceChatModel.h"
+#import "StarburstFileAsrModel.h"
+#import "StarburstOffLineFile.h"
+#import "StarburstStreamModel.h"
+#import "StarbusrtSpeaker.h"
+#import "StartburstDecoderConfig.h"
+#import "StarburstVoiceChatRecorder.h"
+
+typedef NS_OPTIONS(NSInteger,StarburstCode) {
+    StarburstCode_Start_Record = 20001,///开始录音
+    StarburstCode_Stop_Record = 20002,///停止录音
+    StarburstCode_Record_Error = 20003,///录音出错
+    StarburstCode_Ble_Disconected = 20004,///蓝牙断开
+    StarburstCode_Websocket_Connected = 30001,///socket连上
+    StarburstCode_Websocket_Disconnected = 30002,///socket断开连接
+    StarburstCode_Websocket_Connecting = 30003,///socket连接中...
+    StarburstCode_Websocket_pingTimeOut = 30004,///ping超时
+    StarburstCode_Net_Error = 50000,///网络错误
+    StarburstCode_UnAuth = 60000,///未鉴权
+};
+
+typedef void (^AudioIntensityInputCallback)(NSArray<NSNumber*> *left,
+                                            NSArray<NSNumber*> *right,
+                                            NSTimeInterval timestampMs);
+
+@interface SBD_StarburstSdk : NSObject
+//@property (nonatomic, strong)void (^authSuccessCallback)(void);/// 鉴权成功回调
+@property (nonatomic, strong)void (^authCallback)(int code,NSString *msg);/// 鉴权结果回调,code200代表成功,其他为失败
+@property (nonatomic, readonly)BOOL didAuth;// 是否已经鉴权
+@property (nonatomic, strong)void (^websocketStateCallback)(BOOL connected);/// websocket状态回调,true为已连接,false未链接
+@property (nonatomic, strong)void (^bleRecordStateCallback)(int state);/// 耳机录音状态回调,1录音,2结束录音
+@property (nonatomic, strong)void (^sendToBleCallback)(NSData *data);/// 发送给蓝牙设备
+
+/// 单例
++ (instancetype)shared;
+
+/// 鉴权用时间戳(毫秒),与服务器对齐的 NTP 时间,供 BLE 设备鉴权等使用
++ (long)authTimestampMs;
+
+/// 收到蓝牙设备传过来的数据,交给sdk处理
+/// - Parameter data:数据
+- (void)receiveBleData:(NSData *)data;
+
+/// 蓝牙设备已经连上(蓝牙连接和断开都需要通知sdk)
+- (void)bleConnected;
+
+/// 蓝牙断开连接(在监听到蓝牙断开的时候,调用该方法通知sdk结束当前任务)
+- (void)bleDisConnected;
+
+///// 【文本摘要】
+///// - Parameters:
+/////   - text: 识别的文本
+/////   - recognize: 识别结果回调
+/////   - error: 错误回调
+- (void)summaryByText:(NSString *)text config:(SBD_StarburstAsrFileConfig*)config recognizeText:(void (^)(SBD_StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 【文本摘要】--流式
+/// - Parameters:
+///   - text: 摘要的文字
+///   - recognize: 结果回调
+///   - error: 错误回调
+- (void)summaryByTextWithSplit:(NSString *)text recognizeText:(void (^)(SBD_StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 取消 【文本摘要】--流式
+-(void)cancelSummaryByTextWithSplit;
+
+/// 【文本翻译】
+/// - Parameters:
+///   - text: 翻译的文字
+///   - config: 翻译配置
+///   - recognize: 识别结果回调
+///   - error: 错误回调
+- (void)translateByText:(NSString *)text config:(SBD_StarburstAsrFileConfig*)config recognizeText:(void (^)(SBD_StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+
+/// 【文本翻译】--流式
+/// - Parameters:
+///   - text: 翻译的文字
+///   - config: 翻译配置
+///   - recognize: 结果回调
+///   - error: 错误回调
+- (void)translateByTextWithSplit:(NSString *)text config:(SBD_StarburstTslConfig*)config recognizeText:(void (^)(SBD_StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+
+
+/// 取消 【文本翻译】--流式
+-(void)cancelTranslateByTextWithSplit;
+
+/// 【同声传译】开始手机拾音
+/// - Parameters:
+///   - config: 识别配置
+///   - voiceRecordData: 录音音频流回调
+///   - recognizeText: 识别回调
+///   - stateChange: 状态回调
+///   - interrupt:打断回调(接听电话等打断)
+- (void)startRecordAsr:(SBD_StarburstAsrConfig*)config voiceRecord:(void (^)(NSData*))voiceData recognizeText:(void (^)(SBD_StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange interruption:(void(^)(void))interrupt;
+
+/// 【同声传译】结束手机拾音
+/// - Parameter fileCallback: 录音文件回调
+- (void)stopRecordAsr:(void(^)(NSString *filePath))callback;
+
+/// 【自定义音频流识别】开始
+/// - Parameters:
+///   - config: ASR识别配置(和手机拾音配置一致)
+///   - recognize: 文本识别结果回调
+///   - stateChange: 状态变化回调
+- (void)startCustomAsr:(SBD_StarburstAsrConfig*)config
+          recognizeText:(void (^)(SBD_StarburstAsrModel *model))recognize
+            stateChange:(void(^)(StarburstCode code))stateChange;
+
+/// 【自定义音频流识别】按实例 ID 开始(支持多实例,如双路识别)
+/// - Parameters:
+///   - streamerId: 实例标识,如 @"default"、@"secondary"、@"left"、@"right" 等,nil 或空表示默认实例
+///   - config: ASR识别配置
+///   - recognize: 文本识别结果回调
+///   - stateChange: 状态变化回调
+- (void)startCustomAsrWithId:(NSString *)streamerId
+                      config:(SBD_StarburstAsrConfig *)config
+               recognizeText:(void (^)(SBD_StarburstAsrModel *model))recognize
+                 stateChange:(void(^)(StarburstCode code))stateChange;
+
+/// 【自定义音频流识别】发送音频数据
+/// - Parameter data: 外部采集的音频 PCM 或其他格式(根据 config 设定)
+- (void)sendCustomAudioData:(NSData *)data;
+
+/// 【自定义音频流识别】向指定实例发送音频数据
+/// - Parameters:
+///   - data: 音频数据
+///   - streamerId: 实例标识,nil 或空表示默认实例
+- (void)sendCustomAudioData:(NSData *)data toStreamerId:(NSString *)streamerId;
+
+/// 【自定义音频流识别】结束
+- (void)stopCustomAsr;
+
+/// 【自定义音频流识别】结束指定实例
+/// - Parameter streamerId: 实例标识,nil 或空表示默认实例
+- (void)stopCustomAsrForId:(NSString *)streamerId;
+
+/// 开始耳机拾音
+/// - Parameters:
+///   - config: 识别配置
+- (void)startDeviceRecord:(SBD_StarburstBleAsrConfig*)config;
+
+/// 结束耳机拾音
+- (void)stopDeviceRecord;
+
+/// 设置耳机拾音回调
+/// - Parameters:
+///   - recordPath: 录音文件保存的路径。如果文件已经存在,则音频数据会追加到尾部;如果不存在,则创建新文件;传nil则会按之前时间格式创建新文件
+///   - asrConfig: 识别配置
+///   - bleConfig: 耳机录音类型回调
+///   - recognize: 识别回调
+///   - stateChange: 状态回调
+///   - path: 录音结束,录音文件地址回调
+- (void)setupDeviceRecordWith:(NSString *)recordPath asrConfig:(SBD_StarburstAsrConfig*)asrConfig bleConfig:(void (^)(SBD_StarburstBleAsrConfig*))bleConfig recognizeText:(void (^)(SBD_StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
+
+
+/// opus输出给app,app解码后将数据通过inputPcmData传回给sdk
+- (void)outputOpusData:(void (^)(SBD_StartburstDecoderConfig *copusConfig,NSData*opusData))recordCallBack;
+
+/// opus解码后传给sdk
+- (void)inputPcmData:(NSData *)pcmData;
+
+
+
+
+
+/// 获取音色列表
+/// - Parameter callBack: 结果回调
+- (void)getVcSpeekerList:(void (^)(NSArray <SBD_StarbusrtSpeaker*> *list,BOOL success))callBack;
+
+///  设置voice chat回调,目前只支持蓝牙设备发起对话
+/// - Parameters:
+///   - config: 对话配置
+///   - startCallBack: 开始回调
+///   - textCallBack: 文本识别回调
+///   - voiceCallBack: AI语音回复回调
+///   - stateChange: 状态回调
+///   - finished:录音地址回调
+- (void)setupVoiceChatWith:(SBD_StarburstVoiceChatConfig*)config start:(void (^)(NSInteger dialogId))startCallback textCallback:(void (^)(SBD_StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish, NSInteger sampleRate))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
+
+/// 终止voice chat对话
+- (void)stopVoiceChat:(NSInteger)dialogId;
+
+/// 开始播放tts
+- (void)startPlayTtsAudio:(NSInteger)dialogId;
+
+/// 结束播放tts
+- (void)stopPlayTtsAudio:(NSInteger)dialogId;
+
+///  发送文字对话
+/// - Parameters:
+///   - text: 对话的文字
+///   - isTts: 是否tts
+- (void)sendVoiceChat:(NSString *)text tts:(BOOL)isTts;
+
+
+/// 手机拾音 voice chat(支持自定义 recorder)
+/// - Parameters:
+///   - config: 对话配置
+///   - recorder: 外部录音器(实现 SBD_StarburstVoiceChatRecorder 协议)
+///   - startCallback: 开始回调
+///   - textCallBack: 文本回调
+///   - voiceCallBack: AI 语音回调
+///   - stateChange: 状态回调
+///   - path: 录音文件路径回调
+///
+- (void)setupPhoneChatWith:(SBD_StarburstVoiceChatConfig*)config start:(void (^)(NSInteger dialogId))startCallback textCallback:(void (^)(SBD_StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish,NSInteger sampleRate))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
+
+/// 配置并绑定“手机通话/语音对话”能力(支持自定义录音机)。
+///
+/// 调用流程建议:
+/// 1) 先调用本方法完成配置与回调绑定;
+/// 2) 再调用 startPhoneChat / stopPhoneChat 控制开始/结束
+///
+/// 注意:
+/// - recorder 需要被外部强持有(或 SDK 内部会强持有),否则可能出现 start 不触发/回调不走。
+/// - recorder 负责通过 setUpStart:stop:data:finished: 将音频数据(NSData)持续回传给 SDK。
+///
+/// @param config        语音对话配置(如鉴权、场景、VAD/ASR/TTS 相关策略等)。
+/// @param recorder      自定义录音机(实现 SBD_StarburstVoiceChatRecorder 协议)。
+/// @param startCallback 对话启动回调:SDK 成功创建/开启一次对话后回调,返回 dialogId。
+/// @param textCallBack  文本回调:服务端返回的识别/对话文本模型(字段以 SBD_StarbaustVoiceChatModel 实际定义为准)。
+/// @param voiceCallBack 语音回调:服务端返回的语音数据流(TTS)。
+///                      - dialogId: 对应对话 ID
+///                      - data:     音频数据(通常为 opus/pcm,取决于 config)
+///                      - finish:   是否为最后一包
+///                      - sampleRate: 音频采样率(Hz)
+/// @param stateChange   状态回调:SDK 内部状态变化(连接/鉴权/开始/结束/错误等,取决于 StarburstCode 定义)。
+/// @param path          结束回调:本次对话/录音结束后回调文件路径(由 recorder 或 SDK 生成;没有则可能为空字符串)。
+- (void)setupPhoneChatWith:(SBD_StarburstVoiceChatConfig*)config
+                  recorder:(id<SBD_StarburstVoiceChatRecorder>)recorder
+                     start:(void (^)(NSInteger dialogId))startCallback
+              textCallback:(void (^)(SBD_StarbaustVoiceChatModel *model))textCallBack
+             responseVoice:(void (^)(NSInteger dialogId, NSData *data, BOOL finish, NSInteger sampleRate))voiceCallBack
+               stateChange:(void(^)(StarburstCode code))stateChange
+                  finished:(void(^)(NSString *filePath))path;
+
+- (void)startPhoneChat:(int)vadType;
+
+- (void)stopPhoneChat;
+
+//不可用
+- (void)registerWithProductKey:(NSString *)productKey productSecret:(NSString *)productSecret deviceName:(NSString *)deviceName random:(NSString *)random finished:(void (^)(NSString *deviceSecret,NSError *error))finished;
+//不可用
+- (void)connectWithProductKey:(NSString *)productKey  deviceName:(NSString *)deviceName deviceSecret:(NSString *)deviceSecret finished:(void (^)(BOOL isSuccess,NSError *error))finished;
+- (void)setInputAudioIntensityCallback:(AudioIntensityInputCallback)callback;
+- (void)setPhoneInputAudioIntensityCallback:(void(^)(NSArray<NSNumber*> *left, NSArray<NSNumber*> *right, NSTimeInterval frameTimestampMs))callback;
+-(NSString *)getDeviceName;
+@end
+
@@ -1,6 +1,6 @@
 //
 //  StarburstStreamModel.h
-//  StarburstSdk
+//  SBD_StarburstSdk
 //
 //  Created by liangshi on 2024/12/20.
 //
@@ -9,7 +9,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface StarburstStreamModel : NSObject
+@interface SBD_StarburstStreamModel : NSObject
 @property (nonatomic, assign) NSInteger code;//1: processing, 10: complete -1:fail
 @property (nonatomic, strong) NSString *msg;//提示文字
 @property (nonatomic, strong) NSString *failReason;//失败原因
diff --git a/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstVoiceChatRecorder.h b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Headers/StarburstVoiceChatRecorder.h
new file mode 100644 (file)
index 0000000..27ec981
--- /dev/null
@@ -0,0 +1,61 @@
+//
+//  StarburstVoiceChatRecorder.h
+//  IOT
+//
+//  Created by ByteDance on 2026/1/29.
+//
+
+#import <Foundation/Foundation.h>
+@class SBD_StarburstAudioStreamConfig;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// 自定义录音机协议。
+///
+/// SDK 通过该协议从业务侧获取“输入音频流”,用于语音对话。
+/// 业务侧需要实现本协议,并在 `start/stop` 中驱动采集或读取音频数据,然后通过
+/// `setUpStart:stop:data:finished:` 提供的回调把数据推给 SDK。
+///
+/// 基本调用关系:
+/// 1. SDK 调用 `setUpStart:stop:data:finished:` 注入回调(业务侧保存这些 block);
+/// 2. SDK 调用 `start` 表示开始一次对话/采集;
+/// 3. 业务侧在合适时机调用:
+///    - onStart(config):告知 SDK 本次输入流的参数(采样率/声道/编码格式等);
+///    - onData(data):持续推送音频数据包;
+///    - onStop():告知本次输入结束(不再发送 onData);
+///    - onFinished(filePath):本次录音/输入结束后的文件路径(如不落盘可传空字符串)。
+///
+/// 注意:
+/// - onStart/onStop 语义是“一次会话”的边界:一次会话只调用一次 onStart 与一次 onStop。
+/// - onData 的数据格式、包大小/时长需与 SBD_StarburstAudioStreamConfig 保持一致(例如 PCM16/Opus 等)。
+/// - 若实现了基于 VAD 的门控:应在检测到“开始说话”时触发 onStart;检测到“说话结束”时触发 onStop。
+@protocol SBD_StarburstVoiceChatRecorder <NSObject>
+
+/// VAD 类型/模式(由业务侧或 SDK 配置)。
+/// 具体枚举含义以 SDK 文档/实现为准(例如:0=关闭 VAD,1=VAD),这个是startPhoneChat的时候传入的参数透传。
+///
+/// SDK 可能在 start 前设置该值,业务侧可在录音策略中读取并决定是否启用 VAD 门控。
+@property (nonatomic, assign) NSInteger vadType;
+
+/// SDK 注入回调,业务侧需要保存并在合适时机调用。
+///
+/// @param start    开始回调:业务侧调用一次,传入本次输入音频流配置(编码、采样率、声道、包大小等)。
+/// @param stop     停止回调:业务侧调用一次,表示本次输入结束,不再继续发送 data。
+/// @param data     数据回调:业务侧持续调用,将音频数据包推送给 SDK(NSData 为一包数据)。
+/// @param path     完成回调:业务侧调用一次,返回本次录音/输入对应的文件路径;不落盘可传空字符串。
+- (void)setUpStart:(void(^)(SBD_StarburstAudioStreamConfig *config))start
+              stop:(void(^)(void))stop
+              data:(void(^)(NSData *data))data
+          finished:(void(^)(NSString *filePath))path;
+
+/// 开始一次输入(由 SDK 触发)。
+/// 业务侧一般在该方法内:启动音频采集/读取文件,并在合适时机回调 start/data。
+- (void)start;
+
+/// 停止当前输入(由 SDK 触发)。
+/// 业务侧一般在该方法内:停止采集/读取,并回调 stop/finished(按实现需要)。
+- (void)stop;
+
+@end
+
+NS_ASSUME_NONNULL_END
@@ -1,6 +1,6 @@
 //
 //  StarbusrtSpeaker.h
-//  StarburstSdk
+//  SBD_StarburstSdk
 //
 //  Created by liangshi on 2025/2/18.
 //
@@ -9,7 +9,7 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@interface StarbusrtSpeaker : NSObject
+@interface SBD_StarbusrtSpeaker : NSObject
 @property (nonatomic, strong) NSString *sid;/// 音色id
 @property (nonatomic, strong) NSString *name;/// 名称
 @property (nonatomic, strong) NSString *type;/// 类型
@@ -1,13 +1,13 @@
 ////
 ////  Startburst.h
-////  StarburstSdk
+////  SBD_StarburstSdk
 ////
 ////  Created by liangshi on 2025/6/11.
 ////
 //
 #import <Foundation/Foundation.h>
 
-@interface StartburstDecoderConfig : NSObject
+@interface SBD_StartburstDecoderConfig : NSObject
 @property (nonatomic, assign)NSInteger sampleRate;/// 采样率
 @property (nonatomic, assign)NSInteger numChannels;/// 声道数
 @property (nonatomic, assign)NSInteger encodedFrameLength;/// 编码后每帧字节数
@@ -1,17 +1,17 @@
 //
 //  StartburstGlassChat.h
-//  StarburstSdk
+//  SBD_StarburstSdk
 //
 //  Created by liangshi on 2025/5/6.
 //
 
 #import <Foundation/Foundation.h>
-#import <StarburstSdk/StarburstSdkManager.h>
-#import <StarburstSdk/StarbaustVoiceChatModel.h>
-#import <StarburstSdk/StarbusrtSpeaker.h>
+#import "StarburstSdkManager.h"
+#import "StarbaustVoiceChatModel.h"
+#import "StarbusrtSpeaker.h"
 
 
-@interface StartburstGlassChat : NSObject
+@interface SBD_StartburstGlassChat : NSObject
 ///
 /// 对话设置
 /// - Parameters:
@@ -20,7 +20,7 @@
 ///   - voiceCallBack: AI语音回复回调
 ///   - stateChange: 状态回调
 ///   - finished:录音地址回调
-- (void)setupPhoneChatWith:(StarburstVoiceChatConfig*)config textCallback:(void (^)(StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish,NSInteger sampleRate))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
+- (void)setupPhoneChatWith:(SBD_StarburstVoiceChatConfig*)config textCallback:(void (^)(SBD_StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish,NSInteger sampleRate))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
 
 /// 开始对话
 - (void)start;
 /// - Parameter text:文本
 - (void)fireText:(NSString *)text;
 
+- (void)requestSpeakerListWithContextId:(NSString *)contextId
+customPrompt:(NSString *)customPrompt
+callback:(void (^)(NSArray *list, BOOL success))callback;
+
 @end
 
 
@@ -1,27 +1,27 @@
 //
 //  StartburstGlassesSdk.h
-//  StarburstSdk
+//  SBD_StarburstSdk
 //
 //  Created by liangshi on 2025/4/29.
 //
 
 
 #import <Foundation/Foundation.h>
-#import <StarburstSdk/StarburstSdkManager.h>
-#import <StarburstSdk/StarburstAsrConfig.h>
-#import <StarburstSdk/StarburstAsrModel.h>
-#import <StarburstSdk/StarbaustVoiceChatModel.h>
-#import <StarburstSdk/StarburstFileAsrModel.h>
-#import <StarburstSdk/StarburstOffLineFile.h>
-#import <StarburstSdk/StarburstStreamModel.h>
-#import <StarburstSdk/StarbusrtSpeaker.h>
-#import <StarburstSdk/StartburstGlassChat.h>
-
-@interface StartburstGlassesSdk : NSObject
+#import "StarburstSdkManager.h"
+#import "StarburstAsrConfig.h"
+#import "StarburstAsrModel.h"
+#import "StarbaustVoiceChatModel.h"
+#import "StarburstFileAsrModel.h"
+#import "StarburstOffLineFile.h"
+#import "StarburstStreamModel.h"
+#import "StarbusrtSpeaker.h"
+#import "StartburstGlassChat.h"
+
+@interface SBD_StartburstGlassesSdk : NSObject
 @property (nonatomic, strong)void (^sendToBleCallback)(NSData *data);/// 发送给蓝牙设备
 @property (nonatomic, strong)void (^authCallback)(int code,NSString *msg);/// 鉴权结果回调,code200代表成功,其他为失败
 @property (nonatomic, readonly)BOOL didAuth;/// 是否已经鉴权
-@property (nonatomic, strong)StartburstGlassChat *chat;/// 对话对象
+@property (nonatomic, strong)SBD_StartburstGlassChat *chat;/// 对话对象
 
 /// 单利
 + (instancetype)shared;
 ///   - text: 识别的文本
 ///   - recognize: 识别结果回调
 ///   - error: 错误回调
-- (void)summaryByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+- (void)summaryByText:(NSString *)text config:(SBD_StarburstAsrFileConfig*)config recognizeText:(void (^)(SBD_StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
 
 /// 【文本摘要】--流式
 /// - Parameters:
 ///   - text: 摘要的文字
 ///   - recognize: 结果回调
 ///   - error: 错误回调
-- (void)summaryByTextWithSplit:(NSString *)text recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+- (void)summaryByTextWithSplit:(NSString *)text recognizeText:(void (^)(SBD_StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
 
 /// 取消 【文本摘要】--流式
 -(void)cancelSummaryByTextWithSplit;
@@ -76,7 +76,7 @@
 ///   - config: 翻译配置
 ///   - recognize: 识别结果回调
 ///   - error: 错误回调
-- (void)translateByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+- (void)translateByText:(NSString *)text config:(SBD_StarburstAsrFileConfig*)config recognizeText:(void (^)(SBD_StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
 
 /// 【文本翻译】--流式
 /// - Parameters:
@@ -84,7 +84,7 @@
 ///   - config: 翻译配置
 ///   - recognize: 结果回调
 ///   - error: 错误回调
-- (void)translateByTextWithSplit:(NSString *)text config:(StarburstTslConfig*)config recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+- (void)translateByTextWithSplit:(NSString *)text config:(SBD_StarburstTslConfig*)config recognizeText:(void (^)(SBD_StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
 
 /// 取消 【文本翻译】--流式
 -(void)cancelTranslateByTextWithSplit;
@@ -95,7 +95,7 @@
 ///   - voiceRecordData: 录音音频流回调
 ///   - recognizeText: 识别回调
 ///   - stateChange: 状态回调
-- (void)startRecordAsr:(StarburstAsrConfig*)config voiceRecord:(void (^)(NSData*))voiceData recognizeText:(void (^)(StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange interruption:(void(^)(void))interrupt;
+- (void)startRecordAsr:(SBD_StarburstAsrConfig*)config voiceRecord:(void (^)(NSData*))voiceData recognizeText:(void (^)(SBD_StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange interruption:(void(^)(void))interrupt;
 
 /// 【同声传译】结束手机拾音
 /// - Parameter fileCallback: 录音文件回调
 
 
 /// 开始自定义音频流识别
-- (void)startCustomAsr:(StarburstAsrConfig*)config
-          recognizeText:(void (^)(StarburstAsrModel *model))recognize
+- (void)startCustomAsr:(SBD_StarburstAsrConfig*)config
+          recognizeText:(void (^)(SBD_StarburstAsrModel *model))recognize
             stateChange:(void(^)(StarburstCode code))stateChange;
 
+/// 开始自定义音频流识别(支持多实例,streamerId 如 @"left"、@"right",nil 为默认实例)
+- (void)startCustomAsrWithId:(NSString *)streamerId
+                      config:(SBD_StarburstAsrConfig *)config
+               recognizeText:(void (^)(SBD_StarburstAsrModel *model))recognize
+                 stateChange:(void(^)(StarburstCode code))stateChange;
+
 /// 发送一段自定义音频数据(采样率、格式需匹配 config 设定)
 - (void)sendCustomAudioData:(NSData *)data;
 
+/// 向指定实例发送自定义音频数据
+- (void)sendCustomAudioData:(NSData *)data toStreamerId:(NSString *)streamerId;
+
 /// 停止自定义音频流识别
 - (void)stopCustomAsr;
 
+/// 停止指定实例的自定义音频流识别
+- (void)stopCustomAsrForId:(NSString *)streamerId;
+
 /// 获取音色列表
 /// - Parameter callBack: 结果回调
-- (void)getVcSpeekerList:(void (^)(NSArray <StarbusrtSpeaker*> *list,BOOL success))callBack;
-
+- (void)getVcSpeekerList:(void (^)(NSArray <SBD_StarbusrtSpeaker*> *list,BOOL success))callBack;
 @end
 
 
@@ -1,21 +1,22 @@
 //
 //  StartburstMixSdk.h
-//  StarburstSdk
+//  SBD_StarburstSdk
 //
 //  Created by liangshi on 2025/4/22.
 //
 
 #import <Foundation/Foundation.h>
-#import <StarburstSdk/StarburstSdkManager.h>
-#import <StarburstSdk/StarburstAsrConfig.h>
-#import <StarburstSdk/StarburstAsrModel.h>
-#import <StarburstSdk/StarbaustVoiceChatModel.h>
-#import <StarburstSdk/StarburstFileAsrModel.h>
-#import <StarburstSdk/StarburstOffLineFile.h>
-#import <StarburstSdk/StarburstStreamModel.h>
-#import <StarburstSdk/StarbusrtSpeaker.h>
-
-@interface StartburstMixSdk : NSObject
+#import "StarburstSdkManager.h"
+#import "StarburstAsrConfig.h"
+#import "StarburstAsrModel.h"
+#import "StarbaustVoiceChatModel.h"
+#import "StarburstFileAsrModel.h"
+#import "StarburstOffLineFile.h"
+#import "StarburstStreamModel.h"
+#import "StarbusrtSpeaker.h"
+#import "StarburstVoiceChatRecorder.h"
+
+@interface SBD_StartburstMixSdk : NSObject
 
 @property (nonatomic, strong)void (^authCallback)(int code,NSString *msg);/// 鉴权结果回调,code200代表成功,其他为失败
 @property (nonatomic, readonly)BOOL didAuth;/// 是否已经鉴权
 ///   - text: 识别的文本
 ///   - recognize: 识别结果回调
 ///   - error: 错误回调
-- (void)summaryByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+- (void)summaryByText:(NSString *)text config:(SBD_StarburstAsrFileConfig*)config recognizeText:(void (^)(SBD_StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
 
 /// 【文本摘要】--流式
 /// - Parameters:
 ///   - text: 摘要的文字
 ///   - recognize: 结果回调
 ///   - error: 错误回调
-- (void)summaryByTextWithSplit:(NSString *)text recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+- (void)summaryByTextWithSplit:(NSString *)text recognizeText:(void (^)(SBD_StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
 
 /// 取消 【文本摘要】--流式
 -(void)cancelSummaryByTextWithSplit;
@@ -59,7 +60,7 @@
 ///   - config: 翻译配置
 ///   - recognize: 识别结果回调
 ///   - error: 错误回调
-- (void)translateByText:(NSString *)text config:(StarburstAsrFileConfig*)config recognizeText:(void (^)(StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
+- (void)translateByText:(NSString *)text config:(SBD_StarburstAsrFileConfig*)config recognizeText:(void (^)(SBD_StarburstFileAsrModel*))recognize error:(void (^)(NSError *err))error;
 
 /// 【文本翻译】--流式
 /// - Parameters:
@@ -67,7 +68,7 @@
 ///   - config: 翻译配置
 ///   - recognize: 结果回调
 ///   - error: 错误回调
-- (void)translateByTextWithSplit:(NSString *)text config:(StarburstTslConfig*)config recognizeText:(void (^)(StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
+- (void)translateByTextWithSplit:(NSString *)text config:(SBD_StarburstTslConfig*)config recognizeText:(void (^)(SBD_StarburstStreamModel*))recognize error:(void (^)(NSError *err))error;
 
 /// 取消 【文本翻译】--流式
 -(void)cancelTranslateByTextWithSplit;
@@ -78,7 +79,7 @@
 ///   - voiceRecordData: 录音音频流回调
 ///   - recognizeText: 识别回调
 ///   - stateChange: 状态回调
-- (void)startRecordAsr:(StarburstAsrConfig*)config voiceRecord:(void (^)(NSData*))voiceData recognizeText:(void (^)(StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange interruption:(void(^)(void))interrupt;
+- (void)startRecordAsr:(SBD_StarburstAsrConfig*)config voiceRecord:(void (^)(NSData*))voiceData recognizeText:(void (^)(SBD_StarburstAsrModel*))recognize stateChange:(void(^)(StarburstCode code))stateChange interruption:(void(^)(void))interrupt;
 
 /// 【同声传译】结束手机拾音
 /// - Parameter fileCallback: 录音文件回调
 ///   - voiceCallBack: AI语音回复回调
 ///   - stateChange: 状态回调
 ///   - finished:录音地址回调
-- (void)setupPhoneChatWith:(StarburstVoiceChatConfig*)config start:(void (^)(NSInteger dialogId))startCallback textCallback:(void (^)(StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish, NSInteger sampleRate))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
+- (void)setupPhoneChatWith:(SBD_StarburstVoiceChatConfig*)config start:(void (^)(NSInteger dialogId))startCallback textCallback:(void (^)(SBD_StarbaustVoiceChatModel*))textCallBack  responseVoice:(void (^)(NSInteger dialogId,NSData*data,BOOL finish, NSInteger sampleRate))voiceCallBack stateChange:(void(^)(StarburstCode code))stateChange finished:(void(^)(NSString *filePath))path;
 
+#pragma mark - voice chat (新:支持自定义 recorder)
+- (void)setupPhoneChatWith:(SBD_StarburstVoiceChatConfig*)config
+                  recorder:(id<SBD_StarburstVoiceChatRecorder>)recorder
+                     start:(void (^)(NSInteger dialogId))startCallback
+              textCallback:(void (^)(SBD_StarbaustVoiceChatModel *model))textCallBack
+             responseVoice:(void (^)(NSInteger dialogId, NSData *data, BOOL finish, NSInteger sampleRate))voiceCallBack
+               stateChange:(void(^)(StarburstCode code))stateChange
+                  finished:(void(^)(NSString *filePath))path;
 
 /// 手机拾音,开始对话
 /// - Parameter vadType: 0 vad检测,1不启用vad
 
 /// 获取音色列表
 /// - Parameter callBack: 结果回调
-- (void)getVcSpeekerList:(void (^)(NSArray <StarbusrtSpeaker*> *list,BOOL success))callBack;
+- (void)getVcSpeekerList:(void (^)(NSArray <SBD_StarbusrtSpeaker*> *list,BOOL success))callBack;
 
 @end
 
@@ -1,5 +1,5 @@
 #import <Foundation/Foundation.h>
-#import <StarburstSdk/TextToSpeechCallback.h>
+#import "TextToSpeechCallback.h"
 
 NS_ASSUME_NONNULL_BEGIN
 
@@ -28,14 +28,9 @@ NS_ASSUME_NONNULL_BEGIN
  * @param reqId      请求唯一标识,用于排查日志或防重复请求
  * @param speedRatio 合成语音的语速倍率(1.0 为正常语速,>1.0 为加快,<1.0 为减慢)
  * @param voiceType  音色类型标识(例如 "zh_female_qingchezizi_moon_bigtts")
- * @param encoding   音频编码格式(如 "pcm"、"mp3"、"wav"),可为 nil 使用默认编码
+ * @param encoding wav / pcm / ogg_opus / mp3,默认为 pcm
  * @param callback   回调对象,须实现 TextToSpeechCallback 协议,用于接收结果或错误
  *
- * @discussion 此方法会向云端发送 TTS 请求,云端返回后通过 callback 通知调用方。
- *             建议:
- *             - 确保 text 不超过服务端最大长度限制
- *             - speedRatio 和 voiceType 需符合云端支持范围
- *             - callback 在主线程回调,可直接更新 UI 或播放音频
  */
 - (void)textToSpeech:(NSString *)companyId
                 text:(NSString *)text
similarity index 52%
rename from ShenYin/DeepChordsSdk/StarburstSdk.framework/Info.plist
rename to ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Info.plist
index 5cd3e36..db5ddb8 100644 (file)
Binary files a/ShenYin/DeepChordsSdk/StarburstSdk.framework/Info.plist and b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/Info.plist differ
diff --git a/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/StarburstSdkDirect b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/StarburstSdkDirect
new file mode 100755 (executable)
index 0000000..099b4ef
Binary files /dev/null and b/ShenYin/DeepChordsSdk/StarburstSdkDirect.xcframework/ios-arm64/StarburstSdkDirect.framework/StarburstSdkDirect differ
index 58e8a9c..35a0ffc 100644 (file)
                        );
                        target = 3F887B9B2E38D8DC00C98658 /* ShenYin */;
                };
+               3FCB2E7F2F6AAE8C007AB47F /* Exceptions for "DeepChordsSdk" folder in "playboy" target */ = {
+                       isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
+                       membershipExceptions = (
+                               StarburstSdkDirect.xcframework,
+                       );
+                       target = 3FD1DFE32F0E00BF00A62733 /* playboy */;
+               };
                3FD1DFF52F0E00BF00A62733 /* Exceptions for "ShenYin" folder in "playboy" target */ = {
                        isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
                        membershipExceptions = (
                        );
                        target = 3FD1DFE32F0E00BF00A62733 /* playboy */;
                };
-               3FFB77C82F17A14C00EF9A60 /* Exceptions for "DeepChordsSdk" folder in "playboy" target */ = {
-                       isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
-                       membershipExceptions = (
-                               StarburstSdk.framework,
-                       );
-                       target = 3FD1DFE32F0E00BF00A62733 /* playboy */;
-               };
 /* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
 
 /* Begin PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet section */
                                Channel/PLAYBOY/DcSdk/tool/JLAudioUnitKit.xcframework,
                        );
                };
-               3FFB77C62F17A11100EF9A60 /* Exceptions for "DeepChordsSdk" folder in "Embed Frameworks" phase from "DeepChordsSdk" target */ = {
+               3FCB2E832F6AAEC8007AB47F /* Exceptions for "DeepChordsSdk" folder in "Embed Frameworks" phase from "DeepChordsSdk" target */ = {
                        isa = PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet;
                        attributesByRelativePath = {
-                               StarburstSdk.framework = (CodeSignOnCopy, RemoveHeadersOnCopy, );
+                               StarburstSdkDirect.xcframework = (CodeSignOnCopy, RemoveHeadersOnCopy, );
                        };
                        buildPhase = 3FFB77C52F17A11100EF9A60 /* Embed Frameworks */;
                        membershipExceptions = (
-                               StarburstSdk.framework,
+                               StarburstSdkDirect.xcframework,
+                       );
+               };
+               3FCB2E862F6AAEEE007AB47F /* Exceptions for "DeepChordsSdk" folder in "Embed Frameworks" phase from "playboy" target */ = {
+                       isa = PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet;
+                       attributesByRelativePath = {
+                               StarburstSdkDirect.xcframework = (CodeSignOnCopy, RemoveHeadersOnCopy, );
+                       };
+                       buildPhase = 3FD1DFEF2F0E00BF00A62733 /* Embed Frameworks */;
+                       membershipExceptions = (
+                               StarburstSdkDirect.xcframework,
                        );
                };
 /* End PBXFileSystemSynchronizedGroupBuildPhaseMembershipExceptionSet section */
                0D54E0F02F0A61E600A80EE7 /* DeepChordsSdk */ = {
                        isa = PBXFileSystemSynchronizedRootGroup;
                        exceptions = (
-                               3FFB77C62F17A11100EF9A60 /* Exceptions for "DeepChordsSdk" folder in "Embed Frameworks" phase from "DeepChordsSdk" target */,
-                               3FFB77C82F17A14C00EF9A60 /* Exceptions for "DeepChordsSdk" folder in "playboy" target */,
+                               3FCB2E832F6AAEC8007AB47F /* Exceptions for "DeepChordsSdk" folder in "Embed Frameworks" phase from "DeepChordsSdk" target */,
+                               3FCB2E7F2F6AAE8C007AB47F /* Exceptions for "DeepChordsSdk" folder in "playboy" target */,
+                               3FCB2E862F6AAEEE007AB47F /* Exceptions for "DeepChordsSdk" folder in "Embed Frameworks" phase from "playboy" target */,
                        );
                        path = DeepChordsSdk;
                        sourceTree = "<group>";
                                CODE_SIGN_ENTITLEMENTS = ShenYin/Channel/PLAYBOY/PLAYBOY.entitlements;
                                CODE_SIGN_IDENTITY = "Apple Development";
                                CODE_SIGN_STYLE = Automatic;
-                               CURRENT_PROJECT_VERSION = 202603171655;
+                               CURRENT_PROJECT_VERSION = 202603181655;
                                DEVELOPMENT_TEAM = JKLJ58J33Q;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(inherited)",
                                        "$(PROJECT_DIR)/ShenYin/Sdk/Ota",
                                        "$(PROJECT_DIR)/ShenYin/Sdk/JoySdk",
                                        "$(PROJECT_DIR)/ShenYin/Sdk/JoySdk/tool",
+                                       "$(PROJECT_DIR)/ShenYin/Channel/DeepChords/JoySdk/tool",
                                );
                                GENERATE_INFOPLIST_FILE = YES;
                                INFOPLIST_FILE = ShenYin/Channel/PLAYBOY/PLAYBOY.plist;
                                CODE_SIGN_ENTITLEMENTS = ShenYin/Channel/PLAYBOY/PLAYBOY.entitlements;
                                CODE_SIGN_IDENTITY = "Apple Development";
                                CODE_SIGN_STYLE = Automatic;
-                               CURRENT_PROJECT_VERSION = 202603171655;
+                               CURRENT_PROJECT_VERSION = 202603181655;
                                DEVELOPMENT_TEAM = JKLJ58J33Q;
                                FRAMEWORK_SEARCH_PATHS = (
                                        "$(inherited)",
                                        "$(PROJECT_DIR)/ShenYin/Sdk/JoySdk",
                                        "$(PROJECT_DIR)/ShenYin/Sdk/JoySdk/tool",
                                        "$(PROJECT_DIR)/DeepChordsSdk",
+                                       "$(PROJECT_DIR)/ShenYin/Channel/DeepChords/JoySdk/tool",
                                );
                                GENERATE_INFOPLIST_FILE = YES;
                                INFOPLIST_FILE = ShenYin/Channel/PLAYBOY/PLAYBOY.plist;
index cbe75b3..6c7d7e9 100644 (file)
@@ -45,7 +45,6 @@ extension UserModel{
         HttpClient.request(CommomApi.token) { [weak self](model:UserInfoRoot,res) in
             guard let self = self else{return}
             if model.isSuccess {
-                self.info = model.data
                 self.info = model.data
                 UserCache.shared.save(self.info)
                 finished?(true)
@@ -70,7 +69,7 @@ extension UserModel{
         }
     }
     func getUserInfo(finished: ((Bool) -> Void)? = nil){
-        if CCDevice.isJoy {
+        if CCConfig.appType == .deepchords {
             HttpClient.request(CommomApi.getUserInfo) { [weak self](model:UserInfoRoot,res) in
                 guard let self = self else{return}
                 if model.isSuccess{
diff --git a/ShenYin/ShenYin/Channel/CCCommon.swift b/ShenYin/ShenYin/Channel/CCCommon.swift
new file mode 100644 (file)
index 0000000..3fdb9ac
--- /dev/null
@@ -0,0 +1,17 @@
+//
+//  CCCommon.swift
+//  ShenYin
+//
+//  Created by liangshi on 2026/3/18.
+//
+
+enum CCAppType{
+    case deepchords
+    case playboy
+    case common
+}
+
+enum CCSdkType{
+    case joy
+    case lianJuXing
+}
index 11dc999..11873e4 100644 (file)
@@ -47,7 +47,7 @@ class BaseTC:UITabBarController{
             let nc4 = BaseNC(rootViewController: mineVC)
             nc4.tabBarItem = item4
             
-            if CCDevice.showRaisound {
+            if CCConfig.showRaisoundChat {
                 nc3 = BaseNC(rootViewController: RSChatVC())
                 nc3.tabBarItem = UITabBarItem(title: "AI".l10n, image: UIImage(named: "tab_2_normal")?.withRenderingMode(.alwaysOriginal), selectedImage: UIImage(named: "tab_2_selected")?.withRenderingMode(.alwaysOriginal))
             }
@@ -63,10 +63,6 @@ class BaseTC:UITabBarController{
             self.tabBar.backgroundColor = .white
             view.backgroundColor = .color(.bgColor)
 
-        
-        
-
-
 //        self.selectedIndex = 3
     }
 }
index e369255..24f44bf 100644 (file)
@@ -81,7 +81,7 @@ extension CCBleManager:CBCentralManagerDelegate{
 ////            devices.append(DCPeripheral(device: peripheral,mac: mac))
 ////            discoverDeviceCallback?(devices)
 //        }
-        if CCDevice.isJoy{
+        if CCConfig.sdkType == .joy{
             let mac = JoySdkManager.getMac(advertisementData) ?? ""
             devices.append(DCPeripheral(device: peripheral,mac: mac))
             discoverDeviceCallback?(devices)
@@ -97,7 +97,7 @@ extension CCBleManager:CBCentralManagerDelegate{
         stopScanDevice()
         Logger.debug("蓝牙已连接 \(peripheral)")
         peripheral.delegate = self
-        if CCDevice.isJoy{
+        if CCConfig.sdkType == .joy{
             peripheral.discoverServices([CBUUID(string: JoySdkManager.serviceUUID),CBUUID(string: OtaMananger.otaServiceUUId)]);
         }
         else{
@@ -113,7 +113,7 @@ extension CCBleManager:CBCentralManagerDelegate{
         Logger.debug("蓝牙已断开 \(peripheral)","error \(error)")
         YLprogressHUD.showAutoHiden("蓝牙已断开".l10n)
         self.isConnetd = false
-        if CCDevice.isJoy{
+        if CCConfig.sdkType == .joy{
             JoySdkManager.shared.bleDisConnected()
         }
         else{
@@ -135,7 +135,7 @@ extension CCBleManager: CBPeripheralDelegate {
     }
     
     func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
-        if CCDevice.isJoy{
+        if CCConfig.sdkType == .joy{
             if (service.uuid.uuidString == JoySdkManager.serviceUUID) {
                 JoySdkManager.shared.peripheral(peripheral, didDiscoverCharacteristicsFor: service, error: error)
             }
@@ -149,9 +149,8 @@ extension CCBleManager: CBPeripheralDelegate {
     }
     
     func peripheral(_ peripheral: CBPeripheral, didUpdateNotificationStateFor characteristic: CBCharacteristic, error: (any Error)?) {
-        if CCDevice.isJoy{
+        if CCConfig.sdkType == .joy{
             if (characteristic.isNotifying == true && characteristic.service?.uuid.uuidString == JoySdkManager.serviceUUID && characteristic.uuid.uuidString == JoySdkManager.notifyUUID) {
-                Logger.debug("特征使能成功")
                 JoySdkManager.shared.bleConnected()
             }
             if OtaMananger.isOtadata(characteristic){
@@ -162,7 +161,7 @@ extension CCBleManager: CBPeripheralDelegate {
     
     func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
         //        Logger.debug("收到数据 ===uUId ",characteristic.uuid)
-        if CCDevice.isJoy{
+        if CCConfig.sdkType == .joy{
             if OtaMananger.isOtadata(characteristic){
                 if let _ = characteristic.value,error == nil {
                     OtaMananger.shared.otaManager.peripheral(peripheral, didUpdateValueFor: characteristic)
@@ -203,7 +202,7 @@ extension CCBleManager{
         //                devices.append(DCPeripheral(device: item,mac: mac))
         //            }
         //        }
-        if CCDevice.isJoy{
+        if CCConfig.sdkType == .joy{
             centralManager.scanForPeripherals(withServices: [CBUUID(string: JoySdkManager.serviceUUID)],options: [CBCentralManagerScanOptionAllowDuplicatesKey : false])
         }
         else{
@@ -289,7 +288,7 @@ extension CCBleManager{
     }
     
     func checkSettingsConnected()->[CBPeripheral]{
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             let list = centralManager.retrieveConnectedPeripherals(withServices: [CBUUID(string: JoySdkManager.serviceUUID)])
             Logger.debug("已连接设备",list)
             return list
index 50c2c00..c61e26d 100644 (file)
@@ -6,10 +6,20 @@
 //
 
 class CCConfig{
+    /// app类型
+    static let appType = CCAppType.deepchords
+    /// sdk类型
+    static let sdkType = CCSdkType.joy
+    /// 是否显示北科AI
+    static var showRaisoundChat = false
+    
+    /// app语言
     static var appLanguage = AppSupportLanguage.english
-
+    /// 微信id
     static let wxAppID = "wxd9d677e0024caa90"
+    // 通用链接
     static let wxUniversalLink = "https://dc-cloud-pub.tos-cn-guangzhou.volces.com/app/"
+    /// appstore地址
     static let appStoreLink = "https://itunes.apple.com/cn/app/6752551504?mt=8"
     /// 版本检测
     static let appStoreVersionURL = "https://itunes.apple.com/cn/lookup?id=6752551504"
@@ -22,4 +32,13 @@ class CCConfig{
     
     /// 用户隐私协议地址
     static let yonghuBaseURL = "https://pub-tos.deepchords.com"
+    
+
+    
+    
+    
+    
+    
+    
+    static let revokeText = "请您确保您是有权进行本撤回同意隐私政策操作的相关当事人。撤回同意隐私政策,您将放弃以下资产或者权益:\n\n1.数据清空\n将会停止收集您的个人信息。您使用DeepChords应用过程中产生的数据将被清空;手机中DeepChords应用的缓存数据将被清除。\n\n2.设备解除绑定\nDeepChords账号中,所有设备会与您当前登录的账号解除绑定,并清除设备之前存储在服务器的数据。存储在物理设备中的数据请通过人工本地物理重置来清除。如果您需要重新使用设备,需要您再次进行绑定并且重新授权。\n\n3.其他\n此举还将撤回您对用户协议的同意,并退出DeepChords应用。\n\n请您知悉,撤回同意隐私政策不代表撤回同意前的相关行为和责任得到豁免或减轻。若您需要重新在该账号管理设备,需要您重新授权并绑定。请谨慎操作!"
 }
index b126b36..8cb2d3d 100644 (file)
@@ -6,10 +6,8 @@
 //
 import JoyGemAI
 class CCDevice{
-    static var isJoy = true
-    static var showRaisound = false
     static func initSdk(){
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             JoySdkManager.shared.setupSdk()
         }
         else{
@@ -17,7 +15,7 @@ class CCDevice{
         }
     }
     static func translate(text:String,from:String,to:String,finished:@escaping ((stream:String,finish:Bool)?)->Void){
-        if isJoy {
+        if CCConfig.sdkType == .joy {
             JoyGemAIManager.shared().cancelTranslateRequest()
             JoyGemAIManager.shared().translate(text, from: from, to: to) { result, finish in
                 finished((result,finish))
@@ -33,7 +31,7 @@ class CCDevice{
         }
     }
     static func summary(text:String,finished:@escaping ((stream:String,finish:Bool)?)->Void){
-        if isJoy {
+        if CCConfig.sdkType == .joy {
             JoyGemAIManager.shared().cancelSummaryRequest()
             JoyGemAIManager.shared().summary(text) { text, finish in
                 finished((text,finish))
@@ -51,7 +49,7 @@ class CCDevice{
 }
 extension CCDevice{
     static func findHeadphone(_ mode:FindType){
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             var value:JoyGemFindHeadphoneMode = .all
             switch mode {
             case .left:
@@ -74,7 +72,7 @@ extension CCDevice{
         }
     }
     static func getEQMode(finished:@escaping (ModeEffectsType?)->Void){
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             JoyGemAIManager.shared().device.getEQMode { mode in
                 var value:ModeEffectsType = .normal
                 switch mode {
@@ -129,7 +127,7 @@ extension CCDevice{
         }
     }
     static func setEQMode(_ type:ModeEffectsType){
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             var value:JoyGemEQMode = .normal
             switch type {
             case .normal:
@@ -159,7 +157,7 @@ extension CCDevice{
     
     
     static func getCustomEQ(finished:@escaping ([NSNumber]?)->Void){
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             JoyGemAIManager.shared().device.getCustomEQ { eq in
                 Logger.debug("getCustomEQ:\(eq)");
                 finished(eq.bands)
@@ -185,7 +183,7 @@ extension CCDevice{
         }
     }
     static func resetCustomEQ(){
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             JoyGemAIManager.shared().device.resetCustomEQ { err in
                 Logger.debug("resetCustomEQ:\(err)");
             }
@@ -208,7 +206,7 @@ extension CCDevice{
         }
     }
     static func setCustomEQ(index:Int,value:Int){
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             JoyGemAIManager.shared().device.setCustomEQ(UInt(index), withGain: value) { err in
                 Logger.debug("setCustomEQ:\(err)");
             }
@@ -237,7 +235,7 @@ extension CCDevice{
 //        }
 //    }
     static func getDN(finished:@escaping ((_ mac:String?)->Void)) {
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             JoyGemAIManager.shared().device.getDN { deviceName in
                 finished(deviceName)
             } error: { error in
@@ -251,7 +249,7 @@ extension CCDevice{
         }
     }
     static func getVersion(finished:@escaping ((_ version:String?)->Void)) {
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             JoyGemAIManager.shared().device.software { version in
                 finished(version)
             } error: { error in
index 093d98c..976c189 100644 (file)
@@ -8,7 +8,7 @@
 class CCPage{
     static func gotoChat(){
         AudioPlayView.shared.closeAction()
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             App.shared.goToPage(JoyChatVC())
         }
         else{
@@ -17,7 +17,7 @@ class CCPage{
     }
     static func gotoFieldRecord(){
         AudioPlayView.shared.closeAction()
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             App.shared.goToPage(JoyXclyVC())
         }
         else{
@@ -26,7 +26,7 @@ class CCPage{
     }
     static func gotoCallRecord(){
         AudioPlayView.shared.closeAction()
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             if JoySdkManager.shared.callRecord.supportStereo{
                 App.shared.goToPage(JoyStereoCallVC())
             }
@@ -40,7 +40,7 @@ class CCPage{
     }
     static func gotoChinese2Enlgish(){
         AudioPlayView.shared.closeAction()
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             App.shared.goToPage(JoyChinese2EnglishVC())
         }
         else{
@@ -49,7 +49,7 @@ class CCPage{
     }
     static func gotoTcty(){
         AudioPlayView.shared.closeAction()
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             App.shared.goToPage(JoyTctyVC())
         }
         else{
@@ -58,7 +58,7 @@ class CCPage{
     }
     static func gotoDialogTranslate(){
         AudioPlayView.shared.closeAction()
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy {
             App.shared.goToPage(JoyDialogTranslateVC())
         }
         else{
@@ -66,7 +66,7 @@ class CCPage{
         }
     }
     static func gotoSubTitle(){
-        if CCDevice.isJoy {
+        if CCConfig.sdkType == .joy{
             if #available(iOS 15.0, *) {
                 App.shared.goToPage(JoySubTitleVC())
             } else {
index b1e74f2..a296008 100644 (file)
@@ -27,7 +27,7 @@ class PbAiFunctionVC:BaseVC{
     override func setupViews() {
         navBar.title = device.productName
         navBar.backgroundColor = .color(.bgColor)
-//        navBar.rightView.isHidden = false
+        navBar.rightView.isHidden = false
         navBar.rightView.setTitle("字幕翻译", for: .normal)
         view.backgroundColor = .color(.bgColor)
         //        navBar.rightView.setImage(UIImage(named: "add_icon"), for: .normal)
index 83ed885..4c4a4bc 100644 (file)
@@ -144,8 +144,17 @@ class PbChatVC:BaseVC{
         DcChatManager.shared.getVcSpeekerList {[weak self] speakers in
             guard let self = self,let speakers = speakers,speakers.count > 0 else{return}
             self.roleList = speakers.map{CCRole(sid: $0.sid, name: $0.name, type: $0.type, role: $0.role)}
-            if CCDevice.isJoy{
-                self.roleList.insert( CCRole.xiaoYin, at: 0)
+            
+            var xiaotu:CCRole?
+            for (index,value) in self.roleList.enumerated(){
+                if value.role == "playboy_xiaotu" {
+                    xiaotu = value
+                    self.roleList.remove(at: index)
+                    break
+                }
+            }
+            if let item = xiaotu{
+                self.roleList.insert(item, at: 0)
             }
             
             
index 22b9406..819fe7d 100644 (file)
@@ -99,7 +99,7 @@ extension ModeVC{
     }
     @objc func findAction(){
         if CCBleManager.shared.isConnetd {
-            if CCDevice.isJoy{
+            if CCConfig.appType == .deepchords{
                 App.shared.goToPage(FindVC())
             }
             else{
index ec36aeb..ab88b37 100644 (file)
@@ -39,7 +39,7 @@ class PbTctyVC:BaseVC{
         translateTextView.do { v in
             v.textView.textColor = .color(.level1)
             v.placeHolde = "此处将显示译文".l10n
-            if CCDevice.isJoy{
+            if CCConfig.appType == .deepchords{
                 v.bgView.yc.addgradientLayer(colors: [.color(.theme),.color(.bgColor)], direction: .top2down,rect: CGRect(x: 0, y: 0, width: kScreenWid, height: (kScreenHei - kNavBtm - 120 - 10)/2))
                 v.bgView.alpha = 0.1
             }
index ab99e56..0ded3de 100644 (file)
@@ -62,7 +62,6 @@ extension CCBleManager:CBCentralManagerDelegate{
         @unknown default:
             break
         }
-        OtaMananger.shared.otaManager.centralManagerDidUpdateState(central)
     }
     
     func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber) {
@@ -75,34 +74,14 @@ extension CCBleManager:CBCentralManagerDelegate{
             devices.append(DCPeripheral(device: peripheral,mac: mac))
             discoverDeviceCallback?(devices)
         }
-        else{
-//            let mac = JoySdkManager.getMac(advertisementData) ?? ""
-//            devices.append(DCPeripheral(device: peripheral,mac: mac))
-//            discoverDeviceCallback?(devices)
-        }
-//        if CCDevice.isJoy{
-//            let mac = JoySdkManager.getMac(advertisementData) ?? ""
-//            devices.append(DCPeripheral(device: peripheral,mac: mac))
-//            discoverDeviceCallback?(devices)
-//        }
-//        else{
-//            let mac = DcSdkManager.getMac(advertisementData) ?? ""
-//            devices.append(DCPeripheral(device: peripheral,mac: mac))
-//            discoverDeviceCallback?(devices)
-//        }
     }
     
     func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
         stopScanDevice()
         Logger.debug("蓝牙已连接 \(peripheral)")
         peripheral.delegate = self
-        if CCDevice.isJoy{
-//            peripheral.discoverServices([CBUUID(string: JoySdkManager.serviceUUID),CBUUID(string: OtaMananger.otaServiceUUId)]);
-        }
-        else{
             DCBleManager.shared.centralManager(central, didConnect: peripheral)
-            peripheral.discoverServices([CBUUID(string: DCBleManager.serviceUUID),CBUUID(string: OtaMananger.otaServiceUUId)]);
-        }
+            peripheral.discoverServices([CBUUID(string: DCBleManager.serviceUUID)]);
     }
     func centralManager(_ central: CBCentralManager, didFailToConnect peripheral: CBPeripheral, error: Error?) {
         Logger.debug("peripheral: %@ failed to connect", peripheral)
@@ -112,14 +91,8 @@ extension CCBleManager:CBCentralManagerDelegate{
         Logger.debug("蓝牙已断开 \(peripheral)",error?.localizedDescription ?? "",error.debugDescription)
         YLprogressHUD.showAutoHiden("蓝牙已断开".l10n)
         self.isConnetd = false
-        if CCDevice.isJoy{
-
-        }
-        else{
-            DCBleManager.shared.centralManager(central, didDisconnectPeripheral: peripheral, error: nil)
-        }
+        DCBleManager.shared.centralManager(central, didDisconnectPeripheral: peripheral, error: nil)
         NotificationManager.post(type: .deviceValidChange, objtect: nil)
-        OtaMananger.shared.otaManager.centralManager(central, didDisconnectPeripheral: peripheral, error: error)
         checkConectState()
     }
 }
@@ -134,50 +107,15 @@ extension CCBleManager: CBPeripheralDelegate {
     }
     
     func peripheral(_ peripheral: CBPeripheral, didDiscoverCharacteristicsFor service: CBService, error: Error?) {
-        if CCDevice.isJoy{
-//            if (service.uuid.uuidString == JoySdkManager.serviceUUID) {
-//                JoySdkManager.shared.peripheral(peripheral, didDiscoverCharacteristicsFor: service, error: error)
-//            }
-//            else if service.uuid.uuidString == OtaMananger.otaServiceUUId{
-//                OtaMananger.shared.otaManager.peripheral(peripheral, didDiscoverCharacteristicsFor: service, error: error)
-//            }
-        }
-        else{
-            DCBleManager.shared.peripheral(peripheral, didDiscoverCharacteristicsFor: service, error: error)
-        }
+        DCBleManager.shared.peripheral(peripheral, didDiscoverCharacteristicsFor: service, error: error)
     }
     
     func peripheral(_ peripheral: CBPeripheral, didUpdateNotificationStateFor characteristic: CBCharacteristic, error: (any Error)?) {
-        if CCDevice.isJoy{
-//            if (characteristic.isNotifying == true && characteristic.service?.uuid.uuidString == JoySdkManager.serviceUUID && characteristic.uuid.uuidString == JoySdkManager.notifyUUID) {
-//                Logger.debug("特征使能成功")
-//                JoySdkManager.shared.bleConnected()
-//            }
-//            if OtaMananger.isOtadata(characteristic){
-//                OtaMananger.shared.otaManager.peripheral(peripheral, didUpdateNotificationStateFor: characteristic, error: error)
-//            }
-        }
     }
     
     func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
-        //        Logger.debug("收到数据 ===uUId ",characteristic.uuid)
-        if CCDevice.isJoy{
-//            if OtaMananger.isOtadata(characteristic){
-//                if let _ = characteristic.value,error == nil {
-//                    OtaMananger.shared.otaManager.peripheral(peripheral, didUpdateValueFor: characteristic)
-//                }
-//                else{
-//                    Logger.debug("ota 收到数据 ===\(characteristic.uuid)","无数据")
-//                }
-//            }
-//            else {
-//                //MARK: 需要配置传入数据
-//                JoySdkManager.shared.receiveValue(characteristic)
-//            }
-        }
-        else{
+        //Logger.debug("收到数据 ===uUId ",characteristic.uuid)
             DCBleManager.shared.peripheral(peripheral, didUpdateValueFor: characteristic, error: error)
-        }
     }
     
     func peripheral(_ peripheral: CBPeripheral, didModifyServices invalidatedServices: [CBService]) {
@@ -202,12 +140,7 @@ extension CCBleManager{
         //                devices.append(DCPeripheral(device: item,mac: mac))
         //            }
         //        }
-        if CCDevice.isJoy{
-//            centralManager.scanForPeripherals(withServices: [CBUUID(string: JoySdkManager.serviceUUID)],options: [CBCentralManagerScanOptionAllowDuplicatesKey : false])
-        }
-        else{
-            centralManager.scanForPeripherals(withServices: [CBUUID(string: DCBleManager.serviceUUID)],options: [CBCentralManagerScanOptionAllowDuplicatesKey : false])
-        }
+        centralManager.scanForPeripherals(withServices: [CBUUID(string: DCBleManager.serviceUUID)],options: [CBCentralManagerScanOptionAllowDuplicatesKey : false])
         discoverDeviceCallback?(devices)
     }
     
@@ -217,12 +150,6 @@ extension CCBleManager{
     
     func connectPeripheral(_ peripheral: DCPeripheral) {
         connectPeripheral = peripheral
-//        if let name = peripheral.device.name,name.hasPrefix("AI") {
-//            CCDevice.isJoy = false
-//        }
-//        else{
-//            CCDevice.isJoy = true
-//        }
         CCDevice.initSdk()
         Logger.debug(peripheral.device.name ?? "","连接中...")
         centralManager.connect(peripheral.device, options: [CBConnectPeripheralOptionEnableTransportBridgingKey:true])
@@ -288,17 +215,9 @@ extension CCBleManager{
     }
     
     func checkSettingsConnected()->[CBPeripheral]{
-        if CCDevice.isJoy {
-//            let list = centralManager.retrieveConnectedPeripherals(withServices: [CBUUID(string: JoySdkManager.serviceUUID)])
-//            Logger.debug("已连接设备",list)
-//            return list
-            return []
-        }
-        else{
             let list = centralManager.retrieveConnectedPeripherals(withServices: [CBUUID(string: DCBleManager.serviceUUID)])
             Logger.debug("已连接设备",list)
             return list
-        }
     }
 }
 
index 7feb772..6f27dce 100644 (file)
@@ -3,39 +3,42 @@
 //  ShenYin
 //
 //  Created by liangshi on 2026/1/28.
-//
 
 
-//class CCConfig{
-//    static var appLanguage = AppSupportLanguage.english
-//    
-//    static let wxAppID = "wxeb3291e720293abc"
-//    static let wxUniversalLink = "https://www.playboykq.com/app/"
-//    static let appStoreLink = "https://itunes.apple.com/cn/app/6757697090?mt=8"
-//    /// 版本检测
-//    static let appStoreVersionURL = "https://itunes.apple.com/cn/lookup?id=6757697090"
-//    
-//    /// 服务器地址
-//    static let baseURL = "https://app-api.deepchords.com"
-//    
-//    /// 用户隐私协议地址
-//    static let yonghuBaseURL = "https://pub-cdn.playboykq.com"
-//    
-//}
 
 class CCConfig{
+    /// app类型
+    static let appType = CCAppType.playboy
+    /// sdk类型
+    static let sdkType = CCSdkType.lianJuXing
+    /// app语言
     static var appLanguage = AppSupportLanguage.english
-
+    /// 微信id
     static let wxAppID = "wxeb3291e720293abc"
+    /// 通用链接
     static let wxUniversalLink = "https://www.playboykq.com/app/"
+    /// appstore地址
     static let appStoreLink = "https://itunes.apple.com/cn/app/6757697090?mt=8"
     /// 版本检测
     static let appStoreVersionURL = "https://itunes.apple.com/cn/lookup?id=6757697090"
-
     /// 服务器地址
     static let baseURL = "https://app-api.playboykq.com"
-
+    /// 服务器地址
+//    static let baseURL = "https://app-api.deepchords.com""
     /// 用户隐私协议地址
     static let yonghuBaseURL = "https://pub-cdn.playboykq.com"
 
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    static let revokeText = "请您确保您是有权进行本撤回同意隐私政策操作的相关当事人。撤回同意隐私政策,您将放弃以下资产或者权益:\n\n1.数据清空\n将会停止收集您的个人信息。您使用PLAYBOY应用过程中产生的数据将被清空;手机中PLAYBOY应用的缓存数据将被清除。\n\n2.设备解除绑定\nPLAYBOY账号中,所有设备会与您当前登录的账号解除绑定,并清除设备之前存储在服务器的数据。存储在物理设备中的数据请通过人工本地物理重置来清除。如果您需要重新使用设备,需要您再次进行绑定并且重新授权。\n\n3.其他\n此举还将撤回您对用户协议的同意,并退出PLAYBOY应用。\n\n请您知悉,撤回同意隐私政策不代表撤回同意前的相关行为和责任得到豁免或减轻。若您需要重新在该账号管理设备,需要您重新授权并绑定。请谨慎操作!"
 }
index 83e27c9..686b126 100644 (file)
 //import JoyGemAI
 import DeepChordsSdk
 class CCDevice{
-    static var isJoy = false
-    static var showRaisound = false
     static func initSdk(){
-        if CCDevice.isJoy {
-//            JoySdkManager.shared.setupSdk()
-        }
-        else{
-            DcSdkManager.shared.initSdk()
-        }
+       DcSdkManager.shared.initSdk()
     }
     static func translate(text:String,from:String,to:String,finished:@escaping ((stream:String,finish:Bool)?)->Void){
-        if isJoy {
-//            JoyGemAIManager.shared().cancelTranslateRequest()
-//            JoyGemAIManager.shared().translate(text, from: from, to: to) { result, finish in
-//                finished((result,finish))
-//            } error: { error in
-//                finished(nil)
-//            }
-        }
-        else{
             DCText.cancelTranslateByTextWithSplit()
             DCText.translate(text: text, from: from, to: to) { result in
                 finished(result)
             }
-        }
     }
     static func summary(text:String,finished:@escaping ((stream:String,finish:Bool)?)->Void){
-        if isJoy {
-//            JoyGemAIManager.shared().cancelSummaryRequest()
-//            JoyGemAIManager.shared().summary(text) { text, finish in
-//                finished((text,finish))
-//            } error: { error in
-//                finished(nil)
-//            }
-        }
-        else{
             DCText.cancelSummaryByTextWithSplit()
             DCText.sumary(text: text) { result in
                 finished(result)
             }
-        }
     }
 }
 extension CCDevice{
     static func findHeadphone(_ mode:FindType){
-        if CCDevice.isJoy {
-//            var value:JoyGemFindHeadphoneMode = .all
-//            switch mode {
-//            case .left:
-//                value = .left
-//            case .right:
-//                value = .right
-//            case .cancel:
-//                value = .cancel
-//            case .all:
-//                value = .all
-//            }
-//            JoyGemAIManager.shared().device.findHeadphone(value) { err in
-//                Logger.debug("findHeadphone:\(err)");
-//            }
-        }
-        else{
             let value:UInt8 = mode == .cancel ? 0:1
             DCDevice.shared.findDevice(state: value) { result in
             }
-        }
     }
     static func getEQMode(finished:@escaping (ModeEffectsType?)->Void){
-        if CCDevice.isJoy {
-//            JoyGemAIManager.shared().device.getEQMode { mode in
-//                var value:ModeEffectsType = .normal
-//                switch mode {
-//                case .normal:
-//                    value = .normal
-//                case .pop:
-//                    value = .pop
-//                case .classic:
-//                    value = .classic
-//                case .rock:
-//                    value = .rock
-//                case .jazz:
-//                    value = .jazz
-//                case .custom:
-//                    value = .custom
-//                }
-//                finished(value)
-//            } error: { err in
-//                Logger.debug("getEQMode:\(err)");
-//                finished(nil)
-//            }
-        }
-        else{
-            /// type, 0x00(正常模式)
-            //    0x01(流行)
-            //    0x02(经典)
-            //    0x03(爵士)
-            //    0x04(摇滚)
-            //    0x05(自定义)
-            DCDevice.shared.getEQ { (arg0,result) in
-                guard let (type,list) = arg0 else{
-                    finished(nil)
-                    return
-                }
-                switch type{
-                case 0:
-                    finished(.normal)
-                case 1:
-                    finished(.pop)
-                case 2:
-                    finished(.classic)
-                case 3:
-                    finished(.jazz)
-                case 4:
-                    finished(.rock)
-                case 5:
-                    finished(.custom)
-                default:
-                    finished(nil)
-                }
+        /// type, 0x00(正常模式)
+        //    0x01(流行)
+        //    0x02(经典)
+        //    0x03(爵士)
+        //    0x04(摇滚)
+        //    0x05(自定义)
+        DCDevice.shared.getEQ { (arg0,result) in
+            guard let (type,list) = arg0 else{
+                finished(nil)
+                return
+            }
+            switch type{
+            case 0:
+                finished(.normal)
+            case 1:
+                finished(.pop)
+            case 2:
+                finished(.classic)
+            case 3:
+                finished(.jazz)
+            case 4:
+                finished(.rock)
+            case 5:
+                finished(.custom)
+            default:
+                finished(nil)
             }
         }
     }
     static func setEQMode(_ type:ModeEffectsType){
-        if CCDevice.isJoy {
-//            var value:JoyGemEQMode = .normal
-//            switch type {
-//            case .normal:
-//                value = .normal
-//            case .pop:
-//                value = .pop
-//            case .classic:
-//                value = .classic
-//            case .rock:
-//                value = .rock
-//            case .jazz:
-//                value = .jazz
-//            case .custom:
-//                value = .custom
-//            }
-//            
-//            JoyGemAIManager.shared().device.setEQMode(value) { err in
-//                Logger.debug("setEQMode:\(err)");
-//            }
-        }else{
             let value:UInt8 = UInt8(type.rawValue)
             DCDevice.shared.setEQ(type: value) { success in
                 
             }
-        }
     }
     
     
     static func getCustomEQ(finished:@escaping ([NSNumber]?)->Void){
-        if CCDevice.isJoy {
-//            JoyGemAIManager.shared().device.getCustomEQ { eq in
-//                Logger.debug("getCustomEQ:\(eq)");
-//                finished(eq.bands)
-//            } error: { err in
-//                Logger.debug("getCustomEQ:\(err)");
-//                finished(nil)
-//            }
-        }
-        else{
             DCDevice.shared.getEQ { (arg0,result) in
                 guard let (type,list) = arg0 else{
                     finished(nil)
@@ -183,15 +81,8 @@ extension CCDevice{
                     finished(nil)
                 }
             }
-        }
     }
     static func resetCustomEQ(){
-        if CCDevice.isJoy {
-//            JoyGemAIManager.shared().device.resetCustomEQ { err in
-//                Logger.debug("resetCustomEQ:\(err)");
-//            }
-        }
-        else{
             let list = [
                 0,0,0,0,0,0,0,0,0,0,0,0
             ]
@@ -206,64 +97,20 @@ extension CCDevice{
                 DCDevice.shared.setEQ(type: 0x05) {result in
                 }
             }
-        }
     }
     static func setCustomEQ(index:Int,value:Int){
-        if CCDevice.isJoy {
-//            JoyGemAIManager.shared().device.setCustomEQ(UInt(index), withGain: value) { err in
-//                Logger.debug("setCustomEQ:\(err)");
-//            }
-        }
-        else{
             DCDevice.shared.setCustomEQ(index: UInt8(index), value: value) {result in
             }
-        }
     }
 }
 extension CCDevice{
-//    static func getMac(finished:@escaping ((_ mac:String?)->Void)) {
-//        if CCDevice.isJoy {
-//            JoyGemAIManager.shared().device.macAddress { edr, ble in
-//                Logger.debug("edr:\(edr),ble:\(ble)");
-//                finished(edr.uppercased())
-//            } error: { error in
-//                Logger.debug("\(error!.localizedDescription)")
-//                finished(nil)
-//            }
-//        }
-//        else{
-////            DCDevice.shared.getSoftVersion {result in
-////                finished(result)
-////            }
-//        }
-//    }
     static func getDN(finished:@escaping ((_ mac:String?)->Void)) {
-        if CCDevice.isJoy {
-//            JoyGemAIManager.shared().device.getDN { deviceName in
-//                finished(deviceName)
-//            } error: { error in
-//                Logger.debug("获取dn失败","\(error!.localizedDescription)")
-//                finished(nil)
-//            }
-        }
-        else{
             let dn = DCText.getDeviceName()
             finished(dn)
-        }
     }
     static func getVersion(finished:@escaping ((_ version:String?)->Void)) {
-        if CCDevice.isJoy {
-//            JoyGemAIManager.shared().device.software { version in
-//                finished(version)
-//            } error: { error in
-//                Logger.debug("\(error!.localizedDescription)");
-//                finished(nil)
-//            }
-        }
-        else{
             DCDevice.shared.getSoftVersion {result in
                 finished(result)
             }
-        }
     }
 }
index 606ba03..09f013b 100644 (file)
@@ -8,78 +8,33 @@
 class CCPage{
     static func gotoChat(){
         AudioPlayView.shared.closeAction()
-        if CCDevice.isJoy {
-//            App.shared.goToPage(JoyChatVC())
-        }
-        else{
-            App.shared.goToPage(PbChatVC())
-        }
+        App.shared.goToPage(PbChatVC())
     }
     static func gotoFieldRecord(){
         AudioPlayView.shared.closeAction()
-        if CCDevice.isJoy {
-//            App.shared.goToPage(JoyXclyVC())
-        }
-        else{
-            App.shared.goToPage(PbXclyVC())
-        }
+        App.shared.goToPage(PbXclyVC())
     }
     static func gotoCallRecord(){
         AudioPlayView.shared.closeAction()
-        if CCDevice.isJoy {
-//            if JoySdkManager.shared.callRecord.supportStereo{
-//                App.shared.goToPage(JoyStereoCallVC())
-//            }
-//            else{
-//                App.shared.goToPage(JoyCallingRecordVC())
-//            }
-        }
-        else{
-//            if JoySdkManager.shared.callRecord.supportStereo{
-                App.shared.goToPage(PbStereoCallVC())
-//            }
-//            else{
-//                App.shared.goToPage(JoyCallingRecordVC())
-//            }
-        }
+        App.shared.goToPage(PbStereoCallVC())
     }
     static func gotoChinese2Enlgish(){
         AudioPlayView.shared.closeAction()
-        if CCDevice.isJoy {
-//            App.shared.goToPage(JoyChinese2EnglishVC())
-        }
-        else{
-            App.shared.goToPage(PbChinese2EnglishVC())
-        }
+        App.shared.goToPage(PbChinese2EnglishVC())
     }
     static func gotoTcty(){
         AudioPlayView.shared.closeAction()
-        if CCDevice.isJoy {
-//            App.shared.goToPage(JoyTctyVC())
-        }
-        else{
-            App.shared.goToPage(PbTctyVC())
-        }
+        App.shared.goToPage(PbTctyVC())
     }
     static func gotoDialogTranslate(){
         AudioPlayView.shared.closeAction()
-        if CCDevice.isJoy {
-//            App.shared.goToPage(JoyDialogTranslateVC())
-        }
-        else{
-            App.shared.goToPage(PbDialogTranslateVC())
-        }
+        App.shared.goToPage(PbDialogTranslateVC())
     }
     static func gotoSubTitle(){
-        if CCDevice.isJoy {
-            //            App.shared.goToPage(JoyDialogTranslateVC())
-        }
-        else{
-            if #available(iOS 15.0, *) {
-                App.shared.goToPage(PbSubTitleVC())
-            } else {
-                // Fallback on earlier versions
-            }
+        if #available(iOS 15.0, *) {
+            App.shared.goToPage(PbSubTitleVC())
+        } else {
+            // Fallback on earlier versions
         }
     }
 }
index 463c033..2050663 100644 (file)
@@ -32,7 +32,7 @@ public enum YLColor {
 
 extension YLColor: ColorRGBProviderProtocol {
     public var rgbValue: Int {
-        if CCDevice.isJoy {
+        if CCConfig.appType == .deepchords {
             switch self {
             case .bgColor:
                 return 0xF7F7F7
index 326e7d8..db53fd8 100644 (file)
@@ -65,7 +65,7 @@ open class BaseVC:UIViewController {
         KingfisherManager.shared.cache.clearMemoryCache()
     }
     open override var preferredStatusBarStyle: UIStatusBarStyle {
-        if CCDevice.isJoy{
+        if CCConfig.appType == .deepchords{
             return .darkContent
         }
         else{
index f614608..dbbfdf2 100644 (file)
@@ -71,7 +71,7 @@ class CustomerCell:BaseTableViewCell{
         didSet{
             originalLabel.text = data.content
             if data.isSend {
-                bgView.backgroundColor = CCDevice.isJoy ? .color(.theme) : UIColor.color(.cellBg)
+                bgView.backgroundColor = CCConfig.appType == .deepchords ? .color(.theme) : UIColor.color(.cellBg)
                 originalLabel.textColor = .white
                 
                 icon.snp.remakeConstraints { make in
@@ -88,7 +88,7 @@ class CustomerCell:BaseTableViewCell{
             else{
                 bgView.backgroundColor = .color(.cellBg)
                 originalLabel.textColor = .color(.level1)
-                icon.image = CCDevice.isJoy ? UIImage(named: "logo_2"):UIImage(named: "logo_4")
+                icon.image = CCConfig.appType == .deepchords ? UIImage(named: "logo_2"):UIImage(named: "logo_4")
                 icon.snp.remakeConstraints { make in
                     make.size.equalTo(36)
                     make.top.equalToSuperview().inset(16)
index e03c7cb..9aff9ba 100644 (file)
@@ -26,7 +26,7 @@ public class CCRole{
     }
     
     static var xiaoYin:CCRole{
-        if CCDevice.isJoy {
+        if CCConfig.appType == .deepchords {
             let model = CCRole()
             model.sid = "zh_female_tianmeitaozi_mars_bigtts"
             model.name = "小音"
index 4808b10..0e239a8 100644 (file)
@@ -271,7 +271,7 @@ class DialogRecordBar: BaseView {
                 v.language = CCAiLanguage.chinse
                 v.yc.addTap(target: self, action: #selector(leftLanguageAction))
                 v.language = .chinse
-                v.valueLabel.text = CCDevice.isJoy ? "耳机".l10n:"眼镜".l10n
+                v.valueLabel.text = CCConfig.appType == .deepchords ? "耳机".l10n:"眼镜".l10n
             }
             rightItem.do { (v) in
                 v.language = CCAiLanguage.english
index 3e2724b..0242767 100644 (file)
@@ -174,7 +174,7 @@ class RecordBar: BaseView {
             valueLabel.do { v in
                 v.textColor = .color(.level2)
                 v.font = .regular(10)
-                v.text = CCDevice.isJoy ? "耳机".l10n:"眼镜".l10n
+                v.text = CCConfig.appType == .deepchords ? "耳机".l10n:"眼镜".l10n
             }
         }
         
index b93e4b8..41ab444 100644 (file)
@@ -19,7 +19,7 @@ class RhythView: BaseView {
         }
 
         stopWave.image = UIImage(named: "audio_record_normal")
-        startWave.kf.setImage(with: Bundle.main.url(forResource: CCDevice.isJoy ? "record_start_joy":"record_start", withExtension: "gif")!)
+        startWave.kf.setImage(with: Bundle.main.url(forResource: CCConfig.appType == .deepchords ? "record_start_joy":"record_start", withExtension: "gif")!)
         startWave.isHidden = true
     }
     override func setupLayout() {
index a3785d4..9ecec14 100644 (file)
@@ -158,7 +158,7 @@ class CalendarPickerVC: BaseVC {
                 invariantViewProperties.textColor = .color(.level2)
             }
             if let date = date,date > Date(){
-                invariantViewProperties.textColor = CCDevice.isJoy ? .color(.placeholder):.rgb(0x333333)
+                invariantViewProperties.textColor = CCConfig.appType == .deepchords ? .color(.placeholder):.rgb(0x333333)
             }
             
             
index 382ff53..24e302e 100644 (file)
@@ -24,7 +24,7 @@ class CurrentDeviceView: BaseView {
     }
     
     override func setupLayout() {
-        if CCDevice.isJoy {
+        if CCConfig.appType == .deepchords {
             imageView.snp.makeConstraints { make in
                 make.width.equalTo(168)
                 make.height.equalTo(138)
index 24ff86b..11ff449 100644 (file)
@@ -117,7 +117,7 @@ class BleScanHeaderView: BaseView {
      var radarImageView = UIImageView()
     override func setupViews() {
         
-        if CCDevice.isJoy {
+        if CCConfig.appType == .deepchords {
             addSubviews([rippleView,radarImageView])
             rippleView.startAnimating()
             
index e1e5a99..56cc5e5 100644 (file)
@@ -174,13 +174,13 @@ extension DeviceVM{
                         UIApplication.shared.open(url) { (success) in
                             // 提示用户是否成功打开了设置
                             if success {
-                                print("成功跳转到蓝牙设置")
+                                Logger.debug("成功跳转到蓝牙设置")
                             } else {
-                                print("跳转失败")
+                                Logger.debug("跳转到设置失败")
                             }
                         }
                     } else {
-                        print("链接不可用")
+                        Logger.debug("链接不可用")
                     }
                 }
             }
index acf6b63..99da4a1 100644 (file)
@@ -33,7 +33,7 @@ class App{
         self.window?.rootViewController = BaseTC()
     }
     func goToLogin(){
-        if CCDevice.isJoy{
+        if CCConfig.appType == .deepchords{
             window?.rootViewController = BaseNC(rootViewController: LoginVC())
         }
         else{
index 27be12a..213499f 100644 (file)
@@ -61,7 +61,7 @@ class ForgetVC:BaseVC{
     }
     override func setupLayout(){
         logoImg.snp.makeConstraints { make in
-            if CCDevice.isJoy{
+            if CCConfig.appType == .deepchords{
                 make.left.equalToSuperview().inset(28)
                 make.top.equalTo(kNavBtm + 20)
                 make.centerX.equalToSuperview()
@@ -75,7 +75,7 @@ class ForgetVC:BaseVC{
         }
         bgView.snp.makeConstraints { make in
             make.left.right.equalToSuperview()
-            make.top.equalToSuperview().inset(CCDevice.isJoy ? 244:180)
+            make.top.equalToSuperview().inset(CCConfig.appType == .deepchords ? 244:180)
             make.bottom.equalToSuperview()
         }
         
index 155b0dd..6ddc35a 100644 (file)
@@ -48,7 +48,7 @@ class LoginVC:BaseVC{
     }
     override func setupLayout(){
         logoImg.snp.makeConstraints { make in
-            if CCDevice.isJoy{
+            if CCConfig.appType == .deepchords{
                 make.left.equalToSuperview().inset(28)
                 make.top.equalTo(kNavBtm + 20)
                 make.centerX.equalToSuperview()
index 05abbeb..c26e3ca 100644 (file)
@@ -56,7 +56,7 @@ class RegisterVC:BaseVC{
     }
     override func setupLayout(){
         logoImg.snp.makeConstraints { make in
-            if CCDevice.isJoy{
+            if CCConfig.appType == .deepchords{
                 make.left.equalToSuperview().inset(28)
                 make.top.equalTo(kNavBtm + 20)
                 make.centerX.equalToSuperview()
@@ -70,7 +70,7 @@ class RegisterVC:BaseVC{
         }
         bgView.snp.makeConstraints { make in
             make.left.right.equalToSuperview()
-            make.top.equalToSuperview().inset(CCDevice.isJoy ? 244:180)
+            make.top.equalToSuperview().inset(CCConfig.appType == .deepchords ? 244:180)
             make.bottom.equalToSuperview()
         }
         
index 396062a..d95e8d6 100644 (file)
@@ -53,7 +53,7 @@ class SmsLoginVC:BaseVC{
     }
     override func setupLayout(){
         logoImg.snp.makeConstraints { make in
-            if CCDevice.isJoy{
+            if CCConfig.appType == .deepchords{
                 make.left.equalToSuperview().inset(28)
                 make.top.equalTo(kNavBtm + 20)
                 make.centerX.equalToSuperview()
@@ -67,7 +67,7 @@ class SmsLoginVC:BaseVC{
         }
         bgView.snp.makeConstraints { make in
             make.left.right.equalToSuperview()
-            make.top.equalToSuperview().inset(CCDevice.isJoy ? 244:180)
+            make.top.equalToSuperview().inset(CCConfig.appType == .deepchords ? 244:180)
             make.bottom.equalToSuperview()
         }
         
index 57d11c1..d8c63d0 100644 (file)
@@ -26,7 +26,7 @@ class CodeView: BaseView {
             v.label.text = "点击获取".l10n
         }
         
-        inputBgView.backgroundColor = CCDevice.isJoy ? .rgb(0xF3F4F8): .color(.cellBg)
+        inputBgView.backgroundColor = CCConfig.appType == .deepchords ? .rgb(0xF3F4F8): .color(.cellBg)
         inputBgView.layer.cornerRadius = 12
         inputBgView.layer.masksToBounds = true
         
index ac24e91..1c1538c 100644 (file)
@@ -36,7 +36,7 @@ class CustomInputView: BaseView {
             v.leftViewMode = .never
         }
         
-        inputBgView.backgroundColor =  CCDevice.isJoy ? .rgb(0xF3F4F8): .color(.cellBg)
+        inputBgView.backgroundColor =  CCConfig.appType == .deepchords ? .rgb(0xF3F4F8): .color(.cellBg)
         inputBgView.layer.cornerRadius = 10
         inputBgView.layer.masksToBounds = true
         addSubviews([inputBgView])
index d67f256..8e8e066 100644 (file)
@@ -7,7 +7,7 @@
 
 class LoginBgView: BaseView {
     override func setupViews() {
-        if CCDevice.isJoy {
+        if CCConfig.appType == .deepchords {
             backgroundColor = UIColor.white
             yc.setCorners(withRoundedRect: CGRect(x: 0, y: 0, width: kScreenWid, height: kScreenHei - 244), roundingCorners: [.topLeft,.topRight], cornerRadii: CGSize(width: 50, height: 50))
         }
index b276027..8a1db58 100644 (file)
@@ -7,7 +7,7 @@
 
 class LoginHeaderView: BaseView {    
     override func setupViews() {
-        if CCDevice.isJoy {
+        if CCConfig.appType == .deepchords {
             let tipsLabel = UILabel()
 //            tipsLabel.backgroundColor = .red
 //            backgroundColor = .green
index 2f1b502..ee1dad2 100644 (file)
@@ -27,7 +27,7 @@ class PasswordView: BaseView {
         textField.rightView = btn
         textField.rightViewMode = .always
         
-        inputBgView.backgroundColor =  CCDevice.isJoy ? .rgb(0xF3F4F8): .color(.cellBg)
+        inputBgView.backgroundColor =  CCConfig.appType == .deepchords ? .rgb(0xF3F4F8): .color(.cellBg)
         inputBgView.layer.cornerRadius = 10
         inputBgView.layer.masksToBounds = true
         addSubviews([inputBgView])
index 9244bf3..2910acc 100644 (file)
@@ -25,7 +25,7 @@ class RegionView: BaseView {
         addSubviews([inputBgView])
         inputBgView.addSubviews([titleLabel,valeLabel,arrrowIcon])
         
-        inputBgView.backgroundColor =  CCDevice.isJoy ? .rgb(0xF3F4F8): .color(.cellBg)
+        inputBgView.backgroundColor =  CCConfig.appType == .deepchords ? .rgb(0xF3F4F8): .color(.cellBg)
         inputBgView.layer.cornerRadius = 10
         inputBgView.layer.masksToBounds = true
         inputBgView.yc.addTap(target: self, action: #selector(tapAction))
index 7f4a5fc..0be85f2 100644 (file)
@@ -64,7 +64,7 @@ class FeekbackVC:BaseVC{
     }
     @objc func chatAction(){
         App.shared.popToRootPage()
-        if CCDevice.isJoy {
+        if CCConfig.appType == .deepchords {
             App.shared.tabController?.selectedIndex = 3
         }
         else{
index 74b9d36..66021e1 100644 (file)
@@ -66,7 +66,7 @@ final class FileDownloadVC: BaseVC {
     override func setupData() {
         let lan = CCConfig.appLanguage.yonghuCode
 //        let fileUrl = "https://dc-cloud-pub.tos-cn-guangzhou.volces.com/protocol/\(lan)/\(type.rawValue).pdf"
-        if CCDevice.isJoy{
+        if CCConfig.appType == .deepchords{
             let fileUrl =  CCConfig.yonghuBaseURL + "/protocol/\(lan)/\(type.rawValue).pdf"
             self.dowmload(url:fileUrl)
         }
index ee2ab6f..daa0102 100644 (file)
@@ -26,13 +26,7 @@ class RevokeVC:BaseVC{
             v.font = .regular(14)
             v.textColor = .color(.level2)
             v.numberOfLines = 0
-            var text = ""
-            if CCDevice.isJoy{
-                 text = "请您确保您是有权进行本撤回同意隐私政策操作的相关当事人。撤回同意隐私政策,您将放弃以下资产或者权益:\n\n1.数据清空\n将会停止收集您的个人信息。您使用DeepChords应用过程中产生的数据将被清空;手机中DeepChords应用的缓存数据将被清除。\n\n2.设备解除绑定\nDeepChords账号中,所有设备会与您当前登录的账号解除绑定,并清除设备之前存储在服务器的数据。存储在物理设备中的数据请通过人工本地物理重置来清除。如果您需要重新使用设备,需要您再次进行绑定并且重新授权。\n\n3.其他\n此举还将撤回您对用户协议的同意,并退出DeepChords应用。\n\n请您知悉,撤回同意隐私政策不代表撤回同意前的相关行为和责任得到豁免或减轻。若您需要重新在该账号管理设备,需要您重新授权并绑定。请谨慎操作!".l10n
-            }
-            else{
-                 text = "请您确保您是有权进行本撤回同意隐私政策操作的相关当事人。撤回同意隐私政策,您将放弃以下资产或者权益:\n\n1.数据清空\n将会停止收集您的个人信息。您使用PLAYBOY应用过程中产生的数据将被清空;手机中PLAYBOY应用的缓存数据将被清除。\n\n2.设备解除绑定\nPLAYBOY账号中,所有设备会与您当前登录的账号解除绑定,并清除设备之前存储在服务器的数据。存储在物理设备中的数据请通过人工本地物理重置来清除。如果您需要重新使用设备,需要您再次进行绑定并且重新授权。\n\n3.其他\n此举还将撤回您对用户协议的同意,并退出PLAYBOY应用。\n\n请您知悉,撤回同意隐私政策不代表撤回同意前的相关行为和责任得到豁免或减轻。若您需要重新在该账号管理设备,需要您重新授权并绑定。请谨慎操作!".l10n
-            }
+            let text = CCConfig.revokeText.l10n
 
             
             let attributedString = NSMutableAttributedString(string: text)
index a120789..df820fe 100644 (file)
@@ -68,7 +68,7 @@ class MineUserInfoView: BaseView {
     }
     
     override func setupLayout() {
-//        if CCDevice.isJoy{
+//        if CCConfig.appType == .deepchords{
 //            titleLabel.snp.makeConstraints { (m) in
 //                m.top.equalToSuperview().inset(10)
 //                m.left.equalToSuperview().inset(38)
index 4c05333..f41776d 100644 (file)
@@ -39,10 +39,10 @@ class UserInfoVC: BaseVC{
         refreshUI()
     }
     override func setupData() {
-        if CCDevice.isJoy {
+        if CCConfig.appType == .deepchords {
             list = [.avatar,.nickName,.gender,.birthday,.height,.weight,.hobbies,.area]
         }
-        else{
+        else {
             list = [.avatar,.nickName,.gender,.area]
         }
         tableView.reloadData()
index f028ba9..1b7114b 100644 (file)
@@ -29,7 +29,7 @@ class CustomEqVC:BaseVC{
         bgView.addSubviews([resetBtn,titleLabel,unitLabel,valueLabel1,valueLabel2,valueLabel3])
         
         bgView.do { v in
-            v.backgroundColor = CCDevice.isJoy ? UIColor.white:UIColor.rgb(0x242424)
+            v.backgroundColor = CCConfig.appType == .deepchords ? UIColor.white:UIColor.rgb(0x242424)
             v.yc.setCornerRadius(12.fitR)
         }
         sliderBgView.do { v in
index c0bbb4f..6a2dc64 100644 (file)
@@ -25,7 +25,7 @@ class FindVC:BaseVC{
     }
     
     override func setupViews() {
-        self.navBar.title = CCDevice.isJoy ? "查找耳机".l10n:"查找眼镜".l10n
+        self.navBar.title = CCConfig.appType == .playboy ? "查找眼镜".l10n:"查找耳机".l10n
         navBar.backgroundColor = .clear
         view.backgroundColor = .color(.bgColor)
         view.addSubviews([titleLabel,desLabel,leftRadar,rightRadar,leftBtn,rightBtn])
index e4c7db2..d175ce1 100644 (file)
@@ -18,7 +18,7 @@ class ModeFindView: BaseView {
         
         icon.image = UIImage(named: "find_icon")
         titleLabel.do { v in
-            v.text = CCDevice.isJoy ? "查找耳机".l10n:"查找眼镜".l10n
+            v.text = CCConfig.appType == .playboy ? "查找眼镜".l10n:"查找耳机".l10n
             v.font = .bold(16)
             v.textColor = .color(.level1)
             
index 4cc48cb..71d92aa 100644 (file)
@@ -69,7 +69,7 @@ class RSChatCell:BaseTableViewCell{
         didSet{
             originalLabel.text = data.content
             if data.isSend {
-                bgView.backgroundColor = CCDevice.isJoy ? .color(.theme) : UIColor.color(.cellBg)
+                bgView.backgroundColor = .color(.theme)
                 originalLabel.textColor = .white
                 
                 icon.snp.remakeConstraints { make in
@@ -86,7 +86,7 @@ class RSChatCell:BaseTableViewCell{
             else{
                 bgView.backgroundColor = .color(.cellBg)
                 originalLabel.textColor = .color(.level1)
-                icon.image = CCDevice.isJoy ? UIImage(named: "logo_2"):UIImage(named: "logo_4")
+                icon.image =  UIImage(named: "logo_2")
                 icon.snp.remakeConstraints { make in
                     make.size.equalTo(36)
                     make.top.equalToSuperview().inset(16)
index 58febd3..827ec62 100644 (file)
@@ -20,7 +20,7 @@ class BrokenLineView: UIView {
     
     private func setupShapeLayer() {
         shapeLayer = CAShapeLayer()
-        shapeLayer.strokeColor = CCDevice.isJoy ? UIColor.rgb(0x93C6EC).cgColor: UIColor.color(.separateLine).cgColor
+        shapeLayer.strokeColor = CCConfig.appType == .deepchords ? UIColor.rgb(0x93C6EC).cgColor: UIColor.color(.separateLine).cgColor
         shapeLayer.fillColor = UIColor.clear.cgColor
         shapeLayer.lineWidth = 0.5
         shapeLayer.lineDashPattern = [NSNumber(value: 5.0), NSNumber(value: 3.0)]
index ca901c2..4eb5543 100644 (file)
@@ -18,7 +18,7 @@ enum CustomButtonStyle:Int{
 
 class CustomButton: UIButton {
     func set(title:String,font:UIFont = .bold(14),style:CustomButtonStyle = .theme1, target: Any?, action: Selector) {
-        if CCDevice.isJoy{
+        if CCConfig.appType == .deepchords{
             setTitle(title, for: .normal)
             addTarget(target, action: action, for: .touchUpInside)
             layer.cornerRadius = 12
index e5c0260..4ed5c50 100644 (file)
@@ -33,7 +33,7 @@ class LogVC: BaseVC {
     override func viewDidAppear(_ animated: Bool) {
         super.viewDidAppear(animated)
         
-        if CCDevice.isJoy {
+        if CCConfig.appType == .deepchords {
             
         }
         else{
index bcbfb99..fc00aa3 100644 (file)
@@ -76,7 +76,7 @@ class PopTextField: BasePresentView2 {
             v.text = "保存录音".l10n
         }
         textFiledBg.do { v in
-            if CCDevice.isJoy{
+            if CCConfig.appType == .deepchords{
                 v.yc.setBorder(width: 2, color: .color(.theme), radius: 10)
             }
             else{
@@ -103,7 +103,7 @@ class PopTextField: BasePresentView2 {
         okButton.do { (v) in
             v.setTitle("确定".l10n, for: .normal)
             v.titleLabel?.font = .bold(16)
-            if CCDevice.isJoy{
+            if CCConfig.appType == .deepchords{
                 v.setTitleColor(.white, for: .normal)
                 v.backgroundColor =  UIColor.color(.theme)
             }
index b1f08a0..d773890 100644 (file)
@@ -34,7 +34,7 @@ enum RecordTipsType:Int{
         }
     }
     var des1:String{
-        if CCDevice.isJoy {
+        if CCConfig.appType == .deepchords {
             switch self {
             case .dialog:
                 return "一方手持手机,一方戴上耳机,对手机发言时,耳机播放译文,对耳机发言时,手机播放译文".l10n
@@ -56,7 +56,7 @@ enum RecordTipsType:Int{
         }
     }
     var des2:String{
-        if CCDevice.isJoy {
+        if CCConfig.appType == .deepchords {
             switch self {
             case .dialog:
                 return "- 情景示例 -\n张张靠近手机讲中文,对方耳机播放英语".l10n
@@ -205,7 +205,7 @@ class RecordTipsView: BasePresentView {
             v.numberOfLines = 0
         }
         actionbtn.do { v in
-            if CCDevice.isJoy{
+            if CCConfig.appType == .deepchords{
                 v.backgroundColor = .color(.theme)
                 v.setTitleColor(.white, for: .normal)
             }