注册
iOS

KTV歌词解析, 音准评分组件

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

0 个评论

要回复文章请先登录注册