summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/midi/Makefile9
-rw-r--r--apps/plugins/midi/midiutil.h1
-rw-r--r--apps/plugins/midi/sequencer.c77
3 files changed, 48 insertions, 39 deletions
diff --git a/apps/plugins/midi/Makefile b/apps/plugins/midi/Makefile
index 0d81c87b4b..94359024f1 100644
--- a/apps/plugins/midi/Makefile
+++ b/apps/plugins/midi/Makefile
@@ -9,7 +9,14 @@
9 9
10INCLUDES = -I$(APPSDIR) -I.. -I. $(TARGET_INC) -I$(FIRMDIR)/include -I$(FIRMDIR)/export \ 10INCLUDES = -I$(APPSDIR) -I.. -I. $(TARGET_INC) -I$(FIRMDIR)/include -I$(FIRMDIR)/export \
11 -I$(FIRMDIR)/common -I$(FIRMDIR)/drivers -I$(OUTDIR) -I$(BUILDDIR) 11 -I$(FIRMDIR)/common -I$(FIRMDIR)/drivers -I$(OUTDIR) -I$(BUILDDIR)
12CFLAGS = $(INCLUDES) $(GCCOPTS) $(TARGET) $(EXTRA_DEFINES) \ 12
13ifeq ($(CPU),coldfire)
14 MIDIOPTS = -O2
15else
16 MIDIOPTS = -O
17endif
18
19CFLAGS = $(INCLUDES) $(GCCOPTS) $(TARGET) $(EXTRA_DEFINES) $(MIDIOPTS) \
13 -DTARGET_ID=$(TARGET_ID) -DMEM=${MEMORYSIZE} -DPLUGIN 20 -DTARGET_ID=$(TARGET_ID) -DMEM=${MEMORYSIZE} -DPLUGIN
14 21
15ifdef APPEXTRA 22ifdef APPEXTRA
diff --git a/apps/plugins/midi/midiutil.h b/apps/plugins/midi/midiutil.h
index cfaa4fb2fe..26e46b98b8 100644
--- a/apps/plugins/midi/midiutil.h
+++ b/apps/plugins/midi/midiutil.h
@@ -140,7 +140,6 @@ struct Track
140int printf(const char *fmt, ...); 140int printf(const char *fmt, ...);
141int midimain(void * filename); 141int midimain(void * filename);
142unsigned char readChar(int file); 142unsigned char readChar(int file);
143void sendEvent(struct Event * ev);
144inline void setPoint(struct SynthObject * so, int pt); 143inline void setPoint(struct SynthObject * so, int pt);
145struct Event * getEvent(struct Track * tr, int evNum); 144struct Event * getEvent(struct Track * tr, int evNum);
146int readTwoBytes(int file); 145int readTwoBytes(int file);
diff --git a/apps/plugins/midi/sequencer.c b/apps/plugins/midi/sequencer.c
index b3dc40bcb1..2819c12a6a 100644
--- a/apps/plugins/midi/sequencer.c
+++ b/apps/plugins/midi/sequencer.c
@@ -271,49 +271,52 @@ void releaseNote(int ch, int note)
271 } 271 }
272} 272}
273 273
274void sendEvent(struct Event * ev) 274static void sendEvent(struct Event * ev)
275{ 275{
276 if( ((ev->status & 0xF0) == MIDI_CONTROL) && (ev->d1 == CTRL_VOLUME) ) 276 const unsigned char status_low = ev->status & 0x0F;
277 const unsigned char d1 = ev->d1;
278 const unsigned char d2 = ev->d2;
279 switch(ev->status & 0xF0)
277 { 280 {
278 setVol((ev->status & 0xF), ev->d2); 281 case MIDI_CONTROL:
279 return; 282 switch(d1)
280 } 283 {
281 284 case CTRL_VOLUME:
282 if( ((ev->status & 0xF0) == MIDI_CONTROL) && (ev->d1 == CTRL_PANNING)) 285 {
283 { 286 setVol((status_low), d2);
284 setPan((ev->status & 0xF), ev->d2); 287 return;
285 return; 288 }
286 } 289 case CTRL_PANNING:
287 290 {
288 if(((ev->status & 0xF0) == MIDI_PITCHW)) 291 setPan((status_low), d2);
289 { 292 return;
290 setPW((ev->status & 0xF), ev->d2, ev->d1); 293 }
291 return; 294 }
292 } 295 break;
293
294 if(((ev->status & 0xF0) == MIDI_NOTE_ON) && (ev->d2 != 0))
295 {
296 pressNote(ev->status & 0x0F, ev->d1, ev->d2);
297 return;
298 }
299 296
300 if(((ev->status & 0xF0) == MIDI_NOTE_ON) && (ev->d2 == 0)) /* Release by vol=0 */ 297 case MIDI_PITCHW:
301 { 298 setPW((status_low), d2, d1);
302 releaseNote(ev->status & 0x0F, ev->d1); 299 return;
303 return;
304 }
305 300
301 case MIDI_NOTE_ON:
302 switch(d2)
303 {
304 case 0: /* Release by vol=0 */
305 releaseNote(status_low, d1);
306 return;
307
308 default:
309 pressNote(status_low, d1, d2);
310 return;
311 }
306 312
307 if((ev->status & 0xF0) == MIDI_NOTE_OFF) 313 case MIDI_NOTE_OFF:
308 { 314 releaseNote(status_low, d1);
309 releaseNote(ev->status & 0x0F, ev->d1); 315 return;
310 return;
311 }
312 316
313 if((ev->status & 0xF0) == MIDI_PRGM) 317 case MIDI_PRGM:
314 { 318 if((status_low) != 9)
315 if((ev->status & 0x0F) != 9) 319 setPatch(status_low, d1);
316 setPatch(ev->status & 0x0F, ev->d1);
317 } 320 }
318} 321}
319 322