标题:媒体播放器设计之旅(一)
只看楼主
beniao
Rank: 2
等 级:新手上路
威 望:4
帖 子:367
专家分:2
注 册:2004-12-17
 问题点数:0 回复次数:20 
媒体播放器设计之旅(一)
媒体播放器设计之旅我计划是写一系列文章来介绍一个这个的系统的架构设计的.目前因为准备不够完善,就先简单介绍下一个播放器的开发过程,详细的架构设计是一个结合设计模式的一个综合架构体系.在后的时间里我会相续写出后续文章.有兴趣的朋友请关注.

 

下面我介绍下一个简单播放器的开发过程.

1.建议C#的WinFrom项目MP3.Player

  开发这个播放器是利用的MP的一个组件,所以在开发之间我门先引用两个.dll文件,我门先将这两个.dll加入到项目,他门分别是:

   AxInterop.WMPLib.dll  

   Interop.WMPLib.dll


 

2.将默认的窗体改名为mplayer.cs,并在里面放置好菜单控件menuStrip1,状态控件

  statusStrip1以及右键关联的快捷菜单等.(详细请下提供的源代码查看).

 

3.将Ax.Interop.WmpLib.dll库所提供的axWindowsMediaPlayer控件拽出一个到窗体上,以播放

  指定的文件,ListBox提供播放列表显示功能.

 

4.播放列表这样的小型数据在这里没有必要采用数据库来存储.我才用xml来存储.在项目

  bin\Debug下建立一个名为FileList.xml的xml文件,定义格式如下:

 <?xml version="1.0" standalone="yes"?>
 <FileList>
  <FileName>
    <Name>歌曲列表</Name>
  </FileName>

 </FileList>

 

  同时在窗体里定义两个全局变量:

  string fileName = string.Empty;  //播放文件名
  int flag = 1;                    //播放文件索引

 

5.到这里我门可以着手代码的编写了.首先进入窗体加载事件里,在这里我门需要在程序启动就

  加载播放列表项到ListBox里显示,代码定义如下:

private void mplayer_Load(object sender, EventArgs e)
{
   timer1.Start();
   DataSet ds = new DataSet();
   ds.ReadXml("FileList.xml");
   for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
   {
       object[] list = new object[i];
       list = ds.Tables[0].Rows[i].ItemArray;
       listBox1.Items.Add(list[0].ToString().Substring(list[0].ToString().LastIndexOf('\\') + 1));
       fileName = list[0].ToString().Substring(0, list[0].ToString().LastIndexOf('\\') + 1);
    }
 }


 

 6.先实现菜单里的打开文件目录的功能:

  if (this.folderBrowserDialog1.ShowDialog() == DialogResult.OK)
  {
      //取得用户选择的路径
      fileName = folderBrowserDialog1.SelectedPath;
      string[] mp3Name = Directory.GetFiles(fileName);
      foreach (string var in mp3Name)
      {
         listBox1.Items.Add(flag + "." + var.Substring(var.LastIndexOf('\\') + 1));
         flag++;   //列表索引号
      }
   }


 

 7.播放列表里是没有数据的,下面我门来为其指定播放目录,并把目录下的文件加在到ListBox

   控件,同时实现保存播放列表项到xml文件里.

   在这里我门先指定ListBox的ContextMenuStrip属性为先前准备好的contextMenuStrip1,他

   的设计如下:

            

  实现Add File(添加单个播放文件的操作):

  if (openFileDialog1.ShowDialog() == DialogResult.OK)
  {
      string strName = openFileDialog1.FileName;
      fileName = strName.Substring(0, strName.LastIndexOf('\\') + 1);
      listBox1.Items.Add(flag + "." + strName.Substring(strName.LastIndexOf('\\') + 1));
      flag++;
   }


   实现Add Files(添加播放目录的操作):

   这里同菜单里打开目录的功能一样,所以我门可以直接调用菜单里打开目录的事件来完成:

   openToolStripMenuItem_Click(null, null);到这里我门先来看看效果:

 
   删除文件也就是删除ListBox的列表项目,直接调用ReMove方法搞定,这里就不多说.下面来看

   看保存功能的实现.

   int list = this.listBox1.Items.Count;
   for (int i = 0; i < list; i++)
   {
       if (listBox1.Items[i].ToString().Equals("") || listBox1.Items[i].Equals("歌曲列表"))
        {
             continue;
        }
        DataSet ds = new DataSet();
        ds.ReadXml(Application.StartupPath + "\\FileList.xml");
        DataRow dr = ds.Tables[0].NewRow();
        dr["Name"] = fileName + "\\" + listBox1.Items[i].ToString();
        ds.Tables[0].Rows.Add(dr);
        ds.WriteXml(Application.StartupPath + "\\FileList.xml");
   }
   MessageBox.Show("当前列表保存成功\n下次你可以轻松享受音乐给你带来的快乐!\n程序设计:Beniao  Http://, "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);

 

8.由于是一个简单的播放器程序,内部程序并不是很复杂,我都只是简单的介绍下基本的实现过

  程.下面我门看看怎么实现在ListBox里双击实现播放指定的文件的功能,也许这个才是大家

  所关注的:

  timer1.Start();
  try
  {
     string palyName = fileName + "\\" + listBox1.SelectedItem.ToString().Substring(listBox1.SelectedItem.ToString().IndexOf('.') + 1);
     this.axWindowsMediaPlayer1.URL = palyName;
  }
  catch (Exception ex)
  {
     MessageBox.Show("对不起,不能找到你指定的文件,请确认你的文件路径!" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  }

 

到这里,简单播放器的开发就这样简单介绍完了,我门来看看运行的效果.:



当然这个只是一个简单的播放器,我写文章所介绍的也就是他的一些简单的基本功能,要把这个程序开发完善还需要发一定的功夫,见于时间关系,我也只能做到这里,如果那位朋友有兴趣可以帮忙完善下这个程序,需要源代码的朋友请在下面留言.
搜索更多相关主题的帖子: 媒体播放器 架构 dll 设计 WMPLib 
2008-04-28 13:49
shezhenhui1989
Rank: 1
来 自:安徽
等 级:新手上路
帖 子:287
专家分:0
注 册:2008-2-1
得分:0 
顶了,..........
2008-04-29 09:17
hebingbing
Rank: 6Rank: 6
来 自:黄土高坡
等 级:贵宾
威 望:27
帖 子:3417
专家分:371
注 册:2007-10-22
得分:0 
帮顶……
呵呵……
2008-04-29 11:22
losin
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-12-30
得分:0 
看到好东西,不顶可以吗?
答:不可不顶!
help_bod@可以发到我的邮箱,共同就感兴趣话题,做下研究!

[[it] 本帖最后由 losin 于 2008-5-10 10:38 编辑 [/it]]
2008-05-10 10:36
snipen
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2007-5-5
得分:0 
应该放在C#论坛,这是,恐怕网页上不能实现,但学是项下

像我这么拉风的男孩子,就像是黑暗中的萤火虫那样,在哪里都是那么的鲜明出众……
2008-05-10 10:59
beniao
Rank: 2
等 级:新手上路
威 望:4
帖 子:367
专家分:2
注 册:2004-12-17
得分:0 
回复 3# 的帖子
已经发送到你箱子里.

博客:http://
2008-05-11 02:04
stealdream
Rank: 1
来 自:合肥工大
等 级:新手上路
帖 子:54
专家分:0
注 册:2008-5-5
得分:0 
LZ。可不可以发到我邮箱给我看看呀,
zhouwei9960@
2008-05-11 18:07
beniao
Rank: 2
等 级:新手上路
威 望:4
帖 子:367
专家分:2
注 册:2004-12-17
得分:0 
回复 6# 的帖子
你可以直接到我博客去下载..
http://在C#分栏里.

博客:http://
2008-05-11 21:31
dogdays
Rank: 2
等 级:论坛游民
威 望:1
帖 子:302
专家分:26
注 册:2006-2-26
得分:0 
谢谢分享啦!顶,顶......

活到老,学到老!
2008-06-11 11:24
beniao
Rank: 2
等 级:新手上路
威 望:4
帖 子:367
专家分:2
注 册:2004-12-17
得分:0 
回复 9# dogdays 的帖子
呵呵  N久没来这里了。。。人气还是这么旺

博客:http://
2008-06-21 19:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-211463-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.380981 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved