C# mp3播放简单实现

/// <summary>
/// 测试
/// </summary>
class TestDemo
{
    public void Test()
    {
        clsMCI cm = new clsMCI();
        cm.FileName = "alarm.mp3";
        cm.play();
    }
}
/// <summary>
/// clsMci 的摘要说明。
/// </summary>
public class clsMCI
{
    public clsMCI()
    {
    }


    //定义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
        {
            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";
                    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
                {
                }
        }
    }
    //播放
    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
        );
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值