summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Glöckner <cgloeckner@freenet.de>2016-03-29 15:44:55 +0200
committerAndré Nusser <andre.nusser@googlemail.com>2016-03-31 17:44:25 +0200
commit44695ff87966053ae090c2dd43ee6ab0a169775d (patch)
tree2f3c9343e0ef18495f031e1918e6557c834e81ab /src
parentbc4e506e48785ce448f18098b96c0d7333abb801 (diff)
API Refactoring for class Instrument
Diffstat (limited to 'src')
-rw-r--r--src/audioinputenginemidi.cc2
-rw-r--r--src/drumgizmo.cc6
-rw-r--r--src/instrument.cc173
-rw-r--r--src/instrument.h58
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__*/