第一種是利用DirectX
1.安裝了DirectX SDK(有9個DLL文件)。這裏咱們只用到MicroSoft.DirectX.dll和 Microsoft.Directx.DirectSound.dll
2.引入DirectX 的DLL文件的名字空間:
javascript
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 Libraryhtml
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();
}
|
第三種:引用SoundPlayerjava
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被設置(打開了文件),則文件將會自動播放。完整代碼以下:windows
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.aspxoop
2. Ctlcontrols屬性動畫 Ctlcontrols屬性是AxWindowsMediaPlayer的一個重ui 要屬性, 此控件中有許多經常使用成員。this (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