diff options
| -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__*/ | 
