diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/DGDOM.h | 1 | ||||
| -rw-r--r-- | src/dgxmlparser.cc | 13 | ||||
| -rw-r--r-- | src/domloader.cc | 3 | ||||
| -rw-r--r-- | src/inputprocessor.cc | 4 | ||||
| -rw-r--r-- | src/sample.cc | 8 | ||||
| -rw-r--r-- | src/sample.h | 4 | 
6 files changed, 28 insertions, 5 deletions
| diff --git a/src/DGDOM.h b/src/DGDOM.h index 1adf391..b6c52ac 100644 --- a/src/DGDOM.h +++ b/src/DGDOM.h @@ -59,6 +59,7 @@ struct SampleDOM  {  	std::string name;  	double power; // >= v2.0 only +	bool normalized; // >= v2.0 only  	std::vector<AudioFileDOM> audiofiles;  }; diff --git a/src/dgxmlparser.cc b/src/dgxmlparser.cc index 7f62a64..b924cc8 100644 --- a/src/dgxmlparser.cc +++ b/src/dgxmlparser.cc @@ -94,6 +94,17 @@ static bool assign(main_state_t& dest, const std::string& val)  	return true;  } +static bool assign(bool& dest, const std::string& val) +{ +	if(val == "true" || val == "false") +	{ +		dest = val == "true"; +		return true; +	} + +	return false; +} +  template<typename T>  static bool attrcpy(T& dest, const pugi::xml_node& src, const std::string& attr, LogFunction logger, const std::string& filename, bool opt = false)  { @@ -343,6 +354,8 @@ bool parseInstrumentFile(const std::string& filename, InstrumentDOM& dom, LogFun  		else  		{  			res &= attrcpy(dom.samples.back().power, sample, "power", logger, filename); +			dom.samples.back().normalized = false; +			res &= attrcpy(dom.samples.back().normalized, sample, "normalized", logger, filename, true);  		}  		for(pugi::xml_node audiofile: sample.children("audiofile")) diff --git a/src/domloader.cc b/src/domloader.cc index a718ade..97c1d6b 100644 --- a/src/domloader.cc +++ b/src/domloader.cc @@ -98,7 +98,8 @@ bool DOMLoader::loadDom(const std::string& basepath,  			auto path = getPath(basepath + "/" + instrumentref.file);  			for(const auto& sampledom : instrumentdom.samples)  			{ -				auto sample = new Sample(sampledom.name, sampledom.power); +				auto sample = new Sample(sampledom.name, sampledom.power, +				                         sampledom.normalized);  				for(const auto& audiofiledom : sampledom.audiofiles)  				{  					InstrumentChannel *instrument_channel = diff --git a/src/inputprocessor.cc b/src/inputprocessor.cc index eb45f4b..e8f4cc7 100644 --- a/src/inputprocessor.cc +++ b/src/inputprocessor.cc @@ -208,9 +208,9 @@ bool InputProcessor::processOnset(event_t& event,  		{  			//DEBUG(inputprocessor, "Adding event %d.\n", event.offset);  			auto evt = new EventSample(ch.num, 1.0, af, instr->getGroup(), -			                             instrument_id); +			                           instrument_id);  			evt->offset = (event.offset + pos) * resample_ratio; -			if(settings.normalized_samples.load()) +			if(settings.normalized_samples.load() && sample->getNormalized())  			{  				evt->scale *= event.velocity;  			} diff --git a/src/sample.cc b/src/sample.cc index 4d0443d..9af2c08 100644 --- a/src/sample.cc +++ b/src/sample.cc @@ -28,9 +28,10 @@  #include <sndfile.h> -Sample::Sample(const std::string& name, double power) +Sample::Sample(const std::string& name, double power, bool normalized)  	: name{name}  	, power{power} +	, normalized(normalized)  	, audiofiles{}  {  } @@ -67,3 +68,8 @@ double Sample::getPower() const  {  	return power;  } + +bool Sample::getNormalized() const +{ +	return normalized; +} diff --git a/src/sample.h b/src/sample.h index 223648f..6c31b6b 100644 --- a/src/sample.h +++ b/src/sample.h @@ -37,12 +37,13 @@ using AudioFiles = std::map<const InstrumentChannel*, AudioFile*>;  class Sample  {  public: -	Sample(const std::string& name, double power); +	Sample(const std::string& name, double power, bool normalized = false);  	~Sample();  	AudioFile* getAudioFile(const Channel& channel) const;  	double getPower() const; +	bool getNormalized() const;  private:  	friend class DOMLoader; @@ -54,5 +55,6 @@ private:  	std::string name;  	double power; +	bool normalized;  	AudioFiles audiofiles;  }; | 
