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的方 ...
随机推荐
- javascript URL实现简易书签
简介 在HTML中,我们可以将js嵌入到script标签中,可以嵌入到行内代码中,也可以嵌入到src(href)中. 后者称作javascript URL.该方式的URL格式固定:javascript ...
- 软件工程-构建之法 WordCount小程序 统计文件中字符串个数,单词个数,词频,行数
一.前言 在之前写过一个词频统计的C语言课设,别人说你一个大三的怎么写C语言课程,我只想说我是先学习VB,VB是我编程语言的开始,然后接触到C语言及C++:再后来我是学习C++,然后反过来学习C语言, ...
- Zookeeper数据模型及其应用
Zookeeper作为分布式系统的底层协调服务有着其简单可依靠的数据模型,数据模型加之数据同步.一致性处理和可靠性,在此之上有很多经典的应用,例如,分布式锁.服务器动态上线下感知.主节点选举.数据发布 ...
- 【JUC】JDK1.8源码分析之AbstractQueuedSynchronizer(二)
一.前言 在锁框架中,AbstractQueuedSynchronizer抽象类可以毫不夸张的说,占据着核心地位,它提供了一个基于FIFO队列,可以用于构建锁或者其他相关同步装置的基础框架.所以很有必 ...
- JDBC连接SQL Server代码模板
* JDBC连接SQL Server数据库 代码模板* Connection: 连接数据库并担任传送数据的任务:* Statement : 执行SQL语句:* Re ...
- Android之ListView的getItemViewType和getViewTypeCount
PS:感觉这两个方法其实还是很容易理解的,也算是给我其他两个朋友写的吧,帮他们搞清楚这两个方法的用法和概念.同时还有一些小细节问题需要注意. 学习内容: 1.getItemViewType和getVi ...
- DNS知识指南
1. 什么是记录? 记录的实质是存在DNS服务器叶结点上的一条映射(只讨论权威DNS,不讨论Local DNS). A记录:(域名:IP地址) 例:cnblogs.com A 42.121.25 ...
- webControls与客户端脚本路径
网上有用的资料不多,在一本电子书中摘抄了内容如下 webControls配置节只有一个clientScriptsLocation属性,此属性用于指定ASP.NET客户端脚本的默认存放路径.这些文件是包 ...
- mvc实现上传图片(上传和预览)webuploader
笔者看到mvc最近比较流行,而很多使用一些比较旧的的方法上传图片,再次安利一下百度的webuploader控件吧 webuploader第一步要先下载一些插件这点可以在webuploader官网上下载 ...
- Python程序高效地调试
现在我在debug python程序就只是简单在有可能错误的地方print出来看一下,不知道python有没像c++的一些IDE一样有单步调试这类的工具?或者说各位python大神一般是怎么debug ...