diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/audioinputenginemidi.cc | 2 | ||||
-rw-r--r-- | src/drumgizmo.cc | 6 | ||||
-rw-r--r-- | src/instrument.cc | 173 | ||||
-rw-r--r-- | src/instrument.h | 58 |
4 files changed, 130 insertions, 109 deletions
diff --git a/src/audioinputenginemidi.cc b/src/audioinputenginemidi.cc index 80cb13a..ea632fe 100644 --- a/src/audioinputenginemidi.cc +++ b/src/audioinputenginemidi.cc @@ -67,7 +67,7 @@ bool AudioInputEngineMidi::loadMidiMap(const std::string& file, const Instrument mmap.midimap = p.midimap; for(size_t i = 0; i < instruments.size(); i++) { - mmap.instrmap[instruments[i]->name()] = i; + mmap.instrmap[instruments[i]->getName()] = i; } midimap = file; diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc index 0570114..d9afbfa 100644 --- a/src/drumgizmo.cc +++ b/src/drumgizmo.cc @@ -304,7 +304,7 @@ bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples) continue; } - if(i->group() != "") + if(i->getGroup() != "") { // Add event to ramp down all existing events with the same groupname. Channels::iterator j = kit.channels.begin(); @@ -318,7 +318,7 @@ bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples) if(ev->type() == Event::sample) { EventSample *sev = (EventSample*)ev; - if(sev->group == i->group() && sev->instrument != i) + if(sev->group == i->getGroup() && sev->instrument != i) { sev->rampdown = 3000; // Ramp down 3000 samples // TODO: This must be configurable at some point... @@ -358,7 +358,7 @@ bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples) else { //DEBUG(drumgizmo, "Adding event %d.\n", event.offset); - Event *evt = new EventSample(ch.num, 1.0, af, i->group(), i); + 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); } diff --git a/src/instrument.cc b/src/instrument.cc index 21371f0..9dec687 100644 --- a/src/instrument.cc +++ b/src/instrument.cc @@ -36,126 +36,145 @@ Instrument::Instrument() { - DEBUG(instrument, "new %p\n", this); - mod = 1.0; - lastpos = 0; + DEBUG(instrument, "new %p\n", this); + mod = 1.0; + lastpos = 0; - magic = this; + magic = this; } Instrument::~Instrument() { - magic = NULL; - - DEBUG(instrument, "delete %p\n", this); - std::vector<AudioFile*>::iterator i = audiofiles.begin(); - while(i != audiofiles.end()) { - delete *i; - i++; - } + magic = NULL; + + DEBUG(instrument, "delete %p\n", this); + std::vector<AudioFile*>::iterator i = audiofiles.begin(); + while(i != audiofiles.end()) + { + delete *i; + i++; + } } -bool Instrument::isValid() +bool Instrument::isValid() const { - return this == magic; + return this == magic; } -Sample *Instrument::sample(level_t level, size_t pos) +Sample* Instrument::sample(level_t level, size_t pos) { - Sample *sample = NULL; - - if(Conf::enable_velocity_modifier == false) { - mod = 1.0; - lastpos = 0; - } - - if(Conf::enable_velocity_randomiser) { - float r = rand.floatInRange(-1.0*Conf::velocity_randomiser_weight, - Conf::velocity_randomiser_weight); - level += r; - if(level > 1.0) level = 1.0; - if(level < 0.0) level = 0.0; - } - - if(Conf::enable_velocity_modifier) { - mod += (pos - lastpos) / - (Conf::samplerate * Conf::velocity_modifier_falloff); - if(mod > 1.0) mod = 1.0; - } - - if(version >= VersionStr("2.0")) { - // Version 2.0 - sample = powerlist.get(level * mod); - } else { - // Version 1.0 - std::vector<Sample*> s = samples.get(level * mod); - if(s.size() == 0) return NULL; - sample = rand.choose(s); - } - - if(Conf::enable_velocity_modifier) { - lastpos = pos; - mod *= Conf::velocity_modifier_weight; - } - - return sample; + Sample *sample = NULL; + + if(Conf::enable_velocity_modifier == false) { + mod = 1.0; + lastpos = 0; + } + + if(Conf::enable_velocity_randomiser) { + float r = rand.floatInRange(-1.0*Conf::velocity_randomiser_weight, + Conf::velocity_randomiser_weight); + level += r; + if(level > 1.0) + { + level = 1.0; + } + if(level < 0.0) + { + level = 0.0; + } + } + + if(Conf::enable_velocity_modifier) { + mod += (pos - lastpos) / + (Conf::samplerate * Conf::velocity_modifier_falloff); + if(mod > 1.0) + { + mod = 1.0; + } + } + + if(version >= VersionStr("2.0")) + { + // Version 2.0 + sample = powerlist.get(level * mod); + } + else { + // Version 1.0 + std::vector<Sample*> s = samples.get(level * mod); + if(s.size() == 0) + { + return NULL; + } + + sample = rand.choose(s); + } + + if(Conf::enable_velocity_modifier) + { + lastpos = pos; + mod *= Conf::velocity_modifier_weight; + } + + return sample; } -void Instrument::addSample(level_t a, level_t b, Sample *s) +void Instrument::addSample(level_t a, level_t b, Sample* s) { - samples.insert(a, b, s); + samples.insert(a, b, s); } void Instrument::finalise() { - if(version >= VersionStr("2.0")) { - std::vector<Sample*>::iterator s = samplelist.begin(); - while(s != samplelist.end()) { - powerlist.add(*s); - s++; - } - - powerlist.finalise(); - } + if(version >= VersionStr("2.0")) + { + std::vector<Sample*>::iterator s = samplelist.begin(); + while(s != samplelist.end()) + { + powerlist.add(*s); + s++; + } + + powerlist.finalise(); + } } -std::string Instrument::name() +std::string Instrument::getName() const { - return _name; + return _name; } -std::string Instrument::description() +std::string Instrument::getDescription() const { - return _description; + return _description; } -std::string Instrument::group() +std::string Instrument::getGroup() const { - return _group; + return _group; } void Instrument::setGroup(std::string g) { - _group = g; + _group = g; } #ifdef TEST_INSTRUMENT -//deps: channel.cc sample.cc audiofile.cc -//cflags: $(SNDFILE_CFLAGS) -//libs: $(SNDFILE_LIBS) +// deps: channel.cc sample.cc audiofile.cc +// cflags: $(SNDFILE_CFLAGS) +// libs: $(SNDFILE_LIBS) #include "test.h" TEST_BEGIN; Instrument i("test"); -Sample *a = new Sample(); +Sample* a = new Sample(); i.addSample(0.0, 1.0, a); -Sample *b = new Sample(); +Sample* b = new Sample(); i.addSample(0.0, 1.0, b); -Sample *c = new Sample(); +Sample* c = new Sample(); i.addSample(1.5, 1.7, c); TEST_EQUAL(i.sample(0.0), b, "?"); @@ -175,4 +194,4 @@ TEST_EQUAL(i.sample(1.6), c, "?"); TEST_END; -#endif/*TEST_INSTRUMENT*/ +#endif /*TEST_INSTRUMENT*/ diff --git a/src/instrument.h b/src/instrument.h index 62f8d01..5dc656d 100644 --- a/src/instrument.h +++ b/src/instrument.h @@ -38,50 +38,52 @@ #include "random.h" class InstrumentParser; -class Instrument { - friend class InstrumentParser; +class Instrument +{ + friend class InstrumentParser; + public: - Instrument(); - ~Instrument(); + Instrument(); + ~Instrument(); - Sample *sample(level_t level, size_t pos); + Sample* sample(level_t level, size_t pos); - std::string name(); - std::string description(); - std::string group(); + std::string getName() const; + std::string getDescription() const; + std::string getGroup() const; - void setGroup(std::string group); + void setGroup(std::string group); - // std::map<std::string, std::string> channelmap; + // std::map<std::string, std::string> channelmap; - std::vector<AudioFile*> audiofiles; + std::vector<AudioFile*> audiofiles; - bool isValid(); + bool isValid() const; private: - void *magic; + void* magic; - std::string _group; - std::string _name; - std::string _description; + std::string _group; + std::string _name; + std::string _description; - VersionStr version; + VersionStr version; - RangeMap<level_t, Sample*> samples; - PowerList powerlist; + RangeMap<level_t, Sample*> samples; + PowerList powerlist; - void addSample(level_t a, level_t b, Sample *s); - void finalise(); ///< Signal instrument that no more samples will be added. + void addSample(level_t a, level_t b, Sample* s); + void finalise(); ///< Signal instrument that no more samples will be added. - std::vector<Sample*> samplelist; + std::vector<Sample*> samplelist; - size_t lastpos; - float mod; + size_t lastpos; + float mod; - Random rand; + Random rand; }; -//typedef std::map< std::string, Instrument > Instruments; -typedef std::vector< Instrument* > Instruments; +// typedef std::map< std::string, Instrument > Instruments; +typedef std::vector<Instrument*> Instruments; -#endif/*__DRUMGIZMO_INSTRUMENT_H__*/ +#endif /*__DRUMGIZMO_INSTRUMENT_H__*/ |