summaryrefslogtreecommitdiff
path: root/src/drumgizmo.cc
diff options
context:
space:
mode:
authorAndré Nusser <andre.nusser@googlemail.com>2016-04-23 22:53:40 +0200
committerAndré Nusser <andre.nusser@googlemail.com>2016-04-24 23:20:44 +0200
commit6f550da7b91c1ff1d5acbee1112adf4a16e36a47 (patch)
tree0c1c9d41109888ac801ef5cb46fab7820b4d48b8 /src/drumgizmo.cc
parent32463cb2f19c0f1af4edddb396f9ea0abf5147e5 (diff)
Move input processing of drumgizmo.cc into own class.
Diffstat (limited to 'src/drumgizmo.cc')
-rw-r--r--src/drumgizmo.cc128
1 files changed, 7 insertions, 121 deletions
diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc
index 85f251b..63eda7b 100644
--- a/src/drumgizmo.cc
+++ b/src/drumgizmo.cc
@@ -51,14 +51,14 @@ DrumGizmo::DrumGizmo(Settings& settings,
: loader(settings)
, oe(o)
, ie(i)
+ , kit()
+ , input_processor(kit)
, framesize(0)
, freewheel(false)
, events{}
, settings(settings)
{
- is_stopping = false;
audioCache.init(10000); // start thread
-
events.reserve(1000);
}
@@ -227,129 +227,15 @@ bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples)
// Read new events
//
- //DEBUG(engine, "Number of active events: %d\n", activeevents[0].size());
-
ie->run(pos, nsamples, events);
- for(const auto& event: events)
- {
- if(event.type == TYPE_ONSET)
- {
- Instrument *i = nullptr;
- int d = event.instrument;
- /*
- Instruments::iterator it = kit.instruments.begin();
- while(d-- && it != kit.instruments.end())
- {
- i = &(it->second);
- ++it;
- }
- */
-
- if(!kit.isValid())
- {
- continue;
- }
-
- if(d < (int)kit.instruments.size())
- {
- i = kit.instruments[d];
- }
-
- if(i == nullptr || !i->isValid())
- {
- ERR(drumgizmo, "Missing Instrument %d.\n", (int)event.instrument);
- continue;
- }
-
- if(i->getGroup() != "")
- {
- // Add event to ramp down all existing events with the same groupname.
- Channels::iterator j = kit.channels.begin();
- while(j != kit.channels.end())
- {
- Channel &ch = *j;
- std::list< Event* >::iterator evs = activeevents[ch.num].begin();
- while(evs != activeevents[ch.num].end())
- {
- Event *ev = *evs;
- if(ev->getType() == Event::sample)
- {
- EventSample *sev = (EventSample*)ev;
- if(sev->group == i->getGroup() && sev->instrument != i)
- {
- sev->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;
- }
- }
- ++evs;
- }
- ++j;
- }
- }
-
- Sample *s = i->sample(event.velocity, event.offset + pos);
-
- if(s == nullptr)
- {
- ERR(drumgizmo, "Missing Sample.\n");
- continue;
- }
-
- Channels::iterator j = kit.channels.begin();
- while(j != kit.channels.end())
- {
- Channel &ch = *j;
- AudioFile *af = s->getAudioFile(&ch);
- if(af)
- {
- // LAZYLOAD:
- // DEBUG(drumgizmo,"Requesting preparing of audio file\n");
- // loader.prepare(af);
- }
- if(af == nullptr || !af->isValid())
- {
- //DEBUG(drumgizmo,"Missing AudioFile.\n");
- }
- else
- {
- //DEBUG(drumgizmo, "Adding event %d.\n", event.offset);
- Event *evt = new EventSample(ch.num, 1.0, af, i->getGroup(), i);
- evt->offset = (event.offset + pos) * resampler[0].getRatio();
- activeevents[ch.num].push_back(evt);
- }
- ++j;
- }
- }
-
- if(event.type == TYPE_STOP)
- {
- is_stopping = true;
- }
-
- if(is_stopping)
- {
- // Count the number of active events.
- int num_active_events = 0;
- Channels::iterator j = kit.channels.begin();
- while(j != kit.channels.end())
- {
- Channel &ch = *j;
- num_active_events += activeevents[ch.num].size();
- ++j;
- }
-
- if(num_active_events == 0)
- {
- // No more active events - now we can stop the engine.
- return false;
- }
- }
+ double resample_ratio = resampler[0].getRatio();
+ bool active_events_left = input_processor.process(events, activeevents, pos, resample_ratio);
+ if(!active_events_left)
+ {
+ return false;
}
-
events.clear();
//