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控件编写播放器相关推荐

  1. C#中Windows Media Player控件使用实例|方法

    Windows Media Player控件Windows Media Player是一种媒体播放器,可以播放当前最流行的音频.视频文件和大多数混合型的多媒体文件.为了便于程序的开发,Visual S ...

  2. C# WinForm 添加Windows Media Player 控件调试出现未能加载文件或程序集Interop.WMPLib,该怎么解决...

    C# WinForm 添加Windows Media Player 控件调试出现未能加载文件或程序集Interop.WMPLib 如标题,在窗体中添加Windows Media Player 控件,当 ...

  3. VC2008 Windows Media Player控件的使用技巧 三

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 操作系统 ...

  4. VC2008 Windows Media Player控件的使用技巧

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 操作系统 ...

  5. VC2008 Windows Media Player控件的使用技巧 二

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 操作系统 ...

  6. Windows Media Player控件的所有属性和方法

    Windows Media Player控件的所有属性和方法----1 player.GetPlayState() 返回播放器状态(0:停止,1:连接,2:缓冲,3:播放,4:暂停,5:寻找) 网页中 ...

  7. Windows Media Player控件研究

    初级问题: 我的那个定时提醒程序中要用到它,初步使用问题已解决.基本使用步骤如下: 一.往控件箱中添加此控件:wmp.dll 二.往窗体上拖控件 三.wmp.URL=XXXX;wmp.play()即可 ...

  8. 音乐播放器制作一(Windows Media Player控件)

    VS2013 MFC做音乐播放器,需要使用到ActiveX控件(Windows Media Player),可以播放音视频,支持歌单添加,删除,保存操作,支持循环,顺序,随机播放.   话不多说,先来 ...

  9. 基于.net的C# Windows Media Player控件

    C#Windows Media Player控件 一.往控件箱中添加此控件:wmp.dll 二.往窗体上拖控件(本人添加...有时候你拖拽控件到窗体上时候会弹出错误窗口提示'axHost'注册失败什么 ...

最新文章

  1. 沙盘正在注销进程start_进程,线程,多线程
  2. 【项目实践】车距+车辆+车道线+行人检测项目实践
  3. str_pad函数php,str_pad
  4. word 通配符_word通配符技巧:HR高效办公技巧应用
  5. 大四生活总结20101015
  6. Android设计模式MVVM之DataBinding简单使用
  7. 关于选择排序和快速排序--2017-09-24
  8. Spring四大模块和设计模式
  9. 如何避免核心代码资源泄漏和如何提高开发效率
  10. 全国主要省份城市的DNS服务器地址
  11. apache2 安装时报错 ServerRoot must be a valid directory
  12. mysql:mysql安装及一些配置和图形界面介绍
  13. android模拟器命令行,夜神安卓模拟器命令行整理贴
  14. ue4风格化材质_风格化材质 - 游戏蛮牛 - Unreal中文翻译用户手册
  15. 更改putty默认配色方案
  16. 期货业-期货市场的产生
  17. 抖音 触摸精灵_touchscale.co在哪里玩 抖音爆火触摸称重游戏是什么
  18. 深度学习核心技术精讲100篇(四十五)-商业DMP数据管理平台的架构与实践
  19. 下载rpm离线安装包
  20. 分享几个小众又高薪的职业

热门文章

  1. 从小白到中级高级软件测试工程师成长路线!--(下篇)
  2. 省常中模拟 day1
  3. 本因坊精彩对局.pdf (5.72M)
  4. 杂记:Word在试图打开文件时遇到错误/Word在.docx中发现无法读取的内容
  5. C#实现excel文件的读取、写入以及异常处理,附源码程序
  6. 警告处理 RuntimeWarning: Degrees of freedom <= 0 for slice. keepdims=keepdims)
  7. 工业机器视觉系统开发过程
  8. C++ Primer学习 (1)
  9. android解析doc,docx,xls,xlsx文件
  10. 无锡新区新洲生活广场