資源簡介
讀取MP3問文件ID3v2,ID3v2,APEv2標簽的程序,上傳之與大家交流。
代碼片段和文件信息
/**
?*?文?件?名:APEV2Tag.c
?*?功????能:媒體文件APEV2標簽信息提取函數和打印函數的實現
?*?創(chuàng)建日期: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
評論
共有 條評論