Fork me on GitHub

小菜学习Winform(二)WMPLib实现音乐播放器

前言

  现在网上有很多的音乐播放器,但好像都不是.net平台做的,在.net中实现音乐文件的播放功能很简单,下面就简单实现下。

SoundPlayer类

  在.net提供了音乐文件的类:SoundPlayer,但是只支持.wav格式,我们用的时候一般是播放系统文件,比如一些提示声音等。代码很简单:

1         SoundPlayer player = new SoundPlayer();
2         player.SoundLocation = filePath;//filePath文件的物理路径
3         player.Play();   

  使用这个类我们做个小程序,如下:

WMP组件

  上面的小程序有几个问题:不支持暂停,进度显示,文件格式限制等,因为SoundPlayer就是来播放系统文件的,不能要求它那么全面。因为windows系统自带播放器windows media player,我们可以用使用其自带的组件来实现上面的要求,做起来也很简单。

  先引用Windows Media Player组件,然后就像拖控件一样用就行了。效果如图:

  代码实现起来很简单,播放,暂停,停止代码如下:

1             wmp.Ctlcontrols.play();//播放
2             wmp.Ctlcontrols.pause();//暂停
3             wmp.Ctlcontrols.stop();//停止

  完整代码:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Windows.Forms;
  9 
 10 using WMPLib;
 11 using System.Media;
 12 using System.IO;
 13 using System.Threading;
 14 
 15 namespace 音乐播放器
 16 {
 17     public partial class Form2 : Form
 18     {
 19         public int index = 1;
 20         public int listIndex;
 21         SoundPlayer player = new SoundPlayer();
 22         Dictionary<string, string> dic = new Dictionary<string, string>();
 23         IWMPMedia media;
 24         public Form2()
 25         {
 26             InitializeComponent();
 27         }
 28 
 29         private void Form2_Load(object sender, EventArgs e)
 30         {
 31             
 32         }
 33 
 34         /// <summary>
 35         /// 导入文件
 36         /// </summary>
 37         private void tsmiLoading_Click(object sender, EventArgs e)
 38         {
 39             string fileName, fileExtension, fileSize, temp;
 40             FileInfo fi = null;
 41             ListViewItem lvi = null;
 42 
 43             openFileDialog1.Multiselect = true;
 44             openFileDialog1.Filter = "mp3文件(*.mp3)|*.mp3|wav文件(*.wav)|*.wav|wma文件(*.wma)|*.wma";
 45             if (openFileDialog1.ShowDialog() == DialogResult.OK)
 46             {
 47                 foreach (string filePath in openFileDialog1.FileNames)
 48                 {
 49                     fi = new FileInfo(filePath);
 50                     temp = filePath.Remove(filePath.LastIndexOf('.'));
 51                     fileName = temp.Remove(0, temp.LastIndexOf('\\') + 1);
 52                     fileExtension = filePath.Remove(0, filePath.LastIndexOf('.'));
 53                     fileSize = (fi.Length / 1024).ToString() + "KB";
 54 
 55                     lvi = new ListViewItem();
 56                     lvi.Text = index++.ToString();
 57                     lvi.SubItems.AddRange(new string[] { fileName, fileExtension, fileSize, filePath });
 58 
 59                     if (lvDetail.Items.Count > 0)
 60                     {
 61                         if (!dic.ContainsKey(filePath))
 62                         {
 63                             lvDetail.Items.Add(lvi);
 64                             dic.Add(filePath, fileName);
 65                             //添加到播放列表
 66                             media = wmp.newMedia(filePath);
 67                             wmp.currentPlaylist.insertItem(listIndex++, media);
 68                         }
 69                         else
 70                         {
 71                             index--;
 72                             MessageBox.Show("文件已存在!");
 73                         }
 74                     }
 75                     else
 76                     {
 77                         lvDetail.Items.Add(lvi);
 78                         dic.Add(filePath, fileName);
 79                         //添加到播放列表
 80                         media = wmp.newMedia(filePath);
 81                         wmp.currentPlaylist.insertItem(listIndex++, media);
 82                     }
 83                 }
 84             }
 85         }
 86 
 87         /// <summary>
 88         /// 清除列表
 89         /// </summary>
 90         private void tsmiClear_Click(object sender, EventArgs e)
 91         {
 92             lvDetail.Items.Clear();
 93         }
 94 
 95         /// <summary>
 96         /// 播放
 97         /// </summary>
 98         private void tsmiPlayer_Click(object sender, EventArgs e)
 99         {
100             wmp.Ctlcontrols.play();
101         }
102 
103         /// <summary>
104         /// 暂停
105         /// </summary>
106         private void tsmiWaiting_Click(object sender, EventArgs e)
107         {
108             wmp.Ctlcontrols.pause();
109         }
110 
111         /// <summary>
112         /// 停止
113         /// </summary>
114         private void tsmiStop_Click(object sender, EventArgs e)
115         {
116             wmp.Ctlcontrols.stop();
117         }
118 
119         /// <summary>
120         /// 退出
121         /// </summary>
122         private void tsmiExit_Click(object sender, EventArgs e)
123         {
124             Application.Exit();
125         }
126 
127         /// <summary>
128         /// 双击某项播放
129         /// </summary>
130         private void lvDetail_DoubleClick(object sender, EventArgs e)
131         {
132             if (lvDetail.SelectedItems.Count > 0)
133             {
134                 wmp.currentMedia = wmp.currentPlaylist.Item[int.Parse(lvDetail.SelectedItems[0].Text) - 1];
135             }
136         }
137     }
138 }
View Code

  程序下载:音乐播放器.rar

  附录:小菜学习编程-Winform系列(初学者)

 

posted @ 2014-01-14 17:17  田园里的蟋蟀  阅读(3806)  评论(3编辑  收藏  举报