原创 3.2 “頭部”回調函數header()

之所以要加上引號的原因是這個函數從名字上看是用於處理MP3幀頭的,實際情況是真正的幀頭解碼是在mad_header_decode函數中進行的,mad_header_decode函數負責填充struct mad_header結構: //fi

原创 3.1 輸入函數 input

Shwneo原創首發CSDN技術專欄,轉載請註明出處 在壓縮包裏提供的minimad.c示例參考中給出的input回調函數如下: /* * This is the input callback. The purpose of th

原创 一、MadLib基本工作過程

1.1同步方式和異步方式 MadLib是以幀爲單位解碼mp3文件的,所謂同步方式是指解碼函數在解碼完一幀後才返回並帶回出錯信息,異步方式是指解碼函數在調用後立即返回,通過消息傳遞解碼狀態信息。 1.2 Mad API 的調用順序 1、ma

原创 MFC透明位圖顯示函數

研究好久才弄好,註釋的比較詳細,不明白的函數可以參考MSDN   bool TransparentDIB(CBitmap * dib, /*要繪製的位圖*/ CDC * pDC, /*目標DC*/ CRect * rc

原创 關鍵數據結構之 解碼器對象mad_decoder

mad_decoder可以看作是整個解碼器的“核心”結構。它用c語言有限的對象機制實現了面嚮對象語言的部分功能。decoder封裝了一次解碼過程中的所有必要成分,包括用戶定義的消息、6個回調函數和相應的選項。mad_decoder結構在d

原创 3.4 “濾波器”回調函數filter

從MP3文件中提取出的子帶數據還不能直接用於輸出,之後還要經過一個“子帶複合”和MDCT運算之後纔會被還原爲與原始波形近似的PCM編碼流。在子帶複合和MDCT運算之前,libmad給了我們一個操作子帶數據的機會。通過重寫filter回調函

原创 MFC應用程序使用控制檯的方法

CreateFile函數除了可以新建和打開文件外,還可以建立Win32環境下的控制檯緩衝。此時CreateFile函數的返回值是控制檯緩衝的句柄。HANDLE console_write=CreateFile("CONOUT$",//系統

原创 3.3幀解碼和錯誤處理

相比頭部信息的解碼,MP3幀主數據(main data)的結構就不那麼直觀了。前面我們介紹過Mad中對應於MP3幀的結構struct mad_frame: //file:libmad-1.05b/frame.h;line:67~74 st

原创 三 回調函數

所謂回調函數(call-back),就是不被程序員調用而是被其他函數或過程調用的函數。通常利用函數指針實現。回調函數一般都具有指定的參數表格式以便正確地分配地址。 madlib開放給用戶的唯一接口就是6個回調函數,這6個回調函數都是以en

原创 Madlib及其之外

從開始寫Madlib源碼分析時算起到現在,差不多有半年了。Madlib系列一直斷斷續續,至今沒有完結。自知虧欠很多,只得在閒暇的時間彌補這半年的心不在焉。對Madlib的源碼分析裏還有N多沒有涉及到的東西尤其是Mp3解碼算法核心的東西,實

原创 關鍵數據結構之 輸入與輸出:mad_stream和mad_synth

在2.1-數據流向中我們總結出:一個mp3文件首先被嵌入到一個“輸入流結構”中,在解碼之後的PCM流存入“輸出結構”中,這兩個結構對應於mad_stream和mad_synth兩個結構,前者用於mp3文件的輸入和解碼流程的控制,後者用於存

原创 二 關鍵數據結構之數據流向

根據使用平臺的不同,你可以使用各種方法打開一個MP3文件,minimad.c中給出的是在UNIX下打開示例文件的方法,改寫成Windows的也不難: CFile file; if(!file.Open("E://A.mp3",CFile: