四联光电智能照明论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2920|回复: 2
打印 上一主题 下一主题

用C#做一个调用API的MP3播放器

[复制链接]
  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    跳转到指定楼层
    楼主
    发表于 2016-11-16 22:44:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    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);
       }
    }


  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    沙发
     楼主| 发表于 2016-11-16 22:53:20 | 只看该作者

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    板凳
     楼主| 发表于 2016-11-16 22:58:40 | 只看该作者

    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Silian Lighting+ ( 蜀ICP备14004521号-1 )

    GMT+8, 2024-5-2 16:56 , Processed in 1.062500 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表