C#播放音频文件的方式:

播放系统事件声音使用System.Media.SoundPlayer播放wav使用MCI Command String多媒体设备程序接口播放mp3,wav,avi等使用WindowsMediaPlayer的COM组件来播放(可视化)使用DirectX播放音频文件使用Speech播放(朗读器,可朗读文本)

这里讲不需要引用dll就能播放音频的几种方式:

1、播放系统事件声音

System.Media.SystemSounds.Asterisk.Play(); //星号

System.Media.SystemSounds.Beep.Play(); //提示音

System.Media.SystemSounds.Exclamation.Play(); //感叹

System.Media.SystemSounds.Hand.Play(); //协助

System.Media.SystemSounds.Question.Play(); //问题

2、使用MCI Command String播放音频文件,可以支持多种格式(mp3,wav,avi),且不需要额外引用dll,可以循环播放音频

public class AudioPlayer

{

public AudioPlayer()

{

}

//定义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); //单次播放

//APIClass.mciSendString("play media repeat", 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

);

}

其他请参考:

https://kernel.blog.csdn.net/article/details/50845805

C#播放语音和字幕实列:

https://download.csdn.net/download/lvxingzhe3/88657604

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: