summaryrefslogtreecommitdiff
path: root/drumgizmo/input/midifile.cc
diff options
context:
space:
mode:
authorChristian Glöckner <cgloeckner@freenet.de>2016-05-12 10:01:25 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2017-04-23 14:47:57 +0200
commit7924b3c3b64950758fbba5b0a68e9b3432b7a892 (patch)
tree2a3ca1e8395abc606348644ac8f9cbcb45d8a5b2 /drumgizmo/input/midifile.cc
parent2f2cde95bce634f26e43cdcb94cae7b27e378544 (diff)
Reduced some code redundancy
Diffstat (limited to 'drumgizmo/input/midifile.cc')
-rw-r--r--drumgizmo/input/midifile.cc27
1 files changed, 7 insertions, 20 deletions
diff --git a/drumgizmo/input/midifile.cc b/drumgizmo/input/midifile.cc
index 89ffa6b..6d09f36 100644
--- a/drumgizmo/input/midifile.cc
+++ b/drumgizmo/input/midifile.cc
@@ -146,27 +146,14 @@ void MidifileInputEngine::run(size_t pos, size_t len, std::vector<event_t>& even
{
if(!smf_event_is_metadata(current_event))
{
- if((current_event->midi_buffer_length == 3) &&
- ((current_event->midi_buffer[0] & NOTE_ON) == NOTE_ON) &&
- (track == -1 || current_event->track_number == track) &&
- current_event->midi_buffer[2] > 0)
- {
- int key = current_event->midi_buffer[1];
- int velocity = current_event->midi_buffer[2];
-
- events.emplace_back();
- auto& event = events.back();
- event.type = TYPE_ONSET;
- size_t evpos = current_event->time_seconds * (samplerate / speed);
- event.offset = evpos - pos;
-
- int i = mmap.lookup(key);
- if(i != -1)
- {
- event.instrument = i;
- event.velocity = velocity / 127.0;
- }
+ event_t out;
+ if (!midi_processor(current_event->midi_buffer_length, current_event->midi_buffer, out)) {
+ // unsupported event
+ continue;
}
+ std::size_t evpos = current_event->time_seconds * (samplerate / speed);
+ out.offset = evpos - pos;
+ events.push_back(out);
}
current_event = smf_get_next_event(smf);