---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

1.本节主要学习了音乐播放器的简单制作,在此篇中主要介绍用到的知识点和重要的思路代码

首先,播放器的控件使用的是windows自带的player组件

2.视频的播放、暂停直接调用组件的相应方法即可,对应的播放代码如下:

        /// <summary>/// 播放/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnPlay_Click(object sender, EventArgs e){if (btnPlay.Text == "播放"){axPlayer.Ctlcontrols.play();btnPlay.Text = "暂停";}else if (btnPlay.Text == "暂停"){axPlayer.Ctlcontrols.pause();btnPlay.Text = "播放";}//btnPlay.Text = btnPlay.Text == "播放" ? "暂停":"播放";}

3.添加歌曲到播放列表的实现,MyPlay方法在调用时,如果列表为空,直接返回。

        /// <summary>/// 添加歌曲到播放列表/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnOpen_Click(object sender, EventArgs e){OpenFileDialog ofg = new OpenFileDialog();ofg.InitialDirectory = @"E:\黑马.net入学\6-基础班项目_自己动手写音乐播放器(高级内容)";ofg.Filter ="音乐文件|*.mp3;*.wma|视频文件|*.wmv";ofg.Title="请选择文件";ofg.Multiselect=true;if (ofg.ShowDialog() == DialogResult.OK){for (int i = 0; i < ofg.FileNames.Length; i++){lSongs.Add(ofg.FileNames[i]);string[] songs = ofg.FileNames[i].Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries);listSongsPlayer.Items.Add(songs[songs.Length-1]);                  }//axPlayer.URL = lSongs[0];         //选定歌曲第一个为默认播放//listSongsPlayer.SelectedIndex = 0;MyPlay(0);}}
      /// <summary>/// 用索引完成播放,/// </summary>/// <param name="url"></param>private void MyPlay(int url){//if (btnPlay.Text == "播放")//{//    axPlayer.Ctlcontrols.play();//    btnPlay.Text = "暂停";//}//else if (btnPlay.Text == "暂停")//{//    axPlayer.Ctlcontrols.pause();//    btnPlay.Text = "播放";//}if (listSongsPlayer.Items.Count == 0){return;}if (url < 0){url = 0;}btnPlay.Enabled = true;btnMute.Enabled = true;btnStop.Enabled = true;axPlayer.URL = lSongs[url];listSongsPlayer.SelectedIndex = url;axPlayer.Ctlcontrols.play();btnPlay.Text = "暂停";}

4.添加歌词的显示

歌词显示的主要思路是要通过读取歌词文件,并将歌词通过每一项为时间+歌词的方式存储在一个歌词集合中,然后再与播放器的当前播放时间进行比较,显示对应的歌词。

5.播放器的静音等行为是在播放器组件的Setting属性里面进行赋值操作的,具体如下:

  /// <summary>/// 静音/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnMute_Click(object sender, EventArgs e){if (btnMute.Text == "静音"){axPlayer.settings.mute = true;btnMute.Text = "取消静音";}else if (btnMute.Text == "取消静音"){axPlayer.settings.mute = false;btnMute.Text = "静音";}}

6.自动播放下一曲的实现

      private void axPlayer_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e){if (listSongsPlayer.Items.Count == 0){return;}//       temp1 += axPlayer.playState.ToString() + "\n";label1.Text += axPlayer.playState.ToString() + "\n";if (axPlayer.playState == WMPLib.WMPPlayState.wmppsMediaEnded){ //选择下一曲,准备播放int temp = listSongsPlayer.SelectedIndex;temp++;if (temp > lSongs.Count - 1){listSongsPlayer.SelectedIndex = 0;axPlayer.URL = lSongs[0];}else{listSongsPlayer.SelectedIndex = temp;axPlayer.PlayStateChange -= axPlayer_PlayStateChange;axPlayer.URL = lSongs[temp];axPlayer.PlayStateChange += axPlayer_PlayStateChange;}}if(axPlayer.playState == WMPLib.WMPPlayState.wmppsReady){//播放下一曲//    this.MyPlay(listSongsPlayer.SelectedIndex);axPlayer.Ctlcontrols.play();}}

这里实现自动播放下一曲的时候,我是用的播放器控件式最新的player,所以在给axPlayer.URL赋值时会直接再一次触发axPlayer_PlayStateChange事件,所以再给axPlayer.URL赋值时,要先将axPlayer_PlayStateChange事件去掉,然后赋值完成后再添加上去。实际代码:

axPlayer.PlayStateChange -= axPlayer_PlayStateChange;axPlayer.URL = lSongs[temp];axPlayer.PlayStateChange += axPlayer_PlayStateChange;

---------------------- ASP.Net+Unity开发、 .Net培训、期待与您交流! ----------------------详细请查看: www.itheima.com

黑马程序员_音乐(视频)播放器学习相关推荐

  1. 黑马程序员_异常(老毕视频总结及《疯狂java》补充)

    ----------------------<ahref="http://edu.csdn.net"target="blank">ASP.Net+A ...

  2. 黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

    黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合 ...

  3. 黑马程序员_石头迷阵小游戏

    黑马程序员_石头迷阵小游戏 源代码 一些说明: 1)这些是我看b站黑马程序员的视频,自己手打的,想分享一下,如果有侵权啥的请联系我,马上删除 2)一些比较重要的我都有给注释 3)工具idea idk版 ...

  4. 【168天】黑马程序员27天视频学习笔记【Day07】

    [168天]黑马程序员27天视频学习笔记[Day07] 叨逼叨两句 决定了,我会记住这一天! 07-01:构造方法Constructor概述和格式 构造方法概述和作用 给对象的数据(属性)进行初始化. ...

  5. 黑马程序员__关于自己的一些学习死角的再学习(基于老毕的java基础视频)

    ----------------------<ahref="http://edu.csdn.net"target="blank">ASP.Net+A ...

  6. 黑马程序员最新版JavaWeb基础教程-学习笔记

    da@黑马程序员最新版JavaWeb基础教程-学习笔记 day06-HTML&CSS HTML HTML(HyperTest Markup Language):超文本标记语言 是一门语言,所有 ...

  7. 黑马程序员_基础测试

    -------android培训.java培训.期待与您交流! ---------- 黑马程序员训练营基础测试题及个人代码(包含思路.步骤和基本注释) 1. 编写程序计算12+22+32+....+1 ...

  8. 解析python网络爬虫pdf 黑马程序员_正版 解析Python网络爬虫 核心技术 Scrapy框架 分布式爬虫 黑马程序员 Python应用编程丛书 中国铁道出版社...

    商品参数 书名:Python应用编程丛书:解析Python网络爬虫:核心技术.Scrapy框架.分布式爬虫 定价:52.00元 作者:[中国]黑马程序员 出版社:中国铁道出版社 出版日期:2018-0 ...

  9. 黑马程序员_集合总篇_基础之重点

    ------- <a href="http://www.itheima.com" target="blank">android培训</a> ...

最新文章

  1. 高并发下log4j的性能瓶颈
  2. 嵌入式开发中使用DDD进行调试
  3. VS 2010 Beta2中WPF与Silverlight的关键区别?
  4. HDOJ 1175 连连看 DFS
  5. P_C_Brules
  6. Docker容器的root用户
  7. winpcap基本原理及常见应用_数字图像处理原理及应用教学大纲
  8. iOS手势操作简介(一)
  9. Linux系统PATH变量配置
  10. python get,post提交表单
  11. Mybatis-学习笔记(6)Mybatis的事务管理机制
  12. IDM无法连接到目标服务器
  13. linux acpidtd 进程,MaciASL提取的原版的DTDS编译提示有错误,大牛帮忙看下吧。
  14. PyTorch手写字体识别
  15. matlab 插值多项式实现
  16. QT入门之布局 水平布局、垂直布局、表单布局、网格布局
  17. 数学知识——概率统计(11)小结:多个变量之间的关系描述
  18. 30天自制操作系统(day1)
  19. SpringBoot学习笔记(六)——Redis数据库
  20. 基于学术研究于NASA官网GPM卫星数据下载详细教程

热门文章

  1. mysql数据的复制与恢复_MySQL 数据库的备份与恢复
  2. C++实现暴力筛、朴素素数筛、埃氏素数筛、欧拉素数筛的解法
  3. Python亲戚计算器
  4. C基础入门 - 第一章 - C语言绪言
  5. 实时监控一个区块链某地址的实现方案
  6. Android学之客户端服务端Socket简单通信
  7. 2011年10月买到Incredible S G11山寨,大家警惕!
  8. 制作大白菜装系统U盘以及重装系统
  9. k8s之炉火纯青之pinpoint链路追踪
  10. 现场dolphinscheduler每次都在晚上停止任务15分钟,是什么导致了这个情况?