四联光电智能照明论坛

标题: 用C#做一个调用API的MP3播放器 [打印本页]

作者: admin    时间: 2016-11-16 22:44
标题: 用C#做一个调用API的MP3播放器
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
//using System.linq;
usingSystem.Runtime.InteropServices;
usingSystem.IO;
namespaceMp3Player
{
   class MP3
   {
       public MP3() { }
       //定义API函数使用的字符串变量
       [MarshalAs(UnmanagedType
       private stringName = "";
       [MarshalAs(UnmanagedType
       private stringdurLength = "";
       [MarshalAs(UnmanagedType
       private stringTemStr = "";
       int ilong;
       //定义播放状态枚举变量
       public enumState
       {
            mPlaying = 1,
            mPuase = 2,
            mStop = 3
       };
       //结构变量
       public structstructMCI
       {
            publicbool bMut;
            publicint iDur;
            publicint iPos;
            publicint iVol;
            publicint iBal;
            publicstring iName;
            publicState state;
       };
       public structMCImc = new structMCI();

       /// <summary>
       /// 当前播放状态的属性
       /// </summary>
       public intGetState
       {
            get
            {
                if(State.mPlaying == mc.state)
                {
                    return1;
                }
                elseif (State.mPuase== mc.state)
                {
                    return2;
                }
                return3;
            }
            set
            {
               if (1 == value)
                {
                    mc.state = State.mPlaying;
                }
                elseif (2 == value)
                {
                    mc.state = State.mPuase;
                }
                elseif (3 == value)
                {
                    mc.state = State.mStop;
                }
            }
       }

       /// <summary>
       /// 设计播放时间的显示格式
       /// </summary>
       /// <param name="Tflag">Tflag:true时显示前进用用时,false时为剩余时间并有'-'</param>
       /// <returns></returns>
       public stringPlayerNowTime(bool Tflag)
       {
            inttotal = CurrentPosition;
            stringt = "";
            if(Tflag == false)
            {
                total = Duration - total;
                t += "-";
            }
            intmin = total / 60;
            intsecond = total % 60;
            if(min < 10)
            {
                t += "0";
            }
            t += min.ToString();
            t += ":";
           if(second < 10)
            {
                t += "0";
            }
            t += second.ToString();
            returnt;
       }

       /// <summary>
       /// 返回播放总时间
       /// </summary>
       /// <returns></returns>
       public stringPlayerAllTime()
       {
            inttotal = Duration;
            returntotal.ToString();
       }

       /// <summary>
       /// 打开音乐文件和获取音乐文件时间长度信息
       /// </summary>
       public stringFileName
       {
            get
            {
                returnmc.iName;
            }
            set
            {
                try
                {
                    TemStr = "";
                    Name = "";//***清空
                    stringadd = "For Binary";
                    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(Name, TemStr, TemStr.Length,0);
                   ilong = APIClass.mciSendString("setmedia time format milliseconds", TemStr, TemStr.Length, 0);
                    mc.state = State.mStop;
                    mc.iVol = GetNowVolumn();
                }
                catch
                {
                }
            }
       }

       /// <summary>
       /// 当前音量属性
       /// </summary>
       public intVolume
       {
            get
            {
                returnmc.iVol;
            }
            set
            {
                SetVolumeTo(value);
            }
       }

       /// <summary>
       /// 播放位置的属性
       /// </summary>
       public intPosition
       {
            get
            {
                returnmc.iPos;
            }
            set
            {
                StepTo(value);
            }
       }

       /// <summary>
       /// 播放
       /// </summary>
       public voidplay()
       {
            TemStr = "";
            //if(mc.state == State.mStop)
            //{
                TemStr = TemStr.PadLeft(127, Convert.ToChar(""));
                APIClass.mciSendString("play media", TemStr, TemStr.Length, 0);
                SetVolumeTo(200);
                mc.state = State.mPlaying;
            //    return;
            //}
            //RepeatPlay();
       }

       /// <summary>
       /// 停止
       /// </summary>
       public voidStopT()
       {
            TemStr = "";
            TemStr = TemStr.PadLeft(128, Convert.ToChar(""));
            ilong = APIClass.mciSendString("close media", TemStr, TemStr.Length, 0);
            ilong = APIClass.mciSendString("close all", TemStr, TemStr.Length, 0);
            mc.state = State.mStop;
       }

       /// <summary>
       /// 暂停
       /// </summary>
       public voidPuase()
       {
            TemStr = "";
            TemStr = TemStr.PadLeft(128, Convert.ToChar(""));
            ilong = APIClass.mciSendString("pause media", TemStr, TemStr.Length, 0);
            mc.state = State.mPuase;
       }

       /// <summary>
       /// 循环播放
       /// </summary>
       public voidRepeatPlay()
       {
            TemStr = "";
            TemStr = TemStr.PadLeft(128, Convert.ToChar(""));
            ilong = APIClass.mciSendString("play media repeat", TemStr,TemStr.Length, 0);
            SetVolumeTo(200);//设置初始化的音量大小
            mc.state = State.mPlaying;
       }

       /// <summary>
       /// 快进\快退
       /// </summary>
       public voidStepTo(int steps)
       {
            if(steps < 0)
            {
                TemStr = "";
                steps = -steps;
                TemStr = TemStr.PadLeft(128, Convert.ToChar(""));
                ilong = APIClass.mciSendString("step mediaby reverse", TemStr, steps, 0);
                mc.state = State.mPlaying;
            }
            else
            {
                TemStr = "";
                TemStr = TemStr.PadLeft(128, Convert.ToChar(""));
                ilong = APIClass.mciSendString("step mediaby", TemStr, steps, 0);
                mc.state = State.mPlaying;
            }
       }

       ///////////////////////////////////////////
       //音量控制
       /// <summary>
       /// 获取当前音量
       /// </summary>
       /// <returns></returns>
       public intGetNowVolumn()
       {
            intvolumn = 0;
            TemStr = "";
            TemStr = TemStr.PadLeft(128, Convert.ToChar(""));
            ilong = APIClass.mciSendString("status media volumn", TemStr, volumn,0);
            mc.state = State.mPlaying;
            returnvolumn;
       }

       /// <summary>
       /// 设置音量
       /// </summary>
       /// <param name="volume">设置的值</param>
       public voidSetVolumeTo(int volume)
       {
            TemStr = "";
            volume *= 10;
            TemStr = TemStr.PadLeft(128, Convert.ToChar(""));
            ilong = APIClass.mciSendString("setaudio media volume to " +volume.ToString(), TemStr, 128, 0);
            mc.iVol = volume;
            mc.state = State.mPlaying;
       }

       /// <summary>
       /// 播放完就停止播放
       /// </summary>
       /// <returns></returns>
       public boolEndToStop()
       {
            if(mc.iPos == Duration)
            {
                StopT();
                returntrue;
            }
            else
            {
                returnfalse;
            }
       }

       /// <summary>
       /// 得到文件路径
       /// </summary>
       /// <param name="name"></param>
       /// <returns></returns>
       private stringGetCurrPath(string name)
       {
            if(name.Length < 1)
            {
                return"";
            }
            name = name.Trim();
            name = name.Substring(0,name.Length - 1);
            returnname;
       }

       //总时间
       public intDuration
       {
            get
            {
                durLength = "";
                durLength =durLength.PadLeft(128, Convert.ToChar(" "));
                intilog = APIClass.mciSendString("status media length", durLength,durLength.Length, 0);
                durLength = durLength.Trim();
                if(durLength == "")
                {
                    return0;
                }
                return(int)(Convert.ToDouble(Convert.ToInt32(durLength)) / 1000f);
            }
       }

       //当前时间
       public intCurrentPosition
       {
            get
            {
                durLength = "";
                durLength =durLength.PadLeft(128, Convert.ToChar(" "));
                intilog = APIClass.mciSendString("status media position", durLength,durLength.Length, 0);
                durLength = durLength.Trim();
                mc.iPos = (int)(Convert.ToDouble(Convert.ToInt32(durLength)) / 1000f);
                returnmc.iPos;
            }
       }

       //录音
       /// <summary>
       /// 初始化录音环境
       /// </summary>
       /// <returns></returns>
       public boolInitalDevice()
       {
            durLength = "";
            durLength = durLength.PadLeft(128, Convert.ToChar(""));//11025
            ilong = APIClass.mciSendString("set media bitpersample 8", durLength,durLength.Length, 0);
            ilong = APIClass.mciSendString("set media samplespersec 11025",durLength, durLength.Length, 0);
            ilong = APIClass.mciSendString("set media channels 2", durLength,durLength.Length, 0);
            ilong = APIClass.mciSendString("set media format tag pcm", durLength,durLength.Length, 0);
            returntrue;
       }

       /// <summary>
       /// 开始录音
       /// </summary>
       /// <returns></returns>
       public boolBeginRecord()
       {
            durLength = "";
            durLength = durLength.PadLeft(128, Convert.ToChar(""));
            ilong = APIClass.mciSendString("close My", durLength, durLength.Length,0);
            try
            {
                ilong = APIClass.mciSendString("open newtype waveaudio alias My", durLength, durLength.Length, 0);
                ilong = APIClass.mciSendString("recordMy", durLength, durLength.Length, 0);
            }
            catch(Exception ex)
            {
                ex.Message.ToString();
            }
            returntrue;
       }

       /// <summary>
       /// 保存录音
       /// </summary>
       /// <param name="path">保存路径</param>
       public voidSaveMusic(string path)
       {
            durLength = "";
            durLength = durLength.PadLeft(128, Convert.ToChar(""));
            try
            {
                ilong = APIClass.mciSendString("save My"+ path, durLength, durLength.Length, 0);
                APIClass.mciSendString("close My", durLength, durLength.Length,0);
            }
            catch(Exception ex)
            {
                ex.Message.ToString();
            }
       }

       /// <summary>
       /// 停止录音
       /// </summary>
       public voidStopRecord()
       {
            durLength = "";
            durLength = durLength.PadLeft(128, Convert.ToChar(""));
            try
            {
                APIClass.mciSendString("stop My", durLength, durLength.Length,0);
            }
            catch(Exception ex)
            {
                ex.Message.ToString();
            }
       }

       /// <summary>
       /// 暂停录音
       /// </summary>
       public voidPauseRecord()
       {
            durLength = "";
            durLength = durLength.PadLeft(128, Convert.ToChar(""));
            try
            {
                APIClass.mciSendString("pause My", durLength, durLength.Length,0);
            }
            catch(Exception ex)
            {
                ex.Message.ToString();
            }
       }

       /// <summary>
       /// 继续录音
       /// </summary>
       public voidResumeRecord()
       {
            durLength = "";
            durLength = durLength.PadLeft(128, Convert.ToChar(""));
            try
            {
                APIClass.mciSendString("resume My", durLength, durLength.Length,0);
            }
            catch(Exception ex)
            {
                ex.Message.ToString();
            }
       }
   }

   ////////////////////////////////////
   public classAPIClass
   {
       [DllImport("kernel32.dll",CharSet = CharSet
       public staticextern intGetShortPathName(string lpszLongPath, string shortFile, intcchBuffer);

       [DllImport("winmm.dll",EntryPoint = "mciSendString",CharSet = CharSet
       public staticextern intmciSendString(string lpstrCommand, string lpstrReturnString, intuReturnLength, int hwndCallback);
   }
}



作者: admin    时间: 2016-11-16 22:53
[attach]353[/attach]
作者: admin    时间: 2016-11-16 22:58
[attach]354[/attach]




欢迎光临 四联光电智能照明论坛 (http://5xhome.com/) Powered by Discuz! X3.2