Introduction
This program reads the first frame of an MP3 file and displays all the header information like, version, layer, bit rate, sampling frequency, etc.
Using the code
This happens to be the simplest thing on this planet! Check out the source code... you need to know about the MPEG header.
do
{
curch=fgetc(fp);
if(curch==255)
{
curch=fgetc(fp);
if(tolower(curch/16)==15) flag1=1;
}
}while(flag1==0);
fpos_t filepos;
char firstframeposition[10];
fgetpos(fp,&filepos);
filepos-=2;
int firstheaderpos=filepos;
_ltoa(firstheaderpos,firstframeposition,10);
m_strinfo="First frame found at byte :";
m_strinfo+=firstframeposition;
m_ctlinfo.AddString(m_strinfo);
int impegversion=tolower(((curch%16)/4)/2);
if(impegversion==1) m_strinfo="MPEG 1 ";
if(impegversion==0) m_strinfo="MPEG 2 ";
int layer=tolower((((curch%16)/4)%2)*2+(((curch%16)%4)/2));
CString mpeglayer[4]={"Reserved","Layer III","Layer II","Layer I"};
m_strinfo+=mpeglayer[layer];
m_ctlinfo.AddString(m_strinfo);
if(layer!=1) return 1;
int protectbit=tolower(((curch%16)%4)%2);
if(protectbit==1) m_strinfo="CRCs : No";
else m_strinfo="CRCs : Yes";
m_ctlinfo.AddString(m_strinfo);
curch=fgetc(fp);
int bitratetable[2][16]={0,8,16,24,32,64,80,56,64,128,160,
112,128,256,320,0,0,32,40,48,56,64,80,96,
112,128,160,192,224,256,320,0};
int mp3bitrate=bitratetable[impegversion][tolower(curch/16)];
char mp3bps[2];
_itoa(mp3bitrate,mp3bps,10);
m_strinfo="Bitrate (kbps) : ";
m_strinfo+=mp3bps;
m_ctlinfo.AddString(m_strinfo);
long int frequencytable[2][4]={22050,24000,16000,0,44100,48000,32000,0};
int mp3frequency=frequencytable[impegversion][tolower((curch%16)/4)];
char mp3fs[10];
_itoa(mp3frequency,mp3fs,10);
m_strinfo="Frequency (Hz) : ";
m_strinfo+=mp3fs;
m_ctlinfo.AddString(m_strinfo);
int paddingbit=tolower(((curch%16)%4)/2);
if(paddingbit==0) m_strinfo="Padding : No";
else m_strinfo="Padding : Yes";
m_ctlinfo.AddString(m_strinfo);
int privatebit=tolower(((curch%16)%4)%2);
if(privatebit==0) m_strinfo="Private : No";
else m_strinfo="Private : Yes";
m_ctlinfo.AddString(m_strinfo);
curch=fgetc(fp);
CString channelmode[4]={"Stereo","Joint Stereo",
"Dual Channel","Single Channel"};
int ichannelmode=tolower((curch/16)/4);
m_ctlinfo.AddString(channelmode[ichannelmode]);
int copyrightbit=tolower(((curch%16)/4)/2);
if(copyrightbit==1) m_strinfo="Copyrighted : Yes";
else m_strinfo="Copyrighted : No";
m_ctlinfo.AddString(m_strinfo);
int originalbit=tolower(((curch%16)/4)%2);
if(originalbit==1) m_strinfo="Original : Yes";
else m_strinfo="Original : No";
m_ctlinfo.AddString(m_strinfo);
int emphasis=tolower((curch%16)%4);
if(emphasis==0) m_strinfo="Emphasis : None";
if(emphasis==1) m_strinfo="Emphasis : 50/15 ms";
if(emphasis==3) m_strinfo="Emphasis : CCITT J.17";
m_ctlinfo.AddString(m_strinfo);
int iframesize=(144000*mp3bitrate/mp3frequency)+paddingbit;
char framesize[5];
_itoa(iframesize,framesize,10);
m_strinfo="Framesize : ";
m_strinfo+=framesize;
m_ctlinfo.AddString(m_strinfo);
int iframes=(filesize-firstheaderpos)/iframesize;
char frames[10];
_itoa(iframes,frames,10);
m_strinfo="Frames : ";
m_strinfo+=frames;
m_ctlinfo.AddString(m_strinfo);
int iplaytime=toupper(iframes*26/1000);
char playtime[5];
_itoa(iplaytime,playtime,10);
m_strinfo="Length (in sec) : ";
m_strinfo+=playtime;
m_ctlinfo.AddString(m_strinfo);
Points of Interest
I learned about the MP3 file format... And this is my first project that I am uploading to the net.