From 13056b602ac05a47bdf9e04a991da158f5f4d556 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sat, 12 Nov 2011 22:24:26 +0100 Subject: Read notes --- maestropond.c | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 141 insertions(+), 4 deletions(-) diff --git a/maestropond.c b/maestropond.c index bfe3a44..3b9792f 100644 --- a/maestropond.c +++ b/maestropond.c @@ -70,11 +70,138 @@ out: } +static void music_attribute(unsigned char ma) +{ + if ( (ma & 0x7f) == 0x40 ) { + + printf("Warning: reserved gate type.\n"); + + } else if ( (ma & 0x3f) == 0x20 ) { + + printf("Bar line\n"); + + } else if ( (ma & 0x1f) == 0x10 ) { + + printf("Bar line\n"); + + } else if ( (ma & 0xf) == 0x8 ) { + + printf("Octave shift\n"); + + } else if ( (ma & 0x7) == 0x4 ) { + + int st; + + st = 1 + ((ma & 0xc0) >> 6); + if ( ma & 0x10 ) { + printf("Slur on (stave %i)\n", st); + } else { + printf("Slur off (stave %i)\n", st); + } + + } else if ( (ma & 0x3) == 0x2 ) { + + int ct, st; + + ct = (ma & 0x18) >> 3; + switch ( ct ) { + + case 0 : + printf("Treble clef:"); + break; + + case 1 : + printf("Alto clef:"); + break; + + case 2 : + printf("Tenor clef:"); + break; + + case 3 : + printf("Bass clef:"); + break; + } + + st = (ma & 0x60) >> 5; + printf(" stave %i\n", st); + + } else if ( (ma & 0x1) == 0x1 ) { + + int tn, td; + + tn = 1 + ((ma & 0x1e) >> 1); + td = 1 + ((ma & 0xe0) >> 5); + printf("Time signature %i/%i\n", tn, td); + } +} + + + +static void get_note(unsigned char **notes, int *nptrs, int ch) +{ + unsigned char n1, n2; + int rest = 0; + + n1 = notes[ch][nptrs[ch]++]; + + if ( n1 & 0xf8 ) { + n2 = notes[ch][nptrs[ch]++]; + } else { + rest = 1; + } + + if ( rest ) { + printf("rest %i\n", n1); + } else { + printf("note %i:%i\n", n1, n2); + } +} + + +static void interpret_gates(unsigned char *gates, unsigned char **notes, + int n_gates) +{ + int i; + int ma = 0; + int nptrs[8]; + + for ( i=0; i<8; i++ ) nptrs[i] = 0; + + for ( i=0; i