使用者工具

網站工具


program:net:使用win32api播放music

差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

program:net:使用win32api播放music [2008/05/12 15:17]
program:net:使用win32api播放music [2008/05/12 15:17] (目前版本)
行 1: 行 1:
 +====== C#​中用Win32API实现的媒体播放类,​支持mp3\wma\wmv ======
 +出處:http://​blog.csdn.net/​greenerycn/​archive/​2007/​09/​03/​1770756.aspx
 +<code c#>
 +using System;
 +using System.Collections.Generic;​
 +using System.Linq;​
 +using System.Text;​
 +using System.Runtime.InteropServices;​
 +using System.IO;
 +using System.Windows.Forms;​
 +
 +namespace winformFlash
 +{
 +    /// <​summary>​
 +    /// 用Win32Api实现的媒体播放类.支持Mp3,​wma,​wmv
 +    /// </​summary>​
 +    class Mp3
 +    {
 +        public Mp3()
 +        {
 +        }
 +        //​定义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
 +    );
 +}
 +
 +</​code>​
  
program/net/使用win32api播放music.txt · 上一次變更: 2008/05/12 15:17 (外部編輯)