第一种是利用DirectX
1.安装了DirectX SDK(有9个DLL文件)。这里我们只用到MicroSoft.DirectX.dll和 Microsoft.Directx.DirectSound.dll
2.引入DirectX 的DLL文件的名字空间:
01
02
|
using
Microsoft.DirectX;
usingMicrosoft.DirectX.DirectSound;
|
3.建立设备
Device dv=newDevice();
4.设置CooperativeLevel。因为windows是多任务的系统,设备不是独占的
SecondaryBufferbuf=new SecondaryBuffer(@"snd.wav",dv);
5.开辟缓冲区SecondaryBufferbuf=new SecondaryBuffer(@"snd.wav",dv);
6.接下来就可以播放啦。第一个参数表示优先级别,0是最低的。第2个参数是播放方式,这里是循环播放。
buf.Play(0,BufferPlayFlags.Looping);
第二种是利用Microsoft speech object Library
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
///<summary
/// 播放声音文件
/// </summary>
/// <paramname="FileName">文件全名</param>
public
voidPlaySound(
string
FileName)
{
//要加载COM组件:Microsoft speech object Library
if
(!System.IO.File.Exists(FileName))
{
return
;
}
SpeechLib.SpVoiceClass pp =
new
SpeechLib.SpVoiceClass();
SpeechLib.SpFileStreamClass spFs =
new
SpeechLib.SpFileStreamClass();
spFs.Open(FileName, SpeechLib.SpeechStreamFileMode.SSFMOpenForRead,
true
);
SpeechLib.ISpeechBaseStream Istream = spFs
as
SpeechLib.ISpeechBaseStream;
pp.SpeakStream(Istream, SpeechLib.SpeechVoiceSpeakFlags.SVSFIsFilename);
spFs.Close();
}
|
第三种:引用SoundPlayer
01
02
|
System.Media.SoundPlayersndPlayer = newSystem.Media.SoundPlayer(Application.StartupPath+
@"/pm3.wav"
);
sndPlayer.PlayLooping();
|
第4种:利用Windows Media Player
新建一个C#的Windows Form工程(Windows应用程序),并且定义两个菜单按钮(menuItem1,menuItem2)。
选择菜单中的“工具”中的“自定义工具箱(添加/移除工具箱项)”,在自定义工具箱的窗口中,点击展开“COM 组件”项,选中“WindowMedia Player”选项。确定后在“工具箱”中便会出现“Windows Media Player”这一项,然后再将其拖至Form上,调整大小,系统在“引用”中自动加入了对此dll的引用,AxMediaPlayer就是我们使用的 Namespace与class。
在属性栏中设置好此控件的一些属性,为了方便,这里我把AutoStart设置成为true(其实默认是true),只要FileName被设置(打开了文件),则文件将会自动播放。完整代码如下:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
private
voidmenuItem1_Click(
object
sender, System.EventArgs e)
{
OpenFileDialogofDialog =
new
OpenFileDialog();
ofDialog.AddExtension=
true
;
ofDialog.CheckFileExists=
true
;
ofDialog.CheckPathExists=
true
;
//the nextsentence must be in single line
ofDialog.Filter= "VCD文件(*.dat)|*.dat|Audio文件(*.avi)|*.avi
|WAV文件(*.wav)|*.wav|MP3文件(*.mp3)|*.mp3|所有文件 (*.*)|*.*";
ofDialog.DefaultExt=
"*.mp3"
;
if
(ofDialog.ShowDialog()== DialogResult.OK)
{
// 2003一下版本 方法this.axMediaPlayer1.FileName = ofDialog.FileName;
this
.axMediaPlayer1.URL=ofDialog.FileName;
//2005用法
}
}
|
这里使用的是微软的播放器,大家也可以试试Winamp的控件,如果你只需要播放声音而不需要显示,你只要把AxMediaPlayer的Visible属性设置为false就可以了。
AxWindowsMediaPlayer的详细用法收藏
http://blog.csdn.net/brouse8079/archive/2007/10/17/1829885.aspx
2. Ctlcontrols属性 Ctlcontrols属性是AxWindowsMediaPlayer的一个重 要属性, 此控件中有许多常用成员。 (1) 方法play 用于播放多媒体文件,其格式为: 窗体名.控件名.Ctlcontrols.play() 如: AxWindowsMediaPlayer1.Ctlcontrols.play() ‘此处缺省窗体名是Me (2) 方法pause 用于暂停正在播放的多媒体文件,其格式为: 窗体名.控件名.Ctlcontrols.pause() 如: AxWindowsMediaPlayer1.Ctlcontrols.pause() (3) 方法stop 用于停止正在播放的多媒体文件,其格式为: 窗体名.控件名.Ctlcontrols.stop() 如: AxWindowsMediaPlayer1.Ctlcontrols.stop() (4) 方法fastforward 用于将正在播放的多媒体文件快进,其格式为: 窗体名.控件名.Ctlcontrols.fastforward() 如: AxWindowsMediaPlayer1.Ctlcontrols.forward() (5) 方法fastreverse 窗体名.控件名.Ctlcontrols.fastreverse() 如: AxWindowsMediaPlayer1.Ctlcontrols.fastreverse () 6. 属性CurrentPosition 用于获取多媒体文件当前的播放进度,其值是数值类 型,使用格式为: 窗体名.控件名.Ctlcontrols.currentPosition d1=AxWindowsMediaPlayer1.Ctlcontrols.currentPosi tion 其中d1 是一个整型变量。 7. 属性Duration 用于获取当前多媒体文件的播放的总时间,其值为数 值类型,其使用格式为: 窗体名.控件名.currentMedia.duration 如:d2 =AxWindowsMediaPlayer1.currentMedia.duration 其中d2是一个整型变量。 度,字符串格式。如“00:23”
None, Invisible 3=播放,6=正在缓冲,9=正在连接,10=准备就绪 player.PlayStateChange += new AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(player_PlayStateChange);private void player_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e) { // Test the current state of the player and display a message for each state. switch (e.newState) { case 0: // Undefined currentStateLabel.Text = "Undefined"; break; case 1: // Stopped currentStateLabel.Text = "Stopped"; break; case 2: // Paused currentStateLabel.Text = "Paused"; break; case 3: // Playing currentStateLabel.Text = "Playing"; break; case 4: // ScanForward currentStateLabel.Text = "ScanForward"; break; case 5: // ScanReverse currentStateLabel.Text = "ScanReverse"; break; case 6: // Buffering currentStateLabel.Text = "Buffering"; break; case 7: // Waiting currentStateLabel.Text = "Waiting"; break; case 8: // MediaEnded currentStateLabel.Text = "MediaEnded"; break; case 9: // Transitioning currentStateLabel.Text = "Transitioning"; break; case 10: // Ready currentStateLabel.Text = "Ready"; break; case 11: // Reconnecting currentStateLabel.Text = "Reconnecting"; break; case 12: // Last currentStateLabel.Text = "Last"; break; default: currentStateLabel.Text = ("Unknown State: " + e.newState.ToString()); break; } }
,字符串格式。如“03:24” 前媒体信息"Title"=媒体标题,"Author"=艺术 家,"Copyright"=版权信息,"Description"=媒体内 容描述,"Duration"=持续时间(秒),"FileSize"= 文件大小,"FileType"=文件类型,"sourceURL"=原 始地址 性名设置媒体信息 currentMedia.getItemInfo("Title") 放列表属性 包含媒体数 项目媒体信息,其子属性同wmp.currentMedia |
from:http://www.sufeinet.com/thread-459-1-1.html
http://www.cnblogs.com/xianyin05/archive/2009/05/05/1449967.html