您的位置:首页 > 编程语言 > C#

C#播放MP3的类

2007-10-15 16:53 330 查看
C#没有提供播放MP3等音频文件的类,要编写播放MP3等音频文件程序,必须使用第三方控件或类。本文使用API函数mciSendString,编写一个播放MP3等音频文件的类。

  具体源码如下:

  一、使用API函数mciSendString构成的媒体播放类。

程序代码

using System;

using System.Runtime.InteropServices;

using System.Text;

using System.IO ;

namespace clsMCIPlay

{

 /// <summary>

 /// clsMci 的摘要说明。

 /// </summary>

 public class clsMCI

 {

  public clsMCI()

  {

   //

   // TODO: 在此处添加构造函数逻辑

   //

  }

  //定义API函数使用的字符串变量

  [MarshalAs(UnmanagedType.ByValTStr,SizeConst=260)]

  private string Name = "" ;

  [MarshalAs(UnmanagedType.ByValTStr,SizeConst=128)]

  private string durLength = "" ;

  [MarshalAs(UnmanagedType.LPTStr,SizeConst=128)]

  private string TemStr ="";

  int ilong;

  //定义播放状态枚举变量

  public enum State

  {

   mPlaying = 1,

   mPuase = 2,

   mStop = 3

  };

  //结构变量

  public struct structMCI

  {

   public bool bMut;

   public int iDur;

   public int iPos;

   public int iVol;

   public int iBal;

   public string iName;

   public State state;

  };

  public structMCI mc =new structMCI() ;

  //取得播放文件属性

  public string FileName

  {

   get

   {

    return mc.iName;

   }

   set

   {

    //ASCIIEncoding asc = new ASCIIEncoding();

    try

    {

     TemStr ="";

     TemStr = TemStr.PadLeft(127,Convert.ToChar(" "));

     Name = Name.PadLeft(260,Convert.ToChar(" ")) ;

     mc.iName = value;

     ilong = APIClass.GetShortPathName(mc.iName,Name, Name.Length);

     Name = GetCurrPath(Name);

     //Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media";

     Name = "open " + Convert.ToChar(34) + Name + Convert.ToChar(34) + " alias media";

     ilong = APIClass.mciSendString("close all", TemStr, TemStr.Length , 0);

     ilong = APIClass.mciSendString( Name, TemStr, TemStr.Length, 0);

     ilong = APIClass.mciSendString("set media time format milliseconds", TemStr, TemStr.Length , 0);

     mc.state = State.mStop;

    }

    catch

    {

     MessageBox.Show("出错错误!");

    }

   }

  }

  //播放

  public void play()

  {

   TemStr = "";

   TemStr = TemStr.PadLeft(127,Convert.ToChar(" "));

   APIClass.mciSendString("play media", TemStr, TemStr.Length , 0);

   mc.state = State.mPlaying ;

  }

  //停止

  public void StopT()

  {

   TemStr = "";

   TemStr = TemStr.PadLeft(128,Convert.ToChar(" "));

   ilong = APIClass.mciSendString("close media", TemStr, 128, 0);

   ilong = APIClass.mciSendString("close all", TemStr, 128, 0);

   mc.state = State.mStop ;

  }

  public void Puase()

  {

   TemStr = "";

   TemStr = TemStr.PadLeft(128,Convert.ToChar(" "));

   ilong = APIClass.mciSendString("pause media", TemStr, TemStr.Length, 0);

   mc.state = State.mPuase ;

  }

  private string GetCurrPath(string name)

  {

   if(name.Length <1) return "";

   name = name.Trim();

   name = name.Substring(0,name.Length-1);

   return name;

  }

  //总时间

  public int Duration

  {

   get

   {

    durLength = "";

    durLength = durLength.PadLeft(128,Convert.ToChar(" ")) ;

    APIClass.mciSendString("status media length", durLength, durLength.Length, 0);

    durLength = durLength.Trim();

    if(durLength == "") return 0;

    return (int)(Convert.ToDouble(durLength) / 1000f);

   }

  }

  //当前时间

  public int CurrentPosition

  {

   get

   {

    durLength = "";

    durLength = durLength.PadLeft(128,Convert.ToChar(" ")) ;

    APIClass.mciSendString("status media position", durLength, durLength.Length, 0);

    mc.iPos = (int)(Convert.ToDouble(durLength) / 1000f);

    return mc.iPos;

   }

  }

 }

 public class APIClass

 {

  [DllImport("kernel32.dll", CharSet = CharSet.Auto)]

  public static extern int GetShortPathName (

   string lpszLongPath,

   string shortFile,

   int cchBuffer

  );

  [DllImport("winmm.dll", EntryPoint="mciSendString", CharSet = CharSet.Auto)]

  public static extern int mciSendString (

   string lpstrCommand,

   string lpstrReturnString,

   int uReturnLength,

   int hwndCallback

  );

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: