C#winfrom播放器动态加载歌词
上周我们进行了结业项目答辩,是播放器项目。有一个关于播放器变唱歌边加载歌词的方法特别有意思,像酷狗那样子歌词和歌曲同步滚播的样子。
这里的工具是Visual Studio 2013,使用语言是C#和.net技术。
首先我们使用File.Exists(@"文件路径")判断lrc歌词文件是否存在,如果存在的话读取lrc文件。
这里可以用正则表达式,也可以用一个二维数组或两个数组。本文是用的二维数组。
lrc文件也是文本文件,一句歌词就是一行文本。简单点理解就像数据库中的DataReader,一次读取一行文本(记录),然后我们使用substring方法分别截取到文本内的时间和歌词,放到数组中。
文件大概就是这样子的。
我们读取到了之后,播放器有一个属性,Ctlcontrols.currentPositionString:string; 获取当前进度,返回一个字符串格式的值。如“00:23”
我们拿到这个值和“保存时间”的数组里的值进行匹配,判断media player播放的时间=此行时间,则让此行高亮。(用定时器一直刷新,保持同步)
如此,就可以达到像酷狗那样子歌词和歌曲同步滚播的样子了。
最后附上源代码
#region 歌词
string[,] lrc = new string[, ];//保存歌词和当前进度
/// <summary>
/// 读取并显示歌词
/// </summary>
public void ShowLrc()
{
if (this.axWindowsMediaPlayer2.playState == WMPLib.WMPPlayState.wmppsPlaying)
{
try
{
//using:作用是使用完成后自动释放内存
//StreamReader:作用是用特定的编码从字节流中读取字节
using (StreamReader sr = new StreamReader(KTVUtil.songPath + @"\" + PlayList.PlayingSongName() + ".lrc", Encoding.Default))
{
String line;
//循环读取每一行歌词
while ((line = sr.ReadLine()) != null)
{
//将读取到的歌词存放到数组中
for (int i = ; i < ; i++)
{
if (lrc[, i] == null)
{
lrc[, i] = line.Substring(, line.Length - );
break;
}
}
//将读取到的歌词时间存放到数组中
for (int i = ; i < ; i++)
{
if (lrc[, i] == null)
{
lrc[, i] = line.Substring(, );
break;
}
}
}
/***********动态显示歌词***************/
//获取播放器当前进度
string numss = this.axWindowsMediaPlayer2.Ctlcontrols.currentPositionString;
for (int i = ; i < ; i++)
{
if (lrc[, i].Equals(numss))
{
this.lblLrc.Text = lrc[, i];
}
//else
//{
// this.lblLrc.Text = "************";
//}
}
}
}
catch (Exception ex)
{
//MessageBox.Show("异常:" + ex.Message);
}
}
}
/// <summary>
/// 刷新歌词
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void timer5_Tick(object sender, EventArgs e)
{
ShowLrc();
}
#endregion
ps.大家有好的建议欢迎提出:)
C#winfrom播放器动态加载歌词的更多相关文章
- 使用js加载器动态加载外部Javascript文件
原文:http://www.cnblogs.com/xdp-gacl/p/3927417.html 今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js var ...
- JavaScript学习总结(十九)——使用js加载器动态加载外部Javascript文件
今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下: JsLoader.js 1 var MiniSite=new Object(); 2 /** 3 * 判断浏览器 4 */ 5 M ...
- 使用js加载器动态加载外部js、css文件
let MiniSite = new Object(); /** * 判断浏览器 */ MiniSite.Browser = { ie: /msie/.test(window.navigator.us ...
- 苹果cms如何添加播放器预加载和缓冲广告
1,来到系统后台>>系统>>播放器参数设置 可以看到添加预加载和缓冲广告的输入框.文件格式为html 自己写一个html的网页上传到网站进行调用即可.链接前面不要加http或 ...
- winfrom 界面时间动态加载
Timer time1 = new Timer(); private void time1_Tick(object sender, EventArgs e) { lTime.Text = DateTi ...
- Unity动态加载和内存管理(三合一)
原址:http://game.ceeger.com/forum/read.php?tid=4394#info 最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Re ...
- 动态加载框架DL分析
动态加载框架DL分析 插件化开发,主要解决三个问题1.动态加载未安装的apk,dex,jar等文件2.activity生命周期的问题,还有service3.Android的资源调用的问题 简单说一下怎 ...
- [转载] Android动态加载Dex机制解析
本文转载自: http://blog.csdn.net/wy353208214/article/details/50859422 1.什么是类加载器? 类加载器(class loader)是 Java ...
- 关于实现Extjs动态加载类的方式实现
Extjs4以前的版本没有动态加载类的方式,这样开发程序的时候加载很多的js会导致加载变慢,由于本人一直使用extjs3的版本进行开发,于是简单实现了一个动态加载类的管理器,使用方式与extjs4的方 ...
随机推荐
- 1Z0-053 争议题目解析685
1Z0-053 争议题目解析685 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 685.In your test database: -You are using Recover ...
- 常见ArcGIS操作(以10.0为例)
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.建立缓冲区 先在图层属性表里面新建一个缓冲区半径字段,然后对该字段赋 ...
- Ubuntu下搭建ryu环境
RYU环境搭建总共四步: step1:首先下载相应的python套件,并且更新pip $ sudo apt-get install python-pip python-dev build-essent ...
- 【集合框架】Java集合框架综述
一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...
- Redis数据类型,以及应用场合
Redis常用的数据类型为String,Hash,List,Set等,简介如下: String 1.String 常用命令: 除了get.set.incr.decr mget等操作外,Redis还提供 ...
- Spring-AOP实践 - 统计访问时间
公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为S ...
- C# 将DataTable数据源转换成实体类
using System; using System.Collections.Generic; using System.Data; using System.Reflection; /// < ...
- Java关于Properties用法(二)——替换配置文件中的参数
上一章讲了配置文件的基本用法,虽然上一章已经可以解决一些需求,但还不些不足之处.假如,配置文件里面的字符串有一部分需要经常变动,另外一些不需要,上一章的方法就不方便了,所以这章主要讲如何在配置文件中使 ...
- 工业串口和网络软件通讯平台(SuperIO 2.1)更新发布
SuperIO 2.1下载 一.SuperIO 的特点: 1) 能够很快的构建自己的通讯平台软件,包括主程序. 2) 设备模块化开发,通过配制文件挂载,即可在平台软件下运行. 3) 设备 ...
- Senna.js – 速度极快的单页应用程序引擎
Senna.js 是一个速度超快的单页应用程序引擎,提供了几个低级别的 API,可以帮助你打造现代化的基于 Web 的应用程序.更重要的是,搜索引擎蜘蛛应该能够索引相同的内容. 通过使用 HTML5 ...