| ||||
| ||||
midi(미디)파일을 구조체로 읽어서 여러번 반복하는 파일을 생성하는 프로그램을 C로 구현하고자 합니다..
typedef struct MidiChank{ char chank_type[4]; //쟝크 타입(header) unsigned long data_size; //Data길이 (header) unsignedshort format; //Format (header) unsignedshort track_num; //트랙 수(header) unsignedshort time_base; //시간단위(header) char track_chank_type[4]; //쟝크 타입(track) unsignedlong track_data_size; //Data길이(track) }midichank; 이렇게 구조체를 정의하고 파일을 읽어서 data구분을 2배로 만들어서 2번 반복하는 파일을 만들고자 합니다. 그런데,, 이상한게 track_data_size가 4,278,215,168이라는 엄청난 숫자가 나오네요,, unsigned long타입의 최고가 4,294,967,295인데,, 아래는 제가 짜고있는 프로그램입니다.. 짜는 중에 올리는거라 지분합니다,,ㅠ.ㅠ 고수님들 좋은 가르침 부탁드립니다,,ㅠ.ㅠ
#include <stdio.h> #include <stdlib.h> #include <memory.h> //memcpy() #include <string.h> //strlen()
#define SIZE 1
typedef struct MidiChank{ char chank_type[4]; long data_size; short format; short track_num; short time_base; char track_chank_type[4]; long track_data_size; }midichank;
FILE *fp; FILE *out_fp; char c; char filename[40]; char *data; unsigned long size, i; midichank chank; void open() { while(1) { printf("불러올 파일명을 적고 엔터를 눌러주세요..\n파일명(Load) : "); gets(filename);
if((fp = fopen(filename, "rb")) == NULL) { fprintf(stderr, "파일을 열지 못했습니다.\n"); continue; }
fread(&chank, sizeof(chank), 1, fp); data = (char*)malloc(chank.track_data_size);
i = 0; while(!feof(fp)) { c = fgetc(fp); data[i] = c; i++; }
break; } fclose(fp); }
void disp() { printf("[%s]의 정보...\n", filename); printf("[Header]chank_type = %s\n", chank.chank_type); printf("[Header]data_size = %lu\n", chank.data_size); printf("[Header]format = %u\n", chank.format); printf("[Header]track_num = %u\n", chank.time_base); printf("[Header]time_base = %u\n", chank.track_num); printf("[Track]chark_type = %s\n", chank.track_chank_type); printf("[Track]data_size = %lu\n", chank.track_data_size); printf("data = %s\n", &data); }
void save() { printf("저장하실 파일명을 적고 엔터를 눌러주세요..\n파일명(Save) : "); gets(filename);
if((out_fp = fopen(filename, "wb")) == NULL) { fprintf(stderr, "파일을 열지 못했습니다.\n"); exit(1); } fwrite(&chank, sizeof(chank), 1, out_fp); fputs(data, out_fp); printf("[%s]파일로 저장하였습니다.\n", filename);
} /* void size_save() { int num, i; char *imsi;
printf("저장하실 파일명을 적고 엔터를 눌러주세요..\n파일명(Save) : "); gets(filename);
printf("반복횟수 : "); scanf("%d", &num); //imsi = (char*)malloc(sizeof(chank.data)*num);
if((fp = fopen(filename, "wb")) == NULL) { fprintf(stderr, "파일을 열지 못했습니다."); exit(1); } //memcpy(imsi, chank.data, strlen(chank.data)); chank.track_data_size = chank.track_data_size * (unsigned long)num; printf("Test Start\n"); memcpy(imsi, chank.data, strlen(chank.data)); //strcpy(imsi, chank.data); printf("Test End\n"); for(i=0; i<num-1; i++) { strcat(imsi, chank.data); }
memcpy(chank.data, imsi, strlen(imsi)); //Data영역에 반복된 만큼 저장
fwrite((void*)&chank, sizeof(chank), 1, fp); printf("[%s]파일로 저장하였습니다.\n", filename);
} */
void main() { open(); //미디데이터를 열어서 구조체에 저장 disp(); save(); } | ||||
|
'- 음악과 나 - > 『 짬 통 』' 카테고리의 다른 글
알고리즘 강좌 (0) | 2006.05.18 |
---|---|
시리얼통신의 깊은 이해 (0) | 2006.05.18 |
그냥 c 프로그래머가 알아야할것들 (0) | 2006.05.18 |
비트매니아 대략. (0) | 2006.05.18 |
peekmessage (0) | 2006.05.18 |