#include int main() { int i, v, c, c1, c2, low, hi; char id[5]; printf("header\n"); for(i=0; i<4; i++) id[i] = getchar(); id[i] = '\0'; printf("id='%s'\n", id); v = 0; for(i=0; i<4; i++) v = (v << 8) | getchar(); printf("size=%d\n", v); v = 0; for(i=0; i<2; i++) v = (v << 8) | getchar(); printf("format type=%d\n", v); v = 0; for(i=0; i<2; i++) v = (v << 8) | getchar(); printf("track num=%d\n", v); v = 0; for(i=0; i<2; i++) v = (v << 8) | getchar(); printf("time division=%d (0x%x)\n\n", v, v); printf("track\n"); for(i=0; i<4; i++) id[i] = getchar(); id[i] = '\0'; printf("id='%s'\n", id); v = 0; for(i=0; i<4; i++) v = (v << 8) | getchar(); printf("size=%d\n", v); while(1){ v = 0; do{ if((c = getchar()) == EOF) break; v = (v << 7) | (c & 0x7f); }while(c & 0x80); if(c == EOF) break; printf("delta time=%d\n", v); c = getchar(); if(c & 0x80){ c1 = c; hi = (c1 >> 4) & 0xf; low = c1 & 0xf; c2 = getchar(); }else{ c2 = c; } if(hi == 9 || hi == 8){ printf("%s ch=%d ", hi == 9 ? "on" : "off", low); printf("note=%d ", c2); printf("velo=%d\n", getchar()); continue; } printf("c1=0x%02x, c2=0x%02x\n", c1, c2); break; } return 0; } /* EOF */