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); } }
|