原文:C# WPF 歌词控件(支持逐字定位描色效果)

之前做了一个模仿网易云歌词的控件,实现了加载网易云歌词并能随音乐播放进度定位歌词。今天呢将在这个控件的基础上增加逐字定位描色功能,如下图效果(QQ音乐PC)所示:

我所使用的实现方法很简单粗暴,把每句歌词每个字切开,单独显示在一个描色的控件中,然后拼成一行完整的歌词,随音乐播放进度去找相应的字进行描色。

而最重要的描色功能是怎么实现的呢?

答案是:使用ClipToBounds属性

当控件ClipToBounds属性为TRUE时,超出控件范围的内容将会被裁剪掉不显示。现在你应该能明白描色功能怎么实现了吧?

在一个自定义控件中有两个Label,设置一个为置顶(ZINDEX最大)显示并加上颜色,给顶部的这个Label设置ClipToBounds属性为TRUE,然后默认顶部的Label宽度为0,描色的过程就把顶部的Label宽度慢慢增加。

最终完成的效果如下图,为了更直观地看到效果我给两个Label都加上了不同的背景颜色:

当然描色时间我没调好。当进度到达某个字时就调用那个字的控件执行一个宽度动画,动画目标就是置顶的Label,动画时间就是唱这个字所花费的时间。

这里就不把项目所有代码贴出来了,因为都是些简单的调用和判断而已,只贴描色的部分代码。

歌词负责描色的控件如下,每个字都单独显示在这个控件中

<Grid Background="Yellow">
<!--描色层-->
<Canvas Background="Black" HorizontalAlignment="Left" ClipToBounds="True" Name="ColorLayer" Panel.ZIndex="1">
<Label Name="ColorWordLabel" Foreground="Red">测</Label>
</Canvas>
<Label Name="WordLabel" >测</Label>
</Grid>
double tovalue = WordLabel.ActualWidth;
widthAnimation.From = ;
widthAnimation.To = tovalue;
widthAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(Time));
ColorLayer.BeginAnimation(WidthProperty, widthAnimation);

后台代码的描色其实就是播放一个动画,动画操作了带有颜色的字体控件宽度,也就是ColorLayer控件,宽度从From 0开始到 To WordLabel的实际宽度,播放所需时间Duration是Time(毫秒单位),就这几句代码完成了描色的过程。

完整项目下载:

点击下载

要知道普通的LRC格式歌词是没有记录每个字的吟唱时间的,而QQ音乐、酷狗音乐的歌词文件都经过不同算法的加密保护,没法直接读取,所以在这个项目中我将自己创建一个歌词格式。

那么歌词文件必须要包含以下信息:

1,完整歌词;

2,每句歌词的开始时间;

3,每句歌词每个字的吟唱耗时;

为了方便读写将使用JSON的数据格式来保存。

计划:

  1. 制作一个简单的描色歌词制作工具(参考酷狗音乐的歌词制作工具),在读取普通的LRC歌词后能可视化地去编辑每个字的吟唱时间,生成项目专用的歌词文件; []
  2. 单独分离成一个控件; [√]
  3. 性能优化; [×]

------------------------------------------------------------------------------------------------------

经过不断地缝缝补补和复制粘贴,已经完成了计划中的1、2。(2018年4月28日

首先说第1项,歌词制作工具,在播放音乐的同时调整描色的进度,将吟唱时间记录到歌词数据中,导出控件专用的NRC歌词数据格式方便调用。制作描色的时候决定了歌词描色的准确与否,而且还必须得比较熟悉歌曲才能制作出完美的描色歌词,这点有待改进。

所有歌词都调整描色完毕之后点击导出NRC文件即可完成制作,如果在没有将所有字描色完成之前导出会导致歌词显示控件无法正常描色定位。操作方式跟酷狗的歌词制作工具差不多,按键盘上键切到上一个字,下键切到下一个字。酷狗歌词制作工具制作的描色歌词好像会进行后期计算调整,更加准确,以后会想办法实现。

歌词制作工具的调用步骤是:

1,载入歌词(可以是网易云的或者是NRC的)

2,设置音乐的路径

然后启动工具点击play就可以开始制作了(最好是一遍过,反复调整的话很麻烦)

最后是我用制作工具制作的NRC歌词播放效果演示:

歌词显示已经单独分离成一个控件了,调用方法如下:

1,加载歌词:

控件.LoadNRC(歌词字符串);//歌词字符串可以是网易云的也可以是NRC的

2,在播放音乐开始时实时调用此方法更新歌词:

控件.UpdatePositionTime(播放进度总毫秒);

3,调整音乐进度后要调用此方法重新定位歌词:

控件.ResetPositionTime(播放进度总毫秒);

4,暂停音乐时调用此方法(同时不要再UpdatePositionTime):

控件.Pause();

控件源码、调用示例源码、歌词制作工具源码请通过Github获取:

https://github.com/NaiveNET/NaiveRC

C# WPF 歌词控件(支持逐字定位描色效果)的更多相关文章

  1. WPF ItemsControl 控件支持鼠标滚轮滑动

    此文章意在解决在WPF中ItemsControl类型的集合控件支持鼠标滚轮操作,并可控制滚动的速度. 第一步:给ItemsControl添加滚轮事件. this.listBox.AddHandler( ...

  2. C# WPF 低仿网易云音乐(PC)歌词控件

    原文:C# WPF 低仿网易云音乐(PC)歌词控件 提醒:本篇博客记录了修改的过程,废话比较多,需要项目源码和看演示效果的直接拉到文章最底部~ 网易云音乐获取歌词的api地址 http://music ...

  3. Qt实现表格控件-支持多级列表头、多级行表头、单元格合并、字体设置等

    目录 一.概述 二.效果展示 三.定制表头 1.重写数据源 2.重写QHeaderView 四.设置属性 五.相关文章 原文链接:Qt实现表格控件-支持多级列表头.多级行表头.单元格合并.字体设置等 ...

  4. WPF界面开发者注意啦!Scheduler控件支持时区功能了,你get了吗

    DevExpress广泛应用于ECM企业内容管理. 成本管控.进程监督.生产调度,在企业/政务信息化管理中占据一席重要之地.通过DevExpress WPF Controls,您能创建有着强大互动功能 ...

  5. 一款开源免费的WPF图表控件ModernuiCharts

    一款简洁好看的Chart控件  支持WPF.silverlight.Windows8  ,基本够用,主要是开源免费的.(商业控件ComponentOne for WPF要4w多呢) This proj ...

  6. WPF布局控件常用属性介绍

    WPF布局控件常用属性介绍 其它 | 作者:慧都控件网 | 2011-04-06 13:41:57| 阅读 0次 有用(0) 评论(0)   概述:WPF布局控件都是派生自System.Windows ...

  7. WPF第三方控件盘点

    WPF统一的编程模型.语言和框架,实现了界面设计人员和开发人员工作可以分离的境界,鉴于WPF强大的优势,且一直是开发者关注的地方,下面和大家分享基于WPF项目开发需要用到的第三方控件,包括业界最受好评 ...

  8. QRowTable表格控件-支持hover整行、checked整行、指定列排序等

    目录 一.开心一刻 二.嘴一嘴 三.效果展示 四.浅谈实现 五.自定义数据源 1.data函数 2.flags函数 六.自定义视图 1.目的 2.问题分析 七.测试 八.相关文章 原文链接:QRowT ...

  9. WPF滑块控件(Slider)的自定义样式

    前言 每次开发滑块控件的样式都要花很久去读样式代码,感觉有点记不牢,所以特此备忘. 自定义滑块样式 首先创建项目,添加Slider控件. 然后获取Slider的Window样式,如下图操作. 然后弹出 ...

随机推荐

  1. iTestin云测工具

    软件概述 iTestin是免费服务移动App开发者的真机自动化云测试客户端工具.基于真实的智能终端设备录制一个测试脚本然后运行,并输出运行结果.覆盖Android和iOS两大设备平台,支持Pad/Ph ...

  2. libSVM介绍(二)

    鉴于libSVM中的readme文件有点长,并且,都是採用英文书写,这里,我把当中重要的内容提炼出来,并给出对应的样例来说明其使用方法,大家能够直接參考我的代码来调用libSVM库. 第一部分,利用l ...

  3. HDMI ARC功能详解及应用介绍

    http://www.icpcw.com/Parts/Peripheral/Skill/3260/326044_2.htm [电脑报在线]很多用户和读者购买了电视以后,都发现自己电视的HDMI接口上经 ...

  4. 又在折腾cygwin

    apt-cyg https://github.com/transcode-open/apt-cyg/blob/master/README.md cygwin 163镜像 http://mirrors. ...

  5. ArcGIS Spatial Query

    Creates a spatial query which performs a spatial search for features in the supplied feature class a ...

  6. 观CSDN站点小Bug有感

            今天早上在浏览博客的时候偶然发现CSDN博客的数据出现了异常,我也是头一次看到这么明显的Bug.详细什么表现呢?先来看个截图.例如以下:             常常看CSDN博客的人 ...

  7. php 下载服务器上存在的文件 到本地

    Header("Location: http://www.weiyunyi.com/Public/youbu_score_template.xls");

  8. rabbitmq.config详细配置参数

    原文:rabbitmq.config详细配置参数 rabbitmq.config详细配置参数 详细使用方法请点击:http://blog.csdn.net/Super_RD/article/detai ...

  9. sed学习总结

    sed学习总结 sed工作流 测试文件:cat employee.txt 101,John Doe,CEO 102,Jason Smith,IT Manager 103,Raj Reddy,Sysad ...

  10. Qt5 编译 & 打包依赖dll发布

    十年前学C++的时候,无聊到把windows 文件夹下几乎所有的*.dll 都看过一遍.偶尔在程序运行时看到缺少 *.dll 的提示,都会直接找出来解决. 随着“开发平台”和“编译器”版本的逐年升级, ...