2013-03-05 87 views
0

我花了一整天就這個問題和它的駕駛我堅果窗戶MP3解碼庫C C++

是否有人知道一個簡單的方法來一個MP3解碼,以一個簡單的16位PCM(波)文件?我需要的東西我可以與我的商業程序,所以我更喜歡.lib

我發現libmpg123.dll,但我無法弄清楚如何讓我的程序與msvc 2010中的DLL鏈接。我知道我需要添加一個引用,但是當我點擊'添加新的引用'我得到的是一個空的對話框,項目名稱和項目目錄標題,沒有什麼可以點擊。我試圖使用lib工具將.dll轉換爲.lib,但不斷抱怨.def文件格式不好。

我試圖建立madplayer但我不能罰款id3tag.h並沒有關於使用的libmad文檔或例子,我可以找到

拉梅看起來過於龐大

任何想法的一個快速解決方案一的.lib我可以聯繫,並用它做

謝謝你,史蒂夫

回答

4

mpg123是罰款。我可以看到你有獲得靜態庫(.lib)的麻煩。

有2種方法得到的lib:

  1. 構建的源代碼。它更靈活,但有點棘手。如果你下載源代碼,你可以通過路徑找到一個到VS2010的端口:ports \ MSVC++ \ 2010。但在這種情況下,您將面臨安裝YASM以及使用構建配置(似乎配置在源代碼包中沒有適當調整)的問題。
  2. 通過轉換.def文件來使用lib工具。由於二進制包已包含.h和.def文件,因此不需要源代碼。我將詳細解釋:

    1. 下載二進制文件(win32win64)並提取我們到D:\mpg123文件夾說。
    2. 運行從開始 - > Microsoft Visual Studio 2010 - > Visual Studio工具 - > Visual Studio命令提示符(2010)。
    3. 轉到您的文件夾cd D:\mpg123D:並運行:lib /def:libmpg123-0.dll.def(或調用def文件)。
    4. 現在,您的文件夾中已包含所需的.lib文件libmpg123-0.dll.lib

但是通知,該「框架和引用」屬性頁用來設置爲.NET框架組件,COM組件,或外部項目(MSDN)引用,你的情況,你應該指定其他鏈接依賴你的項目[配置屬性=>連接器=>輸入=>附加依賴項]。

+0

感謝一個簡單的MP3解碼器,我會盡力。我在http://fossies.org/linux/misc/mpg123-1.15.1.tar.gz/找到了源代碼,它有一個mscv ++ 2010項目,但它不能編譯。是否有必要先運行某種配置工具或某種東西?謝謝 – steveh 2013-03-06 00:55:18

+0

我已指定其他信息。試試看。我認爲lib工具也必須工作。 – Olexander 2013-03-06 01:02:39

+0

因爲構建源代碼可能非常痛苦:)並且沒有配置工具。 – Olexander 2013-03-06 01:12:15

1

從Olexander答案的偉大工程,太感謝你了

我有一個小東西添加,當你下載mpg123-1.15.1-x86.zip

你會看到libmpg123-0 .dll(dll)和libmpg123-0.dll.def用來製作的東西。如上所述。它更好地將名稱更改爲libmpg123-0.def,否則它會尋找一個名爲libmpg123-0.dll.dll這不是很好

除此之外,它很好。我無法相信這個消息在幾年前並沒有在互聯網上。感謝Olexander和感謝StackOverflow的

僅供參考,下面是一個使用mpg123的

#include "mpg123/mpg123.h" 

#define INBUFF 16384 
#define OUTBUFF 32768 


void loadMp3File(const char* filename) 
{ 
    mpg123_handle *mh; 
    unsigned char *buffer; 
    size_t buffer_size; 
    size_t done; 
    int err; 

    int channels, encoding; 
    long rate; 

    mpg123_init(); 
    mh = mpg123_new(NULL, &err); 
    buffer_size = mpg123_outblock(mh); 
    buffer = (unsigned char*) malloc(buffer_size * sizeof(unsigned char)); 

    /* open the file and get the decoding format */ 
    mpg123_open(mh, filename); 
    mpg123_getformat(mh, &rate, &channels, &encoding); 

    /* set the output format and open the output device */ 
    int m_bits = mpg123_encsize(encoding); 
    int m_rate = rate; 
    int m_channels = channels; 


    /* decode and play */ 
    for (int totalBtyes = 0 ; mpg123_read(mh, buffer, buffer_size, &done) == MPG123_OK ;) { 
     totalBtyes += done; 
    } 


    /* clean up */ 
    free(buffer); 
    mpg123_close(mh); 
    mpg123_delete(mh); 
    mpg123_exit(); 

}