Menu
0 Comments

MP3文件的结构与编程 – findumars

有个对象爱mp3,为了学到MP3,写了本人顺序,从本人特意的音乐下载的MP3搜索,一旦下载了几千首歌。这时对象焦急,这些MP3歌曲的名字都是用1,2,3,4,。。数字命名,开端从事很不便宜。尽管MP3戏剧器可以读这首歌的MP3文件通知,但歌曲文件本人是对某人不利本人的网办理。因而你想写本人小顺序,无意识的改名MP3。查了穿着的一部分材料,对MP3文件的布置探究。

对MP3的布置探究,你不克不及做什么探究ID3)技术援助委。ID3)技术援助委是一首MP3音乐文件的附加通知,它可以在MP3显示额定的歌、和宁静典型的通知,为了便宜很多歌曲的办理。ID3)技术援助委的裂隙不使发生 MP3的戏剧,但以防不注意,这亦很多吵闹办理音乐文件。以防你在网上下载 MP3,它的最合适的先前写了本人预安装的ID3通知。ID3,普通是定居本人mp3文件的着手或末了的几多八位位组内,夸大了MP3歌唱家,冠军的,集邮簿,年头,风骨等通知,这些通知高位ID3通知,ID3通知是分为两个版本,V1和V2版本。

穿着:v1版的ID3在mp3文件的末了128八位位组,在开端的三个刻的指示牌,其次是歌曲通知。

v2版普通定居MP3的开端,可以希腊字母第12字歌词,大使满意通知集邮簿图片。

但故障ISO国际基准MP3的ID3)技术援助委,ID3算法的各式各样的版本眼前只切契约基准,不注意人逼迫玩家或编码顺序必需证实它。

粗糙的有ID3v1两版本,因有轨道包含量不注意精确地解释,因而米迦勒 1997是改良Mutschler,该版本的绍介。基本事实两八位位组使从事凡例运动场。,有本人00八位位组的指示牌,宁静八位位组顶替序列号,ID3算法可以证实的剧目量。ID3的八位位组附件 v证实多达255个轨道数,考虑超越256的创新纪录的概率。,这种更妥是很有理的。无论如何ID3v1独自地128八位位组可以运用,以防你想贮存更多的通知在MP3,譬如歌词,专辑图片等,很明显,这是做不到的如愿以偿的,因而有ID3v2。ID3v2眼前普通4个版本,但流传的戏剧软件普通只证实第三版。,既。因记载在MP3 ID3v1,ID3v2最前部记载在MP3文件。。这执意存款。,The operation of ID3V2 is slower than ID3V1。和ID3v2布置比ID3v1的布置要复杂得多,但一般地说比前者和屈伸。

但朕只需求读取MP3的冠军的,提供辨析idv1是不敷的,这时的idv2否那么多,,我不注意idv2深化探究。

满足ID3v1和每个)技术援助委使从事的八位位组如次:

char 头[ 3 ] 头上的)技术援助委必需是)技术援助委或不注意)技术援助委
char 冠军的[ 30 ] /*冠军的*/
char 手艺人[ 30 ] /*作者*/
char 专辑[ 30 ] /*专集*/
char 年[ 4 ] /*出品年头*/
char 评论[ 30 ] /*凡例*/
char Genre;    /*典型*/

您可以如次精确地解释本人布置来希腊字母第12字MP3通知:

typedef struct _MP3INFO MP3通知布置
{
char 分清[ 3 ] )技术援助委的三个字母
这是故障本人文件,可以用来分清通知满足
char 冠军的[ 31 ] //信任,30八位位组
char 手艺人[ 31 ] //歌唱家名,30八位位组
char 专辑[ 31 ] //所属标明,30八位位组
char 年[ 5 ] //年,4八位位组
char 评论[ 29 ] //正文,28八位位组
unsigned char reserved;  //保存位,1八位位组
unsigned char reserved2; //保存位,1八位位组
unsigned char reserved3; //保存位,1八位位组
} MP3INFO;
上面的加密可以复杂:

 #include “”
#include “”
#include “”
#define MAX 128

typedef struct _MP3INFO MP3通知布置
{
char 分清[ 3 ] )技术援助委的三个字母
这是故障本人文件,可以用来分清通知满足
char 冠军的[ 31 ] //信任,30八位位组
char 手艺人[ 31 ] //歌唱家名,30八位位组
char 专辑[ 31 ] //所属标明,30八位位组
char 年[ 5 ] //年,4八位位组
char 评论[ 29 ] //正文,28八位位组
unsigned char reserved;  //保存位,1八位位组
unsigned char reserved2; //保存位,1八位位组
unsigned char reserved3; //保存位,1八位位组
} MP3INFO;

int 次要(int argc, char* argv[])
{
FILE * fp;
unsigned char mp3tag[128] = {0};
MP3INFO mp3info;
char oldname[MAX],新的[最大],CMD [最大]

fp = fopen(G:/ / MP3 /调试/,RB
if (NULL==fp)
{
printf(吐艳 read file error!!”);
return 1;
}
fseek(fp,-128,SEEK_END);
fread(&mp3tag,1,128,FP)
if(!((mp3tag[0] == ”T”|| mp3tag[0] == ”t”)
&&(mp3tag[1] == ' ' mp3tag[1] == A)
&&(mp3tag[2] == ”G”|| mp3tag[0] == ”g”)))
{
printf(mp3 file is error!!”);
停业文件(FP) ;
return 1;
}

 memcpy((void *)); //学到tag
memcpy((void *)); 把这首歌的名字
memcpy((void *)); 从作者
memcpy((void *)); 学到记载的名字
memcpy((void *)); //学到年
memcpy((void *)); 把笔记
memcpy((void *)&); //学到保存
memcpy((void *)&);
memcpy((void *)&);
fclose(FP)
if (strlen == 0)
{
printf(赋予头衔 is null/n”);
return 1;
}
strcpy(oldname,””);
sprintf(newname,”%”,);
sprintf(cmd,”rename G://mp3//Debug//%s %s”,oldname,新清晰度)
printf(%s / N, CMD)
system(CMD)

return 0;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注