团队过绳子不许碰绳子:C读取MP3头部和尾部信息的代码

来源:百度文库 编辑:中财网 时间:2024/04/29 21:41:32
 Mp3的文件头 长10字节.主要保存ID3、ID3版本和副版本信息,以及Flag和帧长的信息。

Mp3尾部 128字节大小的空间中包含了Header(尾部头,4字节),Title(歌曲名称,30字节),Artilst(艺术家30字节),Album(专辑,30字节),Year(发行年份,4字节),Comment(评论,30字节),Conre(?,1字节)
需要使用的函数  fseek()   fread() 
 代码如下: 
 /* 
 Alias 2008-09-20 
 */

#include 
FILE *fp;
// Tag_header__Start
struct Tag_header{
char Header[3]; // It must be 'ID3'
char ver; // The version of ID3
char ReVer; // the subversion of ID3
char Flag;
char Size[4];
};
// Tag_header__End


// Tag_Trailer__Start
struct Tag_Trailer{
char Header[3];
char Title[30];
char Artist[30];
char Album[30];
char Year[4];
char Comment[30];
char Cenre[1];};
// Tag_GetTrailer__End


struct Tag_header Mp3Header;
struct Tag_Trailer Mp3Trailer;

main()
{


// 01.mp3是我测试时用的MP3的名称


fp = fopen("01.mp3","r+");
if(fp == NULL)
{
printf("No such file");
}
else
{
Tag_GetHeader();
Tag_GetTrailer();
}

printf("\n%s\n",Mp3Trailer.Title);
printf("%s\n",Mp3Trailer.Artist);
printf("%s\n",Mp3Trailer.Album);
printf("%s\n",Mp3Trailer.Year);
printf("%s\n",Mp3Trailer.Comment);
fclose(fp);
}

void Tag_GetTrailer()
{
// Get Header
fseek(fp,-128,SEEK_END);
fread(Mp3Trailer.Header,3,1,fp);
// Get Title
fseek(fp,-125,SEEK_END);
fread(Mp3Trailer.Title,30,1,fp);
// Get Artist
fseek(fp,-95,SEEK_END);
fread(Mp3Trailer.Artist,30,1,fp);
// Get Album
fseek(fp,-65,SEEK_END);
fread(Mp3Trailer.Album,30,1,fp);
// Get Year
fseek(fp,-35,SEEK_END);
fread(Mp3Trailer.Year,4,1,fp);
// Get Comment
fseek(fp,-31,SEEK_END);
fread(Mp3Trailer.Comment,30,1,fp);
// Get Cenre
fseek(fp,-1,SEEK_END);
fread(Mp3Trailer.Cenre,1,1,fp);
}
void Tag_GetHeader()
{
// Get ID3 Tag
fseek(fp,0,SEEK_SET);
fread(Mp3Header.Header,sizeof(Mp3Header.Header),1,fp);
// Get ID3 Version
fseek(fp,3,SEEK_CUR);
fread(Mp3Header.ver,sizeof(Mp3Header.ver),1,fp);
// Get ID3 Revision
fseek(fp,4,SEEK_CUR);
fread(Mp3Header.ReVer,sizeof(Mp3Header.ReVer),1,fp);
// Get ID3 Flag
fseek(fp,5,SEEK_CUR);
fread(Mp3Header.Flag,sizeof(Mp3Header.Flag),1,fp);
// Get ID3 Size
fseek(fp,6,SEEK_CUR);
fread(Mp3Header.Size,sizeof(Mp3Header.Size),1,fp);

}