- 注册时间
- 2004-8-29
- 最后登录
- 1970-1-1
|
- //全局常量定义
- char sam[9][8]={
- "44100Hz",
- "48000Hz",
- "32000Hz",
- "22050Hz",
- "24000Hz",
- "16000Hz",
- "11025Hz",
- "12000Hz",
- " 8000Hz"};
- int bitrx1[15]={1,32,40,48,56,64,80,96,112,128,160,192,224,256,320};
- char bitr1[15][4]={
- " 0",
- " 32",
- " 40",
- " 48",
- " 56",
- " 64",
- " 80",
- " 96",
- "112",
- "128",
- "160",
- "192",
- "224",
- "256",
- "320"
- };
- int bitrx2[15]={1,8,16,24,32,64,80,56,64,128,160,112,128,256,320};
- char bitr2[15][4]={
- " 0",
- " 8",
- " 16",
- " 24",
- " 32",
- " 64",
- " 80",
- " 56",
- " 64",
- "128",
- "160",
- "112",
- "128",
- "256",
- "320"
- };
- char idheader[4]="TAG";
- char ID3header[4]="ID3";
- long mp3maxtime;
- char mp3infotxt[100];
- void getmp3info(int filename){
- long baseofs;
- char txtbuf[64];
- char mp;
- char r;
- char id3info[10];
- char mp3info[128];
- long framestart;
- char XBR;//0:CBR,1:VBR
- ////////////////
- ///////////////
- //mp3_info
- long mp3_time;
- char mp3sam;
- char mp3soundm;
- char mp3ver;
- char mp3bitrate;
- long mp3filelen;
- long maxframe;
- int vbrbit;
- char a;
- ////////////////
- framestart=0;
- /* if(strstr(filename,"mp3")==NULL || strstr(filename,"MP3")==NULL){
- mp3maxtime=0;sprintf(mp3infotxt,"注意:歌曲信息仅支持MP3文件!");
- return;
- }*/
-
- mp=fopen(filename,"r");
- if(mp==0){fclose(mp);mp3maxtime=1;return;}
- for(baseofs=0;fgetc(mp)==0;){}
- baseofs=ftell(mp)-1;
- framestart=framestart+baseofs;
- fseek(mp,0,SEEK_END);
- mp3filelen=ftell(mp);
- rewind(mp);
- fseek(mp,baseofs,0);
- fread(id3info,1,10,mp);
- id3info[3]=0;
- if(strcmp(id3info,ID3header)==0){
- framestart = (id3info[6]&0x7F)*0x200000+(id3info[7]&0x7F)*0x400+(id3info[8]&0x7F)*0x80+(id3info[9]&0x7F)+10;
- }
- mp3filelen=mp3filelen-framestart;
- fseek(mp,framestart,0);
- fread(mp3info,1,128,mp);
- fclose(mp);
- mp3ver=mp3info[1]&0x18;
- mp3ver=mp3ver>>3;
- mp3sam=mp3info[2]&0x0c;
- mp3sam=mp3sam>>2;
- mp3soundm=mp3info[3]&0xc0;
- mp3soundm=mp3soundm>>6;
- mp3bitrate=mp3info[2]&0xf0;
- mp3bitrate=mp3bitrate>>4;
- for(r=0;r<123;r++){
- if(mp3info[r]=='X'&&mp3info[r+1]=='i'&&mp3info[r+2]=='n'&&mp3info[r+3]=='g')
- {XBR=1;goto OUTER;}
- }
- XBR=0;
- OUTER:
- memset(mp3infotxt,0x20,50);
- memcpy(mp3infotxt,"歌曲信息: 128kbps 44100Hz Mono",31);
- if(XBR==0){
- memcpy(mp3infotxt+41,"CBR",3);
- if(mp3ver==3){memcpy(mp3infotxt+10,bitr1[mp3bitrate],3);mp3maxtime=mp3filelen/(bitrx1[mp3bitrate]*1000/8);}
- else {memcpy(mp3infotxt+10,bitr2[mp3bitrate],3);mp3maxtime=mp3filelen/(bitrx2[mp3bitrate]*1000/8);}
- }
- else{
- memcpy(mp3infotxt+41,"VBR",3);
- maxframe=mp3info[47]+mp3info[46]*256+mp3info[45]*256*256+mp3info[44]*256*256*256;
- vbrbit=mp3filelen/(maxframe*26/1000)*8/1000;
- sprintf(txtbuf,"%d",vbrbit);
- memcpy(mp3infotxt+10,txtbuf,strlen(txtbuf));
- mp3maxtime=maxframe*26/1000;
- }
- if(mp3ver>0)mp3ver--;
- mp3ver=2-mp3ver;
- memcpy(mp3infotxt+18,sam[mp3sam+mp3ver*3],7);
- if(mp3soundm==0)memcpy(mp3infotxt+26,"立体声",7);
- else if(mp3soundm==1)memcpy(mp3infotxt+26,"联合立体声",13);
- else if(mp3soundm==2)memcpy(mp3infotxt+26,"混合立体声",13);
- else memcpy(mp3infotxt+26,"单声道",4);
- }
复制代码 说明:
filename为需要解析的MP3全路径
解析后会把信息保存在全局变量mp3infotxt里,包含比特率,采样,声道
同时会把Mp3歌曲长度(秒)到mp3maxtime中 |
|