KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 1 Wat gaan we doen: Een (vaste) melodie spelen op de PC speaker MIDI variable-length integers interpreteren
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 2 Geluid maken (werkt alleen op XP!) #include Beep( Frequency, Milliseconds ); _sleep( Milliseconds ); Let op: Beep!
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 3 noten : naam (= toon hoogte)
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 4 noten : duur
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 5 nootnaam frequentie
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 6 een geinitialiseerd array int Prime[ 9 ] = { 1, 2, 3, 5, 7, 11, 13, 17, 19 }; int Square[] = { 1, 4, 9, 16, 25, 36 };
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 7 een geinitialiseerd array (2) typedef struct { char naam[ 10 ]; float cijfer; } Student; Student Info[] = { { " hans ", 6.7 }, { " johan ", 3.2 }, { " michiel ", 7.8 }, { "", 0.0 } };
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 8 gebruik van #define (1) play( 4567, 400 ); play( 4793, 200 ); play( 4567, 400 ); play( 4793, 200 ); play( 4567, 400 ); play( 4793, 200 );
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 9 gebruik van #define (2) #define A 4567 #define B 4793 #define HALF 400 #define KWART 200 play( A, HALF ); play( B, KWART ); play( A, HALF ); play( B, KWART ); play( A, HALF ); play( B, KWART );
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 10 Opdracht 1 Maak een functie die je aanroept met -het MIDI noot nummer -de duur in milliseconden De functie moet dus het noot nummer vertalen naar de frequentie. De functie moet (voor debugging) ook de noot naam, nummer en duur afdrukken. Schrijf hiermee een programma dat een liedje laat horen. Gebruik #defines voor de lengtes (duur) van noten en eventueel voor de noten zelf. Gebruik een geinitialiseerd array om het liedje op te slaan. In dit array moet het MIDI nummer van een noot staan, niet de frequentie.
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 11 MIDI variable-length integer format -In het laatste (‘laatste’, laagstwaardige) byte staat het hoogste bit op 0 -Als er nog een volgend bit komt dan staat het hoogste bit op 1 -De byte met ”meestwaardige” bits staat voorop -7 ‘data’ bits per byte -maximum is 4 bytes (dus 4x7=28 bits)
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 12 MIDI variable-length integer format
KPRES1 : C vervolg Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology Les 2 sheet 13 Opdracht 2 Schrijf een functie met de volgende definitie: int MIDI_Int( unsigned char **p ); Deze functie wordt aangeroepen met een pointer naar een pointer naar een (reeks) MIDI variable-length integers. De functie lees de eerste MIDI integer, veschuift de pointer tot net na die integer, en geeft die integer waarde terug. Test je functie.