KTV歌词解析, 音准评分组件
KTV歌词解析, 音准评分组件
介绍
支持XML歌词解析, LRC歌词解析, 解决了多行歌词进度渲染的问题, 评分根据人声实时计算评分
欢迎各位大佬提交PR, 有问题提issue, 我会不定时fix
Github
使用方法
初始化
private lazy var lrcScoreView: AgoraLrcScoreView = { let lrcScoreView = AgoraLrcScoreView(delegate: self) lrcScoreView.config.scoreConfig.scoreViewHeight = 100 lrcScoreView.config.scoreConfig.emitterColors = [.systemPink] lrcScoreView.config.lrcConfig.lrcFontSize = .systemFont(ofSize: 15) return lrcScoreView }() 复制代码
配置属性
组件base配置
/// 评分组件配置 public var scoreConfig: AgoraScoreItemConfigModel = .init() /// 歌词组件配置 public var lrcConfig: AgoraLrcConfigModel = .init() /// 是否隐藏评分组件 public var isHiddenScoreView: Bool = false /// 背景图 public var backgroundImageView: UIImageView? /// 评分组件和歌词组件之间的间距 默认: 0 public var spacing: CGFloat = 0 复制代码
歌词配置
/// 无歌词提示文案 public var tipsString: String = "纯音乐,无歌词" /// 提示文字颜色 public var tipsColor: UIColor = .black /// 提示文字大小 public var tipsFont: UIFont = .systemFont(ofSize: 17) /// 分割线的颜色 public var separatorLineColor: UIColor = .lightGray /// 是否隐藏分割线 public var isHiddenSeparator: Bool = false /// 默认歌词背景色 public var lrcNormalColor: UIColor = .gray /// 高亮歌词背景色 public var lrcHighlightColor: UIColor = .white /// 实时绘制的歌词颜色 public var lrcDrawingColor: UIColor = .orange /// 歌词文字大小 默认: 15 public var lrcFontSize: UIFont = .systemFont(ofSize: 15) /// 歌词高亮文字缩放大小 默认: 1.1 public var lrcHighlightScaleSize: Double = 1.1 /// 歌词左右两边间距 public var lrcLeftAndRightMargin: CGFloat = 15 /// 等待开始圆点背景色 默认: 灰色 public var waitingViewBgColor: UIColor? = .gray /// 等待开始圆点大小 默认: 10 public var waitingViewSize: CGFloat = 10 /// 是否可以拖动歌词 默认: true public var isDrag: Bool = true 复制代码
评分配置
/// 评分视图高度 默认:100 public var scoreViewHeight: CGFloat = 100 /// 圆的起始位置: 默认: 100 public var innerMargin: CGFloat = 100 /// 线的高度 默认:10 public var lineHeight: CGFloat = 10 /// 线的宽度 默认: 120 public var lineWidht: CGFloat = 120 /// 默认线的背景色 public var normalColor: UIColor = .gray /// 匹配后线的背景色 public var highlightColor: UIColor = .orange /// 分割线的颜色 public var separatorLineColor: UIColor = .systemPink /// 是否隐藏垂直分割线 public var isHiddenVerticalSeparatorLine: Bool = false /// 是否隐藏上下分割线 public var isHiddenSeparatorLine: Bool = false /// 游标背景色 public var cursorColor: UIColor = .systemPink /// 游标的宽 public var cursorWidth: CGFloat = 20 /// 游标的高 public var cursorHeight: CGFloat = 20 /// 是否隐藏粒子动画效果 public var isHiddenEmitterView: Bool = false /// 使用图片创建粒子动画 public var emitterImages: [UIImage]? /// emitterImages为空默认使用颜色创建粒子动画 public var emitterColors: [UIColor] = [.red] /// 尾部动画图片 public var tailAnimateImage: UIImage? /// 尾部动画颜色 public var tailAnimateColor: UIColor? = .yellow /// 评分默认分数: 50 public var defaultScore: Double = 50 复制代码
事件回调
歌词Delegate
weak var delegate: AgoraLrcViewDelegate? protocol AgoraLrcViewDelegate { /// 当前播放器的时间 单位: 秒 func getPlayerCurrentTime() -> TimeInterval /// 获取歌曲总时长 func getTotalTime() -> TimeInterval /// 设置播放器时间 @objc optional func seekToTime(time: TimeInterval) /// 当前正在播放的歌词和进度 @objc optional func currentPlayerLrc(lrc: String, progress: CGFloat) } 复制代码
歌词下载Delegate
weak var downloadDelegate: AgoraLrcDownloadDelegate? protocol AgoraLrcDownloadDelegate { /// 开始下载 @objc optional func beginDownloadLrc(url: String) /// 下载完成 @objc optional func downloadLrcFinished(url: String) /// 下载进度 @objc optional func downloadLrcProgress(url: String, progress: Double) /// 下载失败 @objc optional func downloadLrcError(url: String, error: Error?) /// 下载取消 @objc optional func downloadLrcCanceld(url: String) /// 开始解析歌词 @objc optional func beginParseLrc() /// 解析歌词结束 @objc optional func parseLrcFinished() } 复制代码
评分Delegate
weak var scoreDelegate: AgoraKaraokeScoreDelegate? protocol AgoraKaraokeScoreDelegate { /// 分数实时回调 /// score: 每次增加的分数 /// cumulativeScore: 累加分数 /// totalScore: 总分 @objc optional func agoraKaraokeScore(score: Double, cumulativeScore: Double, totalScore: Double) } 复制代码
集成方式
本地pod引入,暂时使用本地pod 待后续发布cocoapods
把 'AgoraLrcScoreView' 复制到根目录, 执行pod
pod 'AgoraLrcScore', :path => "AgoraLrcScoreView"
作者:莫烦恼
链接:https://juejin.cn/post/7054443857928257550