c#—如何借助windows media player控件编写播放器
windows media player控件的常用属性和方法
以下 music player 均为windows media player控件的名字。
1.属性
1)musicPlayer.settings.autoStart:打开播放器时是否自动播放 。true:自动播放,false:不自动播放,默认自动播放。
2)musicPlayer.URL:要播放歌曲的路径。
3)musicPlayer.settings.mute:是否静音。true:静音,false:不静音。
4)musicPlayer.settings.volume:音量值大小,范围是1~100。
5)musicPlayer.Ctlcontrols.currentPositionString:当前播放时间。返回值是字符串类型,例如:02:23。
6)musicPlayer.Ctlcontrols.currentPosition:也是返回当前播放的时间。返回值是 double 类型,例如:133.8。
7)musicPlayer.currentMedia.name:返回当前播放歌曲的名字。
8)musicPlayer.playState:播放器当前的状态。
有一个枚举 WMPLib.WMPPlayState 说明了它的取值:
0——wmppsUndefined:未知状态
1——wmppsStopped:播放停止
2——wmppsPaused:播放暂停
3——wmppsPlaying:正在播放
4——wmppsScanForward:向前搜索
5——wmppsScanReverse:向后搜索
6——wmppsBuffering :正在缓冲
7——wmppsWaiting:正在等待流开始
8——wmppsMediaEnded:播放流已结束
9——wmppsTransitioning :准备新的媒体文件
10——wmppsReady:播放准备就绪
11——wmppsReconnecting:尝试重新连接流媒体数据
12——wmppsLast:上一次状态,状态没有改变
2.方法
1)musicPlayer.Ctlcontrols.play():播放
2)musicPlayer.Ctlcontrols.pause():暂停
3)musicPlayer.Ctlcontrols.stop():停止
编写播放器
1.第一步:先拖一个windows media player控件,再拖一个 listbox 用来存放歌曲名字。一个按钮,点击按钮的时候显示文件对话框。选择音乐文件后,将音乐的名字添加到 listbox 中。
//设置文件对话框
OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "请选择音乐";
ofd.InitialDirectory = @"E:\计算机资料\项目\03 CS学习\03 C#例子\【04】\04\4-4\歌曲";
ofd.Filter = "(*.mp3)|*.mp3";
ofd.Multiselect = true;
if (ofd.ShowDialog() == DialogResult.OK)
{//存放歌曲路径,需定义一个string[]数组或list<string>泛型集合path = ofd.FileNames;for (int i = 0; i < path.Length; i++){//截取歌曲名字string musicName = path[i].Substring(path[i].LastIndexOf('\\') + 1);//向listbox中添加歌曲名字listBox1.Items.Add(musicName);}//默认选择为第1项listBox1.SelectedIndex = 0;musicPlayer.URL = path[listBox1.SelectedIndex];
}
2.第二步:设置播放暂停按钮。
if (btnPlay.Text == "播放")
{musicPlayer.Ctlcontrols.play();btnPlay.Text = "暂停";
}
else
{musicPlayer.Ctlcontrols.pause();btnPlay.Text = "播放";
}
3.第三步:添加播放上一曲、下一曲按钮。
//播放下一曲
int index = listBox1.SelectedIndex;
index++;
if (index == path.Length)
{index = 0;
}
listBox1.SelectedIndex = index;
musicPlayer.URL = path[index];
musicPlayer.Ctlcontrols.play();
//播放上一曲
int index = listBox1.SelectedIndex;
index--;
if (index < 0)
{index = path.Length-1;
}
listBox1.SelectedIndex = index;
musicPlayer.URL = path[index];
musicPlayer.Ctlcontrols.play();
4.第四步:音量加减、是否静音。拖两个按钮,来控制上一首、下一首。拖一个 picturebox 控件,点击它来控制是否静音。
//音量+
musicPlayer.settings.volume += 5;//音量-
musicPlayer.settings.volume -= 5;//静音
if (picVolume.Tag.ToString() == "1")
{musicPlayer.settings.mute = true;picVolume.Image = Image.FromFile("路径");picVolume.Tag = "2";
}
else
{musicPlayer.settings.mute = false;picVolume.Image = Image.FromFile("路径");picVolume.Tag = "1";
}
5.显示当前播放时间和歌词。拖一个 timer 控件,在 timer 控件里让当前播放时间和歌词显示在 label 控件上。
显示当前播放时间很容易,用 musicPlayer.Ctlcontrols.currentPositionString 属性就可以了,但是歌词略微有点儿麻烦。首先得有歌词,其次将歌词文件中的内容读取出来后,还要将歌词分割,将歌词补充完整,最后再进行排序。
什么意思呢?比如上图中的歌词有一些重复的歌词内容,需要按时间分割整行歌词,然后再在每个时间后面都加上个歌词内容,保存到一个list泛型集合中,最后再对他们排序,这才是完整的歌词。
//切割歌词的方法
private List<string> FormatLrc()
{List<string> list = new List<string>();//遍历歌词for (int i = 0; i < listSongLrc.Count; i++){//切割歌词string[] strSongLrc = listSongLrc[i].Split(new char[] { '[', ']' }, StringSplitOptions.RemoveEmptyEntries);//如果数组长度大于1,则表明时间后有歌词if (strSongLrc.Length>1){for (int j = 0; j < strSongLrc.Length-1; j++){list.Add(strSongLrc[j] + "|" + strSongLrc[strSongLrc.Length - 1]);}}}//歌词排序,冒泡排序法for (int i = 0; i < list.Count-1; i++){for (int j = 0; j < list.Count-1-i; j++){if (string.Compare(list[j],list[j+1])>0){string temp = list[j];list[j] = list[j + 1];list[j + 1] = temp;}}}return list;
}
//timer事件,显示当前播放时间和歌词
private void timer1_Tick(object sender, EventArgs e)
{//显示播放时间和歌曲名字if (musicPlayer.currentMedia != null){labTime.Text = musicPlayer.Ctlcontrols.currentPositionString;labMusicName.Text = musicPlayer.currentMedia.name;}//显示歌词if (listLrcPath.Count > 0 && musicPlayer.currentMedia != null){for (int i = 0; i < listSongLrc.Count; i++){//如果当前播放时间超过了歌词中的某个时间,就显示该时间后的歌词if (string.Compare(musicPlayer.Ctlcontrols.currentPositionString, listSongLrc[i]) > 0){lblLrc.Text = listSongLrc[i].Split('|')[1];}}}
}
6.自动播放下一曲
实现自动播放下一曲的原理:当播放完一首歌的时候,播放器的播放状态变为 Ended,按照正常的状态变换,是这样的的:Ended –> Transtioning –> stopped。而在变成 Ended 状态之后,将下一曲的歌曲路径传给播放器,状态就变为了:Transtioning –> Ready,然后调用 play 方法,就实现了自动播放下一曲。
//状态改变事件
private void musicPlayer_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{//歌曲播放完,变换索引if (musicPlayer.playState == WMPLib.WMPPlayState.wmppsMediaEnded){int index = listBox1.SelectedIndex;if (index == path.Length - 1){index = 0;}else{index++;}listBox1.SelectedIndex = index;}if (musicPlayer.playState == WMPLib.WMPPlayState.wmppsReady){try{musicPlayer.Ctlcontrols.play();btnPlay.Text = "暂停";}catch{}}
}
★解释一下为什么是在 ready 状态之后,调用播放方法?
因为在播放之前必须得给 musicplayer 一个歌曲路径,否则无法播放,而当路径改变的时候会经历两个状态:Transitioning –> Ready,也就是说只有在 Ready 状态时,才会把路径传给 musicplayer ,所以播放方法得在 Ready 状态中。
★以下是windows media player控件播放状态的状态图:
c#—如何借助windows media player控件编写播放器相关推荐
- C#中Windows Media Player控件使用实例|方法
Windows Media Player控件Windows Media Player是一种媒体播放器,可以播放当前最流行的音频.视频文件和大多数混合型的多媒体文件.为了便于程序的开发,Visual S ...
- C# WinForm 添加Windows Media Player 控件调试出现未能加载文件或程序集Interop.WMPLib,该怎么解决...
C# WinForm 添加Windows Media Player 控件调试出现未能加载文件或程序集Interop.WMPLib 如标题,在窗体中添加Windows Media Player 控件,当 ...
- VC2008 Windows Media Player控件的使用技巧 三
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 操作系统 ...
- VC2008 Windows Media Player控件的使用技巧
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 操作系统 ...
- VC2008 Windows Media Player控件的使用技巧 二
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 操作系统 ...
- Windows Media Player控件的所有属性和方法
Windows Media Player控件的所有属性和方法----1 player.GetPlayState() 返回播放器状态(0:停止,1:连接,2:缓冲,3:播放,4:暂停,5:寻找) 网页中 ...
- Windows Media Player控件研究
初级问题: 我的那个定时提醒程序中要用到它,初步使用问题已解决.基本使用步骤如下: 一.往控件箱中添加此控件:wmp.dll 二.往窗体上拖控件 三.wmp.URL=XXXX;wmp.play()即可 ...
- 音乐播放器制作一(Windows Media Player控件)
VS2013 MFC做音乐播放器,需要使用到ActiveX控件(Windows Media Player),可以播放音视频,支持歌单添加,删除,保存操作,支持循环,顺序,随机播放. 话不多说,先来 ...
- 基于.net的C# Windows Media Player控件
C#Windows Media Player控件 一.往控件箱中添加此控件:wmp.dll 二.往窗体上拖控件(本人添加...有时候你拖拽控件到窗体上时候会弹出错误窗口提示'axHost'注册失败什么 ...
最新文章
- 沙盘正在注销进程start_进程,线程,多线程
- 【项目实践】车距+车辆+车道线+行人检测项目实践
- str_pad函数php,str_pad
- word 通配符_word通配符技巧:HR高效办公技巧应用
- 大四生活总结20101015
- Android设计模式MVVM之DataBinding简单使用
- 关于选择排序和快速排序--2017-09-24
- Spring四大模块和设计模式
- 如何避免核心代码资源泄漏和如何提高开发效率
- 全国主要省份城市的DNS服务器地址
- apache2 安装时报错 ServerRoot must be a valid directory
- mysql:mysql安装及一些配置和图形界面介绍
- android模拟器命令行,夜神安卓模拟器命令行整理贴
- ue4风格化材质_风格化材质 - 游戏蛮牛 - Unreal中文翻译用户手册
- 更改putty默认配色方案
- 期货业-期货市场的产生
- 抖音 触摸精灵_touchscale.co在哪里玩 抖音爆火触摸称重游戏是什么
- 深度学习核心技术精讲100篇(四十五)-商业DMP数据管理平台的架构与实践
- 下载rpm离线安装包
- 分享几个小众又高薪的职业
热门文章
- 从小白到中级高级软件测试工程师成长路线!--(下篇)
- 省常中模拟 day1
- 本因坊精彩对局.pdf (5.72M)
- 杂记:Word在试图打开文件时遇到错误/Word在.docx中发现无法读取的内容
- C#实现excel文件的读取、写入以及异常处理,附源码程序
- 警告处理 RuntimeWarning: Degrees of freedom <= 0 for slice. keepdims=keepdims)
- 工业机器视觉系统开发过程
- C++ Primer学习 (1)
- android解析doc,docx,xls,xlsx文件
- 无锡新区新洲生活广场