阅读 211

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


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐