comparison projects/basic_midi/render.cpp @ 197:265a527f8be8

Added MidiParser for channel messages
author Giulio Moro <giuliomoro@yahoo.it>
date Fri, 05 Feb 2016 06:16:35 +0000
parents b3a306da03e0
children b128e3ea84ff
comparison
equal deleted inserted replaced
196:0029562391b1 197:265a527f8be8
23 Midi midi; 23 Midi midi;
24 bool setup(BeagleRTContext *context, void *userData) 24 bool setup(BeagleRTContext *context, void *userData)
25 { 25 {
26 midi.readFrom(0); 26 midi.readFrom(0);
27 midi.writeTo(0); 27 midi.writeTo(0);
28 midi.enableParser(true);
28 if(context->analogFrames == 0) { 29 if(context->analogFrames == 0) {
29 rt_printf("Error: this example needs the matrix enabled\n"); 30 rt_printf("Error: this example needs the matrix enabled\n");
30 return false; 31 return false;
31 } 32 }
32 return true; 33 return true;
42 enum {kVelocity, kNoteOn, kNoteNumber}; 43 enum {kVelocity, kNoteOn, kNoteNumber};
43 void render(BeagleRTContext *context, void *userData) 44 void render(BeagleRTContext *context, void *userData)
44 { 45 {
45 static float f0; 46 static float f0;
46 static float phaseIncrement = 0; 47 static float phaseIncrement = 0;
47 int message;
48 static bool noteOn = 0; 48 static bool noteOn = 0;
49 static int velocity = 0; 49 static int velocity = 0;
50 static int noteNumber = 0; 50 static int noteNumber = 0;
51 static int waitingFor = kNoteOn; 51 static int waitingFor = kNoteOn;
52 static int playingNote = -1; 52 static int playingNote = -1;
53 ///*
54 int message;
55 if(0) // one way of getting the midi data is to parse them yourself (you should set midi.enableParser(false) above):
53 while ((message = midi.getInput()) >= 0){ 56 while ((message = midi.getInput()) >= 0){
54 rt_printf("%d\n", message); 57 rt_printf("%d\n", message);
55 switch(waitingFor){ 58 switch(waitingFor){
56 case kNoteOn: 59 case kNoteOn:
57 if(message == noteOnStatus){ 60 if(message == noteOnStatus){
86 rt_printf("NoteOn: %d, NoteNumber: %d, velocity: %d\n", noteOn, noteNumber, velocity); 89 rt_printf("NoteOn: %d, NoteNumber: %d, velocity: %d\n", noteOn, noteNumber, velocity);
87 } 90 }
88 break; 91 break;
89 } 92 }
90 } 93 }
94 //*/
95 int num;
96 //alternatively, you can use the built-in parser (only processes channel messages at the moment).
97 while((num = midi.getParser()->numAvailableMessages()) > 0){
98 static MidiChannelMessage message;
99 message = midi.getParser()->getNextChannelMessage();
100 message.prettyPrint();
101 }
91 102
92 for(unsigned int n = 0; n < context->analogFrames; n++){ 103 for(unsigned int n = 0; n < context->analogFrames; n++){
93 static int count = 0; 104 static int count = 0;
94 static bool state = 0; 105 static bool state = 0;
95 analogWriteFrameOnce(context, n, 1, state); 106 analogWriteFrameOnce(context, n, 1, state);