📄 readid3.c
字号:
#include <stdio.h>#include <string.h>#define TITLE 1#define INTERPRET 2#define GENRE 3FILE * infile;int i, size;char b;char buf[512];char string[60];char * bufp;int offset;int parse_tag(int * offset);int main(){ infile = fopen("test.mp3", "r"); bufp = buf; for (i = 0; i < 512; i++) { buf[i] = getc(infile); } fclose(infile); if (buf[0]=='I' && buf[1]=='D' && buf[2]=='3') printf("ID3-Tag gefunden!\n"); size = buf[6] << 21 | buf[7] << 14 | buf[8] << 7 | buf[9]; printf("Gr鲞e: %x\n", size); offset = 10; while (offset < 512) { size = parse_tag(&offset); switch (size) { case 0: printf ("Genre: %s\n", string); break; case 1: printf("Track: %s\n", string); break; case 2: printf("Album: %s\n", string); break; case 3: printf("Interpret: %s\n", string); break; case 4: printf("Titel: %s\n", string); break; } }// for (i=0; i<3; i++) printf("%2x", buf[i]);}int parse_tag(int *offset){ int tsize, encoding, numid; char fid[5]; const char valid_tags[] = "TCONTRCKTALBTPE1TIT2"; numid = -1; fid[4]='\0'; strncpy(fid, &buf[*offset],4); // get frame identifier as string// numid = *offset += 4; tsize = ((unsigned char) buf[*offset]) << 21 | ((unsigned char) buf[*offset+1]) << 14 | ((unsigned char) buf[*offset+2]) << 7 | (unsigned char) buf[*offset+3]; *offset += 6; // jump over flags... char * strpos = strstr(valid_tags,fid); if (strpos) { numid = ((int) strpos - (int) &valid_tags) / 4; encoding = buf[*offset]; if (encoding == 0) *offset += 1; else *offset += 3; if (encoding == 0) tsize -= 1; else tsize -= 3; for (i=0; i<tsize; i++) { string[i/(encoding+1)]=buf[*offset+i]; if (encoding != 0) i++; } *offset += i; string[i/(encoding+1)]='\0'; } else { *offset += tsize; } return numid;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -