diff options
author | Christian Glöckner <cgloeckner@freenet.de> | 2016-01-21 18:05:07 +0100 |
---|---|---|
committer | André Nusser <andre.nusser@googlemail.com> | 2016-02-09 09:02:18 +0100 |
commit | 6004e264418fa1f8a033c69633b2f0205c247266 (patch) | |
tree | 4d01947d08f33ac1cace240f12ed2e5e660bac00 /drumgizmo/input | |
parent | 6253e37c2f0219d61193d0d405e7f23a4bae3287 (diff) |
Added missing changes
Diffstat (limited to 'drumgizmo/input')
-rw-r--r-- | drumgizmo/input/midifile.cc | 78 |
1 files changed, 44 insertions, 34 deletions
diff --git a/drumgizmo/input/midifile.cc b/drumgizmo/input/midifile.cc index b0685ec..70c840f 100644 --- a/drumgizmo/input/midifile.cc +++ b/drumgizmo/input/midifile.cc @@ -58,26 +58,27 @@ bool MidifileInputEngine::init(Instruments& instruments) { return false; } smf = smf_load(file.c_str()); - if (sfml == nullptr) { - fprintf(stderr, "Could not open midifile '%s'.\n", filename.c_str()); + if (smf == nullptr) { + fprintf(stderr, "Could not open midifile '%s'.\n", file.c_str()); return false; } MidiMapParser p{midimap}; if (p.parse()) { - fprintf(stderr, "Could not parse midimapfile '%s'.\n", midimapfile.c_str()); + fprintf(stderr, "Could not parse midimapfile '%s'.\n", midimap.c_str()); return false; } - midiMapper.midimap = std::move(p.midimap); + midi_mapper.midimap = p.midimap; for (auto i = 0u; i < instruments.size(); ++i) { - auto name = instruments[0]->name; - midiMapper.instrmap[name] = i; + auto name = instruments[i]->name(); + printf("%d : %s\n", i, name.c_str()); + midi_mapper.instrmap[name] = i; } return true; } void MidifileInputEngine::setParm(std::string parm, std::string value) { if(parm == "file") { - filen = value; + file = value; } else if(parm == "speed") { speed = std::stof(value); } else if (parm == "midimap") { @@ -85,7 +86,7 @@ void MidifileInputEngine::setParm(std::string parm, std::string value) { } else if (parm == "loop") { loop = true; } else { - printf("Unsupported midifile parameter '%s'\n", parm); + printf("Unsupported midifile parameter '%s'\n", parm.c_str()); } } @@ -101,58 +102,67 @@ void MidifileInputEngine::pre() { event_t* MidifileInputEngine::run(size_t pos, size_t len, size_t *nevents) { event_t* evs{nullptr}; - std::size_t nevs{0u}; - double current_max_time = 1.0 * (pos + len) / (44100.0 / speed); + size_t num_events{0u}; + + double current_max_time = (1.0 + pos + len) / (44100.0 / speed); current_max_time -= offset; - if (current_event == nullptr) { + // double cur_min_time = (double)(pos) / (44100.0 / speed); + + if(!current_event) { current_event = smf_get_next_event(smf); } - while(current_event && current_event->time_seconds < cur_max_time) { + + while(current_event && current_event->time_seconds < current_max_time) { 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) { - if(evs == NULL) { + 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) { + + if(evs == nullptr) { + printf("Yet another raw owning pointer was generated by drumgizmo/input/midifile.cc - GET RID OF THEM!\n"); evs = (event_t *)malloc(sizeof(event_t) * 1000); } + int key = current_event->midi_buffer[1]; int velocity = current_event->midi_buffer[2]; - - evs[nevs].type = TYPE_ONSET; + + evs[num_events].type = TYPE_ONSET; size_t evpos = current_event->time_seconds * (44100.0 / speed); - evs[nevs].offset = evpos - pos; - - int i = midiMap.lookup(key); + evs[num_events].offset = evpos - pos; + + int i = midi_mapper.lookup(key); if(i != -1) { - evs[nevs].instrument = i; - evs[nevs].velocity = velocity / 127.0; - nevs++; - if(nevs > 999) { + evs[num_events].instrument = i; + evs[num_events].velocity = velocity / 127.0; + + ++num_events; + if(num_events > 999) { fprintf(stderr, "PANIC!\n"); break; } } } } + current_event = smf_get_next_event(smf); } - + if(!current_event) { if(loop) { smf_rewind(smf); - offset += cur_max_time; + offset += current_max_time; } else { - if(evs == NULL) { + if(evs == nullptr) { + printf("Yet another raw owning pointer was generated by drumgizmo/input/midifile.cc - GET RID OF THEM!\n"); evs = (event_t *)malloc(sizeof(event_t) * 1000); } - evs[nevs].type = TYPE_STOP; - evs[nevs].offset = len - 1; - nevs++; + evs[num_events].type = TYPE_STOP; + evs[num_events].offset = len - 1; + ++num_events; } } - - *nevents = nevs; + *nevents = num_events; return evs; } |