'망할놈의 id3v2태그 죽어라'에 해당되는 글 1건

  1. 2007.05.06 c언어로 구현한 mp3 태그(id3v2) 지우기 (6)

c언어로 구현한 mp3 태그(id3v2) 지우기

 지금 삽질하면서 만들고 있는 프로그램이 mp3 태그를 건들여야 할 일이 있어서
id3lib인가 암튼 mp3태그를 건드리는 라이브러리를 썻었는데 그놈아는 자꾸 써먹다보니까 너무 잘 꺼졋다!!!
더 정확하기 말하자면 에러메세지를 좍 뿌리고 죽어버리는 현상이 발생해서 걍 내가 하나 만들어 버렸다..

mp3 파일의 헤더를 읽어서 태그 전체의 크기를 알아낸다
저 쉬프트 연산만 빼면 그다지 어렵지 않은 코드.. 뭐 반복문이나 재귀어떻게 잘 쓰면 짧게 할수도 있을거
같긴한데.. 뭐 얼만큼 길다고.. 겨우 4byte밖에 안되기에 걍 저리 적었다..
그리고..내가좀 멍청해서 도우지 저런식으로 시프트,or연산을 써서밖에 못 나타나겠다...;;
이것에 대해서 잘 아시는분은 댓글 달아주셔도 감사!

모든 mp3파일 에 다 되는건 아니고 "거의 대부분" 이 된다..
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <unistd.h>
 4 #include <fcntl.h>
 5
 6 int main(int argc,char *argv[])
 7 {
 8     int fd;
 9     char buf[10] = {0};
10     int ok = 0;
11
12     if(argc != 2){
13         printf("Usage : %s filename.mp3\n",argv[0]);
14         exit(1);
15     }
16
17     if((fd = open(argv[1],O_RDONLY)) == -1){
18         perror("File Open ERROR");
19         exit(1);
20     }
21
22     /*헤더(10byte)를 읽어온다*/
23     if(read(fd,buf,10) == -1){
24         perror("File Read ERROR");
25         exit(1);
26     }
27
28     if(!(buf[0] == 'I' &&
29         buf[1] == 'D' &&
30         buf[2] == '3')){
31         fprintf(stderr,"mp3 파일이 아니거나 ID3v2 태그를 가진 파일이 아닙니다\n");
32         exit(1);
33     }
34
35     printf("mp3 file : %x %x %x %x\n",buf[6],buf[7],buf[8],buf[9]);
36
37     ok = ((((buf[6] << 21) | buf[7] << 14) | buf[8] << 7) | buf[9]) + 10;
38
39     printf("ID3 태그를 제외한 파일 시작: %x\n",ok);
40 
41     return 0;
42  }
음 일단 애러 처리는 다 해두긴 했는데... 무슨 에러가 있어도 난 책임 안짐 =3=3
그리고 영어 문법에 딴지 걸지 말자 나 작문할줄도 모른다구 ㅜㅜ
그리고 mp3파일 10개정도만 테스트 해봤는데 잘되는............

덧>
:so $VIMRUNTIME/syntax/2html.vim
이렇게 하면 html문서로 저장이 되는군!
알긴 알았지만 이렇게 직접 블로그에 써먹기는 처음..

mp3태그 분석에 대해선 다음 링크를 참조하자
http://www.byungju.com/wiki/wiki.pl?ID3#_1
아니면 kldp에서 번역된 RFC문서를 참고 하셔도 좋으실듯 싶다..

들어오셔서 글을 보셧다면
제발 댓글좀 달아주셈 ㅜㅜ

앗 버그있다..

Trackback 0 Comment 6
prev 1 next