diff options
Diffstat (limited to 'src/inputprocessor.cc')
-rw-r--r-- | src/inputprocessor.cc | 61 |
1 files changed, 22 insertions, 39 deletions
diff --git a/src/inputprocessor.cc b/src/inputprocessor.cc index 3f8cf65..836cb92 100644 --- a/src/inputprocessor.cc +++ b/src/inputprocessor.cc @@ -63,67 +63,54 @@ bool InputProcessor::process(const std::vector<event_t>& events, size_t pos, dou bool InputProcessor::process_onset(const event_t& event, size_t pos, double resample_ratio) { - Instrument* i = nullptr; - int d = event.instrument; - - // TODO can this be removed? - if(!kit.isValid()) - { + if(!kit.isValid()) { return false; } - if(d < (int)kit.instruments.size()) - { - i = kit.instruments[d]; - } - - if(i == nullptr || !i->isValid()) + if(event.instrument >= kit.instruments.size() || + !kit.instruments[event.instrument] || + !kit.instruments[event.instrument]->isValid()) { ERR(inputprocessor, "Missing Instrument %d.\n", (int)event.instrument); return false; } - if(i->getGroup() != "") + Instrument& instr(*kit.instruments[event.instrument]); + + if(instr.getGroup() != "") { // Add event to ramp down all existing events with the same groupname. - Channels::iterator j = kit.channels.begin(); - while(j != kit.channels.end()) + for(auto& ch: kit.channels) { - Channel &ch = *j; - std::list< Event* >::iterator evs = activeevents[ch.num].begin(); - while(evs != activeevents[ch.num].end()) + for(Event* event: activeevents[ch.num]) { - Event *ev = *evs; - if(ev->getType() == Event::sample) + if(event->getType() == Event::sample) { - EventSample *sev = (EventSample*)ev; - if(sev->group == i->getGroup() && sev->instrument != i) + EventSample& event_sample = *(EventSample*)event; + if(event_sample.group == instr.getGroup() && + event_sample.instrument != &instr) { - sev->rampdown = 3000; // Ramp down 3000 samples + event_sample.rampdown = 3000; // Ramp down 3000 samples // TODO: This must be configurable at some point... // ... perhaps even by instrument (ie. in the xml file) - sev->ramp_start = sev->rampdown; + event_sample.ramp_start = event_sample.rampdown; } } - ++evs; } - ++j; } } - Sample *s = i->sample(event.velocity, event.offset + pos); - - if(s == nullptr) + if(!instr.sample(event.velocity, event.offset + pos)) { ERR(inputprocessor, "Missing Sample.\n"); return false; } - Channels::iterator j = kit.channels.begin(); - while(j != kit.channels.end()) + Sample& s(*instr.sample(event.velocity, event.offset + pos)); + + for(auto& ch: kit.channels) { - Channel &ch = *j; - AudioFile *af = s->getAudioFile(&ch); + AudioFile* af = s.getAudioFile(&ch); if(af) { // LAZYLOAD: @@ -137,11 +124,10 @@ bool InputProcessor::process_onset(const event_t& event, size_t pos, double resa else { //DEBUG(inputprocessor, "Adding event %d.\n", event.offset); - Event *evt = new EventSample(ch.num, 1.0, af, i->getGroup(), i); + Event* evt = new EventSample(ch.num, 1.0, af, instr.getGroup(), &instr); evt->offset = (event.offset + pos) * resample_ratio; activeevents[ch.num].push_back(evt); } - ++j; } return true; @@ -158,12 +144,9 @@ bool InputProcessor::process_stop(const event_t& event) { // Count the number of active events. int num_active_events = 0; - Channels::iterator j = kit.channels.begin(); - while(j != kit.channels.end()) + for(auto& ch: kit.channels) { - Channel &ch = *j; num_active_events += activeevents[ch.num].size(); - ++j; } if(num_active_events == 0) |