2008年12月28日 星期日

[C++] 自己寫播放 mp3 音樂程式 (3 行搞定) -- Wmp3

wmp3c

(下載 library source code)

這是一個克羅埃西亞人, 基於 LIBMAD 0.15.1b 解碼器寫的一個方便工具類別. 在 VS 2008 下幾乎不用修改就能編譯直接使用. (修改 pow 與 sqrt 的參數型態, 即可正確編譯完成). 相當方便簡潔.

下面是範例程式:

WMp3* mp3 = new WMp3;

mp3->OpenMp3File(argv[1],2000); // 2000 是 buffer size

mp3->Play();

看吧, 這三行就可以播放 mp3 音樂檔.

如何把這東西加到我的 project ?

Step 1: 取消 Precompiled Headers

詳細作法:

[Project]->[Properties] -> [C/C++] -> [Precompiled Headers] -> 選擇 Not Using Precompiled Headers

Precompiled

Step 2: 把 wmp3class_source\src 裡面的一堆 source 與 header files 加進你的 project (注意: example.cpp 不用)

Step 3: 把 winmm.lib 加到你的專案

詳細作法:

[Project]->[Properties] -> [Linker] -> [Input] -> [Additional Dependencies]: winmm.lib

winmm

Step 4: 加入 #include "wmp3.h"

Step 5: 直接開始編譯 (會出現一堆錯誤!! 別怕)

修正 1: pow 與 sqrt 的參數型態為 float

修正 2: 因為 VS2008 預設專案為 Unicode, 所以一些呼叫預設會是 Unicode 版本方式呼叫.

例如: MessageBox 預設為轉成 MessageBoxW, 所以會有下面的錯誤.

errorMessage

最簡單的方法, 就是把那些出錯的 MessageBox 呼叫, 改成 MessageBoxA 強制使用 Ascii 版本. 即可解決

標準解法: 應該把裡面的 char 改成 Uncode 版本的 TCHAR 重新編譯.

Step 6: 測試

WMp3* mp3 = new WMp3;

mp3->OpenMp3File("c:\\test.mp3",2000); // 2000 是 buffer size

mp3->Play();

缺點: CPU 需求比較大一點, 以我的電腦 Intel Pentium Mobile Processor 1.4 G 來說, 執行 example.exe 播放 mp3 音樂大致需要 8% ~ 18%, 而 foobar2000 大約為 1%.

我想可能是 example.cpp 裡面為了簡單只用 sleep 的方式檢查 mp3 播放狀態, 並沒有使用高效率的方法處理的原因.

如果你像我一樣想需要一個很簡單得 mp3 播放功能的程式, 這東西我很滿意.

4 則留言:

  1. 謝謝你, 希望文章對你有幫助.

    Enjoy.

    回覆刪除
  2. Hello板主

    那個連結好像死了

    不之可否把麻煩您再次弄個連結

    或著寄給小弟

    非常急需>"<

    mail:
    yuancheneric@gmail.com


    感激不盡

    回覆刪除
  3. 1. fixed.
    2. you can go to the home page: http://www.underbit.com/products/mad/

    Thank you!
    Jing.

    回覆刪除
  4. 不好意思,我是一位初學者
    我想要寫出 DEV C++ 音樂播放器
    所以 我想請版主
    可以寫一個簡單的的播放程式 給我做為參考嗎

    這是我的信箱:as6309123@yahoo.com.tw

    回覆刪除