#include #include typedef unsigned int ui; char * oc, * oe, * bb; int ex(int d){printf("Bye %d\n", d); exit(4);} void pc(char x){if(oc==oe) ex(1); *(oc++) = x;} void ps(char * s){while(*s) pc(*(s++));} void pn(int c, ui v){if(c) {pn(c-1, v>>8); pc(v&255);}} void pvlr(ui n){if(n > 127) pvlr(n>>7); pc(0x80 | n&127);} void pvl(ui n){if(n > 127) pvlr(n>>7); pc(n&127);} void n(int n, int d){pc(n); pc(64); pvl(d*120); pc(n); pc(0); pvl(0);} int main(){char * suspense; {int sp = 1000000; bb=oc = (char*)malloc(sp); if(!oc) ex(2); oe = oc+sp;} ps("MThd"); pn(4, 6); pn(2, 1); pn(2, 1); pn(2, 240); ps("MTrk"); suspense = oc; pn(4, 0); pvl(0); pc(0x90); // note down, channel 1 n(60,2); n(62,2); n(64,2); n(60,2); n(60,2); n(62,2); n(64,2); n(60,2); n(64,2); n(65,2); n(67,4); n(64,2); n(65,2); n(67,4); n(67,1); n(69,1); n(67,1); n(65,1); n(64,2); n(60,2); n(67,1); n(69,1); n(67,1); n(65,1); n(64,2); n(60,2); n(60,2); n(55,2); n(60,4); n(60,2); n(55,2); n(60,4); pc(0xFF); pc(47); pvl(0); {char*t = oc; oc = suspense; pn(4, t-(oc+4)); oc = t;} {FILE * out = fopen("song.midi", "w"); {char * c; for(c = bb; c < oc; ++c) putc(*c, out);} fclose(out);} free(bb); return 0;}