'Shift 연산'에 해당되는 글 1건
- 2007.05.06 c언어로 구현한 mp3 태그(id3v2) 지우기 6
c언어로 구현한 mp3 태그(id3v2) 지우기
Programming/C 2007. 5. 6. 01:30
지금 삽질하면서 만들고 있는 프로그램이 mp3 태그를 건들여야 할 일이 있어서
id3lib인가 암튼 mp3태그를 건드리는 라이브러리를 썻었는데 그놈아는 자꾸 써먹다보니까 너무 잘 꺼졋다!!!
더 정확하기 말하자면 에러메세지를 좍 뿌리고 죽어버리는 현상이 발생해서 걍 내가 하나 만들어 버렸다..
mp3 파일의 헤더를 읽어서 태그 전체의 크기를 알아낸다
저 쉬프트 연산만 빼면 그다지 어렵지 않은 코드.. 뭐 반복문이나 재귀어떻게 잘 쓰면 짧게 할수도 있을거
같긴한데.. 뭐 얼만큼 길다고.. 겨우 4byte밖에 안되기에 걍 저리 적었다..
그리고..내가좀 멍청해서 도우지 저런식으로 시프트,or연산을 써서밖에 못 나타나겠다...;;
이것에 대해서 잘 아시는분은 댓글 달아주셔도 감사!
모든 mp3파일 에 다 되는건 아니고 "거의 대부분" 이 된다..
그리고 영어 문법에 딴지 걸지 말자 나 작문할줄도 모른다구 ㅜㅜ
그리고 mp3파일 10개정도만 테스트 해봤는데 잘되는............
덧>
:so $VIMRUNTIME/syntax/2html.vim
이렇게 하면 html문서로 저장이 되는군!
알긴 알았지만 이렇게 직접 블로그에 써먹기는 처음..
mp3태그 분석에 대해선 다음 링크를 참조하자
http://www.byungju.com/wiki/wiki.pl?ID3#_1
아니면 kldp에서 번역된 RFC문서를 참고 하셔도 좋으실듯 싶다..
들어오셔서 글을 보셧다면
제발 댓글좀 달아주셈 ㅜㅜ
앗 버그있다..
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=32 #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 }
그리고 영어 문법에 딴지 걸지 말자 나 작문할줄도 모른다구 ㅜㅜ
그리고 mp3파일 10개정도만 테스트 해봤는데 잘되는............
덧>
:so $VIMRUNTIME/syntax/2html.vim
이렇게 하면 html문서로 저장이 되는군!
알긴 알았지만 이렇게 직접 블로그에 써먹기는 처음..
mp3태그 분석에 대해선 다음 링크를 참조하자
http://www.byungju.com/wiki/wiki.pl?ID3#_1
아니면 kldp에서 번역된 RFC문서를 참고 하셔도 좋으실듯 싶다..
들어오셔서 글을 보셧다면
제발 댓글좀 달아주셈 ㅜㅜ
앗 버그있다..
'Programming > C' 카테고리의 다른 글
간단한 양방향 linkedlist (6) | 2007.05.11 |
---|---|
세그멘테이션 폴트를 줄이자! valgrind (4) | 2007.05.08 |
pointer 를 call by referance 하기 (6) | 2007.04.09 |
프로세스 갯수 알아내기.. (4) | 2007.03.06 |
libconfuse 에서 *** glibc detected *** double free or corruption (0) | 2007.02.22 |