• 大小: 9.22 KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2024-11-06
  • 语言: 其他
  • 标签: C语言  linux  ID3v1  ID3v2  

资源简介

读取MP3问文件ID3v2,ID3v2,APEv2标签的程序,上传之与大家交流。

资源截图

代码片段和文件信息

/**
 * 文 件 名:APEV2Tag.c
 * 功    能:媒体文件APEV2标签信息提取函数和打印函数的实现
 * 创建日期:2009年05月10日
 * 最新日期:2009年05月10日
 * 程序编码:huanying
 */
 
 #include “APEV2Tag.h“
 
  /* get_APEv2Tag_info:读取目标文件的APEv2标签信息,成功返回0否从返回-1 */
 int get_APEv2Tag_info(FILE *fp APEv2Item *header int tagflag int ID3v2Size)
 {
  int c;
  int i;
  int item_num;
  int item_size;
  long tag_size;
  APEv2HF HF_st;
  APEv2Item  *p1 = NULL *p2 = NULL;
 
  if (NULL == fp)
  {
  printf(“File stream‘s pointer is NULL!\n“);
  return -1;
  }
 
  if (NULL == fp)
  {
  printf(“APEv2HF‘s pointeris NULL!\n“);
  return -1;
  }
 

/* 从文件尾部开始搜寻APEv2标签标签尾 */
if (tagflag == 1 || tagflag == 3)
  fseek(fp -(128L + 32L) SEEK_END);
  else
  fseek(fp -32L SEEK_END);
 
  fread(&HF_st sizeof(APEv2HF) 1 fp);

  if (0 == strncmp(HF_st.preamble “APETAGEX“ 8))
  {
  printf(“This medium has APEv2Tag footer!\n“);
 
  tag_size = ((HF_st.tagsize)[3] << 24) | 
  ((HF_st.tagsize)[2] << 16) | 
  ((HF_st.tagsize)[1] << 8) | 
  (HF_st.tagsize)[0];
 
item_num =  ((HF_st.itemcount)[3] << 24) | 
  ((HF_st.itemcount)[2] << 16) | 
  ((HF_st.itemcount)[1] << 8) | 
  (HF_st.itemcount)[0];
 
if (tagflag == 1 || tagflag == 3)
fseek(fp -(128L + tag_size) SEEK_END);
else
fseek(fp -tag_size SEEK_END);

  //printf(“TagSize:%ld\t“ tag_size); 
  //printf(“Itemcount:%d\n“ item_num);
  }
  else
  { 
   /* 从文件头部开始搜寻APEv2标签标签头 */
   if (tagflag == 2 || tagflag == 3) /* 判断是否有ID3v2标签 */
    fseek(fp ID3v2Size SEEK_SET);
   else
    fseek(fp 0L SEEK_SET);
   
   fread(&HF_st sizeof(APEv2HF) 1 fp);
   if (0 == strncmp(HF_st.preamble “APETAGEX“ 8))
  {
  printf(“This medium has APEv2Tag header!\n“);
 
  tagflag += HAS_APEv2;
 
  tag_size = ((HF_st.tagsize)[3] << 24) | 
  ((HF_st.tagsize)[2] << 16) | 
  ((HF_st.tagsize)[1] << 8) | 
  (HF_st.tagsize)[0];
 
item_num =  ((HF_st.itemcount)[3] << 24) | 
  ((HF_st.itemcount)[2] << 16) | 
  ((HF_st.itemcount)[1] << 8) | 
  (HF_st.itemcount)[0];
 
  if (tagflag == 2 || tagflag == 3) /* 判断是否有ID3v2标签 */
fseek(fp ID3v2Size + 32L SEEK_SET);
else
fseek(fp 32L SEEK_SET);

  //printf(“TagSize:%ld\t“ tag_size); 
  //printf(“Itemcount:%d\n“ item_num);
  }
  else
  {
   printf(“This medium has not APEv2Tag!\n“);
   return -1;
  }
  }/* end of else */
 
  /* 头结点不存储信息 */
  p2 = header;
 
  /* 搜寻标签元素中的关键字和其对应的值 */
  for (i=0; i  {
 
  if ( NULL == (p1 = (APEv2Item *)malloc(sizeof(APEv2Item))) )
  {
  perror(“Memory allocate for item error“);
  exit(-1);
  }
 
  fread(p1->itemvaluesize 4 1 fp);
  fread(p1->itemflags 4 1 fp);
 
  item_size =  ((p1->itemvaluesize)[3] << 24) | 
  ((p1->itemvaluesize)[2] << 16) | 
  ((p1->itemvaluesize)[1] << 8) | 
  (p1->itemvaluesize)[0];

/* 当标签元素的大小为负的时候,表示提取APEv2标签元素有问题,终止提取 */
if (item_size < 0)
{
break;
}

//printf(“(%2d)ItemFla

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4668  2009-05-21 10:08  tag\APEV2Tag.c

     文件       1490  2009-05-21 10:08  tag\APEV2Tag.h

     文件        756  2009-05-21 10:08  tag\common.c

     文件        270  2009-05-21 10:08  tag\common.h

     文件       2062  2009-05-21 10:08  tag\cpmain.c

     文件        409  2009-05-21 10:09  tag\define.h

     文件       1694  2009-05-21 10:09  tag\ID3V1Tag.c

     文件       1080  2009-05-21 10:09  tag\ID3V1Tag.h

     文件       4499  2009-05-21 10:09  tag\ID3V2Tag.c

     文件       1600  2009-05-21 10:09  tag\ID3V2Tag.h

     文件        492  2009-05-21 10:18  tag\makefile

     文件        254  2009-05-21 10:22  tag\readme.txt

     目录          0  2009-05-21 10:16  tag

----------- ---------  ---------- -----  ----

                19274                    13


评论

共有 条评论