diff options
author | Nils Wallménius <nils@rockbox.org> | 2007-09-27 18:29:50 +0000 |
---|---|---|
committer | Nils Wallménius <nils@rockbox.org> | 2007-09-27 18:29:50 +0000 |
commit | 93787dd42c57d8af8127b26a9c46f0a4e3e80d0e (patch) | |
tree | 80cd6dff15ac136096722810ac3c6b5dd2910151 /apps/plugins/midi/sequencer.c | |
parent | 5ec5f8abacf56b082480f8a33fa937c16d496011 (diff) | |
download | rockbox-93787dd42c57d8af8127b26a9c46f0a4e3e80d0e.tar.gz rockbox-93787dd42c57d8af8127b26a9c46f0a4e3e80d0e.zip |
Simplify the sendEvent function, makes it _slightly_ faster and quite a bit smaller, build midiplay with -O2 for coldfire, gives about a 23% speedup
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14872 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/midi/sequencer.c')
-rw-r--r-- | apps/plugins/midi/sequencer.c | 77 |
1 files changed, 40 insertions, 37 deletions
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 | ||
274 | void sendEvent(struct Event * ev) | 274 | static 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 | ||