#include #include #include #include #include void wrt(char *data, int n) { int i; for(i=0; i= BUFN) exit(1); /* give up */ buf[ bufn++ ] = c; } void set_str(char *s) { int i; for(i=0; s[i]; i++) set_char(s[i]); } void set_int(int n, int v) /* big endian */ { while(n--) set_char((v >> n*8) & 0xff); } int main(int ac, char **av) { set_str("MThd"); set_int(4, 6); set_int(2, 0); set_int(2, 1); set_int(2, 96); set_str("MTrk"); set_int(4, 0); wrt_buf(); set_char((0xc<<4) | 0); /* prog_num ch=0 */ set_char(50); /* 50 : strings ensamble 2 */ wrt_buf(); set_char((0xb<<4) | 0); /* ctl chg ch=0 */ set_char(7); /* channel volme msb */ set_char(64); wrt_buf(); set_char((9<<4) | 0); /* note on ch=0 */ set_char(69); /* A */ set_char(64); /* velo */ wrt_buf(); usleep(500*1000); set_char((9<<4) | 0); /* note on ch=0 */ set_char(73); /* C# */ set_char(64); /* velo */ wrt_buf(); usleep(500*1000); set_char((9<<4) | 0); /* note on ch=0 */ set_char(76); /* E */ set_char(64); /* velo */ wrt_buf(); usleep(3000*1000); set_char((8<<4) | 0); /* noe off ch=0 */ set_char(69); /* A */ set_char(0); /* velo */ wrt_buf(); set_char((8<<4) | 0); /* noe off ch=0 */ set_char(73); /* C# */ set_char(0); /* velo */ wrt_buf(); set_char((8<<4) | 0); /* noe off ch=0 */ set_char(76); /* E */ set_char(0); /* velo */ wrt_buf(); usleep(1000*1000); return 0; } /* EOF */