2010-01-12 137 views
6

幾年前,我在DShow/DSound的附近編寫了一些util庫,讓我在Windows C++應用程序中播放MP3。這仍然是在C++/MFC應用程序中執行此操作的正常方式,還是已包含在常規Windows API中的DirectX區域?從Visual C++播放MP3的最簡單方法

動機就是我們對WAV使用標準的Windows PlaySound方法,並且希望能夠使用類似的簡單API播放MP3,無論是由Windows提供的還是我們編寫的用於包裝更復雜功能的東西。

編輯:這是一個大型的商業閉源項目。我們只想玩簡單的東西,爲圖書館付出很多錢不會飛。

回答

-1

你可以看看BASS。這是一個簡單的使用音頻庫,免費用於非商業用途。

6

您可以使用DirectShow的,但它不是DirectX的一部分或不再依賴於第三方庫像BassFModmpg123甚至libwmp3

如果你不想使用DirectShow的了(?但爲什麼,如果你的現有代碼繼續工作改變),你可以使用MCI

mciSendString("open la_chenille.mp3 type mpegvideo alias song1", NULL, 0, 0); 
mciSendString("play song1", NULL, 0, 0); 
mciSendString("close song1", NULL, 0, 0); 
+0

一些潛在的陷阱在這個片段: 1.使確保文件路徑正確引用「 \」 2.我發現在「播放歌曲1」之後立即發送「關閉歌曲1」會導致聲音不能播放。即聲音將被打開,然後立即關閉。 – Dave 2014-04-01 16:42:24

0

如果你不想支付任何許可和想要在室內做,解析你的mp3文件並傳遞給XAudio2。 這是一件你可以做一次(最多2-3小時)並且一直使用的東西。 :P

+0

這比DirectShow更好嗎?兩者都是MS API,但用戶已經擁有DShow(可能)。有優勢嗎? – 2010-01-12 15:56:21

+0

DirectShow有另一個目標,對於「多媒體」而言,多媒體的感覺非常廣泛。 (無論如何現在不再更新) XAudio2是DirectSound的替代品,是一款低級Audio API跨平臺的Xbox360/PC。微軟希望把它作爲唯一在Windows上使用的API。 – feal87 2010-01-12 20:05:39

0

只要將PlaySound()嵌入WAV文件,它本身就支持MP3。 人們並沒有意識到WAV是一種容器格式。 下載ffmpeg的工具來轉換頭和維護編解碼器:

的ffmpeg -i input.mp3 -c複製-f WAV embedded_mp3.wav