天天看點

C#播放背景音樂的五種方法 Speech 使用API函數進行播放SoundPlayer 利用Windows Media Player

<code>speech</code>是一個朗讀器,我們寫一個文本<code>text</code>或者<code>string</code>,<code>speech</code>可以朗讀發音,支援異步操作使用友善,推薦使用。

<a href="http://www.cnblogs.com/maxie/p/3159994.html">speech兩種使用方法</a>

C#播放背景音樂的五種方法 Speech 使用API函數進行播放SoundPlayer 利用Windows Media Player
要加載com元件:microsoft speech object library
C#播放背景音樂的五種方法 Speech 使用API函數進行播放SoundPlayer 利用Windows Media Player

首先要安裝directx sdk。安裝好之後,在<code>c:\windows\microsoft.net\directx for managed code\1.0.2902.0</code>目錄下有在<code>.net</code>下可以使用的dll檔案。

引用添加引用<code>microsoft.directx.audiovideoplayback</code>

然後執行個體化<code>audo</code>類的對象,就可以播放包括<code>mp3</code>格式的音樂檔案了。

我們安裝了directx sdk(有9個dll檔案)

這裡我們隻用到microsoft.directx.dll和 microsoft.directx.directsound.dll

引入directx 的dll檔案的名字空間:

建立裝置

設定cooperativelevel。因為windows是多任務的系統,裝置不是獨占的

開辟緩沖區secondarybufferbuf=new secondarybuffer(@”snd.wav”,dv);

接下來就可以播放啦。第一個參數表示優先級别,0是最低的。第2個參數是播放方式,這裡是循環播放。

<code>windows</code>作業系統中的<code>winmm.dll</code>檔案中封裝了聲音處理的函數。在<code>c#</code>中我們可以通過平台調用的方式使用這裡邊的api函數來播放聲音。

下邊的類中使用了<code>playsound</code>、<code>sndplaysound</code>、<code>mcisendstring</code> 3個api函數來播放聲音。

其中mcisendstring還可以播放mp3格式的聲音。

soundplayer類的使用很簡單

其中play方法是異步方法,會在另一個線程中播放。如果我們有時候需要等聲音播放完畢之後再進行下一步操作。

即聲音播放需要阻塞目前線程。就可以使用<code>playsync()</code>方法。

<code>soundplayer</code>類的缺點:隻能播放<code>wav</code>檔案;在<code>winxp</code>下播放檔案比較大或位率比較高的情況,<code>playsync</code>同步播放會有播放不完全的問題。

這個問題的産生是由于<code>winmm.dll</code>的版本問題引起的。在<code>xp</code>下<code>winmm.dll</code>的版本是5。在<code>win7</code>下是6。<code>win7</code>下就沒有問題。如果要解決在<code>xp</code>下播放不完全的問題。可以使用<code>xp</code>下的錄音機打開聲音檔案,把聲音檔案另存為<code>7kbit/s</code>的位率格式,但這樣聲音效果就很差了。

其他使用方法

建立一個<code>c#</code>的<code>windows form</code>工程(<code>windows</code>應用程式),并且定義兩個菜單按鈕(<code>menuitem1</code>,<code>menuitem2</code>)。

選擇菜單中的“工具”中的“自定義工具箱(添加/移除工具箱項)”,在自定義工具箱的視窗中,點選展開“com 元件”項,選中“windowmedia player”選項。确定後在“工具箱”中便會出現“windows media player”這一項,然後再将其拖至form上,調整大小,系統在“引用”中自動加入了對此dll的引用,axmediaplayer就是我們使用的 namespace與class。

在屬性欄中設定好此控件的一些屬性,為了友善,這裡我把autostart設定成為true(其實預設是true),隻要filename被設定(打開了檔案),則檔案将會自動播放。完整代碼如下:

這裡使用的是微軟的播放器,大家也可以試試winamp的控件,如果你隻需要播放聲音而不需要顯示,你隻要把axmediaplayer的visible屬性設定為false就可以了。

轉載:http://blog.csdn.net/gatieme/article/details/50845805

繼續閱讀