@@ -65,16 +65,13 @@ import AgoraRtcKit
65
65
66
66
/// 加入合唱失败原因
67
67
@objc public enum KTVJoinChorusFailReason : Int {
68
- case musicPreloadFail //歌曲预加载失败
69
68
case musicOpenFail //歌曲打开失败
70
69
case joinChannelFail //加入ex频道失败
71
- case musicPreloadFailAndJoinChannelFail
72
70
}
73
71
74
72
@objc public enum KTVType : Int {
75
73
case normal
76
74
case singbattle
77
- case cantata
78
75
case singRelay
79
76
}
80
77
@@ -105,17 +102,6 @@ import AgoraRtcKit
105
102
func onMusicLoadFail( songCode: Int , reason: KTVLoadSongFailReason )
106
103
}
107
104
108
-
109
- //public protocol KTVJoinChorusStateListener: NSObjectProtocol {
110
- //
111
- // /// 加入合唱成功
112
- // func onJoinChorusSuccess()
113
- //
114
- // /// 加入合唱失败
115
- // /// - Parameter reason: 失败原因
116
- // func onJoinChorusFail(reason: KTVJoinChorusFailReason)
117
- //}
118
-
119
105
@objc public protocol KTVLrcViewDelegate : NSObjectProtocol {
120
106
func onUpdatePitch( pitch: Float )
121
107
func onUpdateProgress( progress: Int )
@@ -160,6 +146,73 @@ import AgoraRtcKit
160
146
func onMusicPlayerProgressChanged( with progress: Int )
161
147
}
162
148
149
+ // 大合唱中演唱者互相收听对方音频流的选路策略
150
+ enum GiantChorusRouteSelectionType : Int {
151
+ case random = 0 // 随机选取几条流
152
+ case byDelay = 1 // 根据延迟选择最低的几条流
153
+ case topN = 2 // 根据音强选流
154
+ case byDelayAndTopN = 3 // 同时开始延迟选路和音强选流
155
+ }
156
+
157
+ // 大合唱中演唱者互相收听对方音频流的选路配置
158
+ @objc public class GiantChorusRouteSelectionConfig : NSObject {
159
+ let type : GiantChorusRouteSelectionType // 选路策略
160
+ let streamNum : Int // 最大选取的流个数(推荐6)
161
+
162
+ init ( type: GiantChorusRouteSelectionType , streamNum: Int ) {
163
+ self . type = type
164
+ self . streamNum = streamNum
165
+ }
166
+ }
167
+
168
+ @objc open class GiantChorusConfiguration : NSObject {
169
+ var appId : String
170
+ var rtmToken : String
171
+ weak var engine : AgoraRtcEngineKit ?
172
+ var channelName : String
173
+ var localUid : Int = 0
174
+ var chorusChannelName : String
175
+ var chorusChannelToken : String
176
+ var maxCacheSize : Int = 10
177
+ var musicType : loadMusicType = . mcc
178
+ var audienceChannelToken : String = " "
179
+ var musicStreamUid : Int = 0
180
+ var musicChannelToken : String = " "
181
+ var routeSelectionConfig : GiantChorusRouteSelectionConfig = GiantChorusRouteSelectionConfig ( type: . byDelay, streamNum: 6 )
182
+ var mccDomain : String ?
183
+ @objc public
184
+ init ( appId: String ,
185
+ rtmToken: String ,
186
+ engine: AgoraRtcEngineKit ,
187
+ localUid: Int ,
188
+ audienceChannelName: String ,
189
+ audienceChannelToken: String ,
190
+ chorusChannelName: String ,
191
+ chorusChannelToken: String ,
192
+ musicStreamUid: Int ,
193
+ musicChannelToken: String ,
194
+ maxCacheSize: Int ,
195
+ musicType: loadMusicType ,
196
+ routeSelectionConfig: GiantChorusRouteSelectionConfig ,
197
+ mccDomain: String ?
198
+ ) {
199
+ self . appId = appId
200
+ self . rtmToken = rtmToken
201
+ self . engine = engine
202
+ self . channelName = audienceChannelName
203
+ self . localUid = localUid
204
+ self . chorusChannelName = chorusChannelName
205
+ self . chorusChannelToken = chorusChannelToken
206
+ self . maxCacheSize = maxCacheSize
207
+ self . musicType = musicType
208
+ self . audienceChannelToken = audienceChannelToken
209
+ self . musicStreamUid = musicStreamUid
210
+ self . musicChannelToken = musicChannelToken
211
+ self . routeSelectionConfig = routeSelectionConfig
212
+ self . mccDomain = mccDomain
213
+ }
214
+ }
215
+
163
216
@objc open class KTVApiConfig : NSObject {
164
217
var appId : String
165
218
var rtmToken : String
@@ -171,7 +224,7 @@ import AgoraRtcKit
171
224
var type : KTVType = . normal
172
225
var maxCacheSize : Int = 10
173
226
var musicType : loadMusicType = . mcc
174
- var isDebugMode : Bool = false
227
+ var mccDomain : String ?
175
228
@objc public
176
229
init ( appId: String ,
177
230
rtmToken: String ,
@@ -181,9 +234,9 @@ import AgoraRtcKit
181
234
chorusChannelName: String ,
182
235
chorusChannelToken: String ,
183
236
type: KTVType ,
184
- maxCacheSize: Int ,
185
237
musicType: loadMusicType ,
186
- isDebugMode: Bool
238
+ maxCacheSize: Int ,
239
+ mccDomain: String ?
187
240
) {
188
241
self . appId = appId
189
242
self . rtmToken = rtmToken
@@ -195,17 +248,18 @@ import AgoraRtcKit
195
248
self . type = type
196
249
self . maxCacheSize = maxCacheSize
197
250
self . musicType = musicType
198
- self . isDebugMode = isDebugMode
251
+ self . mccDomain = mccDomain
199
252
}
253
+
254
+
200
255
}
201
256
202
257
/// 歌曲加载配置信息
203
258
@objcMembers open class KTVSongConfiguration : NSObject {
204
259
public var songIdentifier : String = " "
205
- public var autoPlay : Bool = false //是否加载完成自动播放
206
260
public var mainSingerUid : Int = 0 //主唱uid
207
261
public var mode : KTVLoadMusicMode = . loadMusicAndLrc
208
-
262
+ public var songCutter : Bool = false
209
263
func printObjectContent( ) -> String {
210
264
var content = " "
211
265
@@ -234,10 +288,9 @@ public typealias JoinExChannelCallBack = ((Bool, KTVJoinChorusFailReason?)-> Voi
234
288
235
289
@objc public protocol KTVApiDelegate : NSObjectProtocol {
236
290
237
- /// 初始化
238
- /// - Parameter config: <#config description#>
239
- init ( config: KTVApiConfig )
291
+ @objc optional func createKtvApi( config: KTVApiConfig ) //小合唱必选
240
292
293
+ @objc optional func createKTVGiantChorusApi( config: GiantChorusConfiguration ) //大合唱必选
241
294
242
295
/// 订阅KTVApi事件
243
296
/// - Parameter ktvApiEventHandler: <#ktvApiEventHandler description#>
@@ -410,4 +463,6 @@ public typealias JoinExChannelCallBack = ((Bool, KTVJoinChorusFailReason?)-> Voi
410
463
*/
411
464
412
465
func removeMusic( songCode: Int )
466
+
467
+ @objc func didAudioMetadataReceived( uid: UInt , metadata: Data )
413
468
}
0 commit comments