2013-05-26 42 views
1

我已經做了一堆研究,但我不知道如何將.wav文件加載到內存中,然後播放它。另外,我希望能夠同時播放多個加載的.wav文件。C++ - 編碼視頻遊戲的聲音效果?

目前,我加載.wav文件到字符串緩衝區,然後調用:

PlaySound(stows(buffer).c_str(), NULL, SND_MEMORY); 

stows()是我創建了一個函數,其將字符串轉換成寬字符串。

我在做什麼錯/我能做些什麼更好?

編輯:我想現在使用SFML。我按照步驟here到T,但是當我嘗試編譯時,我收到了9個鏈接器錯誤。如果我使用靜態或動態dll,則無關緊要。

編輯2:我必須有VS2010 32位。我爲VS2010下載了SFML 2.0 32位,現在我下載了5個鏈接器錯誤。它說所有這些都發生在sfml-audio-s.lib中。

編輯3:我得到它編譯!但是,它根本不會玩任何東西。我使用VS進行調試並確認我正確打開WAV文件並將其存儲在Sound對象中,但是當我調用play()方法時,什麼都不會發生。此外,每次關閉程序時都會收到未處理的異常。

+0

您可能正在使用實際的音頻庫。 –

+2

你可以使用[sfml](http://www.sfml-dev.org/tutorials/2.0/audio-sounds.php) – ninMonkey

+0

@ IgnacioVazquez-Abrams你會推薦什麼實際的聲音庫? –

回答

0

我明白了!我結束了使用直接的聲音。我做了一個類來加載和播放基於教程的WAV文件,我發現here,這非常有幫助。

1

我有理由相信PlaySound不能混合兩個同時播放的聲音。你可以讓一個聲音中斷另一個聲音,當你的代碼正在做其他事情時(使用SND_ASYNC),你可以讓它在後臺播放,但是文檔很清楚地表明「如果播放另一個聲音,當前播放的聲音停止」 - 在SND_NOSTOP部分:如果未指定此標誌,PlaySound試圖阻止任何聲音 當前正在播放在同一過程中

(如果指定SND_NOSTOP,它如果另一個人已經在播放,則不播放此聲音)。

鏈接到完整文檔:PlaySound

恐怕我不知道你是如何使用多個聲音同時創建聲音播放的,因爲我從來沒有在PC上做過這樣的事情(我使用過硬件混音器,而且我還編寫了合併代碼兩個聲音從一個文件,但這幾乎肯定不是你想要的)