windows播放函數PlaySound

來源:互聯網
上載者:User

在編寫windows程式時,很多時候要用到播放音樂的函數,而windows下就提供了一個函數PlaySound

首先說下這個函數的使用範圍,PlaySound函數用於播放一個音頻檔案,且這個檔案時wav格式(且只能是wav格式),如果你需要混音,比如同時播放兩首音樂,那就超出了Playsound的能力,你需要用directsound的庫

下面看一下百度百科中PlaySound函數的原型(http://baike.baidu.com/view/1014003.htm):

  BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);

pszSound就是你要播放的檔案路徑,fdwSound就是你要選擇的播放模式

(1) PlaySound("ring.wav",NULL,SND_FILENAME|SND_SYNC);

(2) PlaySound("ring.wav",NULL,SND_FILENAME|SND_ASYNC |SND_LOOP);

以上是常用的兩種播放形式,

(1)中是播放目錄下的ring.wav檔案,但是該函數阻塞,當ring.wav播放完畢才返回

(2)中的函數是迴圈播放,函數執行完立刻返回,也就是非阻塞式。

由上面可以看出SND_SYNC參數表示同步播放,也就是阻塞型。SND_ASYNC 表示非同步播放,非阻塞。SND_LOOP表示迴圈播放但是它必須和SND_ASYNC參數同時使用,如果是迴圈播放必然是非同步。

在播放音頻時,你可能會停止播放,PlaySound停止播放的辦法就是播放另一音頻,如果播放的音頻為空白,就會停止原來音頻。如下:

PlaySound(0,0,SND_FILENAME);

這個方法很明顯可以停止非同步播放模式,形如(2),但是(1)中是阻塞式,如果在不影響其他其他工作時,使用(1)播放就要新開一個線程。這時如果你想在住線程中用PlaySound(0,0,SND_FILENAME);停止播放音頻,就不會得到想要的結果。

主線程()                                                              播放線程()

{                                                                        {

       PlaySound(0,0,SND_FILENAME);                     PlaySound("ring.wav",NULL,SND_FILENAME|SND_SYNC);

}                                                                       }

這時主線程調用PlaySound(0,0,SND_FILENAME);不會停止播放而是阻塞在PlaySound函數,當播放線程中音頻播放完畢,主線程函數才會繼續執行。

所以如果想用PlaySound(0,0,SND_FILENAME);停止播放另一線程的同步播放模式,不會得到想要的結果

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.