四联光电智能照明论坛
标题: 用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 |