summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2014-03-30 11:15:57 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2014-03-30 11:15:57 +0200
commit011143d37aa438a7204c6a4a407db5c49e3fc6c5 (patch)
tree7fabae02245367c697f5fe3fe35009d3cb55f960 /src
parentf271a3905a0e8d16f9258ba0b8743a8fd689e787 (diff)
parentc852a24fc978ca7916c0f5819bfed870a1d9519e (diff)
Merge branch 'master' of http://git.drumgizmo.org/drumgizmo
Diffstat (limited to 'src')
-rw-r--r--src/instrumentparser.cc11
-rw-r--r--src/powerlist.cc20
-rw-r--r--src/sample.cc3
-rw-r--r--src/sample.h3
4 files changed, 27 insertions, 10 deletions
diff --git a/src/instrumentparser.cc b/src/instrumentparser.cc
index 6580b09..c66608b 100644
--- a/src/instrumentparser.cc
+++ b/src/instrumentparser.cc
@@ -79,7 +79,16 @@ void InstrumentParser::startTag(std::string name,
DEBUG(instrparser,"Missing required attribute 'name'.\n");
return;
}
- s = new Sample(attr["name"]);
+
+ float power;
+ if(attr.find("power") == attr.end()) {
+ power = -1;
+ } else {
+ power = atof(attr["power"].c_str());
+ DEBUG(instrparser, "Instrument power set to %f\n", power);
+ }
+
+ s = new Sample(attr["name"], power);
}
if(name == "audiofile") {
diff --git a/src/powerlist.cc b/src/powerlist.cc
index 4f02892..cf843a3 100644
--- a/src/powerlist.cc
+++ b/src/powerlist.cc
@@ -168,16 +168,22 @@ void PowerList::finalise()
master->load();
float power = 0;
- size_t s = 0;
- for(; s < SIZE && s < master->size; s++) {
- power += master->data[s] * master->data[s];
- }
+ if(sample->power == -1) { // Power not defined. Calculate it!
+ DEBUG(powerlist, "Calculating power\n");
+ size_t s = 0;
+ for(; s < SIZE && s < master->size; s++) {
+ power += master->data[s] * master->data[s];
+ }
- power = sqrt(power);
+ power = sqrt(power);
- if(power > power_max) power_max = power;
+ if(power > power_max) power_max = power;
- item.power = power;
+ item.power = power;
+ } else { // Power defined in xml
+ DEBUG(powerlist, "Using power from xml\n");
+ power = sample->power;
+ }
DEBUG(rand, " - power: %f\n", power);
diff --git a/src/sample.cc b/src/sample.cc
index be897c7..d50137d 100644
--- a/src/sample.cc
+++ b/src/sample.cc
@@ -31,9 +31,10 @@
#include <sndfile.h>
-Sample::Sample(std::string name)
+Sample::Sample(std::string name, float power)
{
this->name = name;
+ this->power = power;
}
Sample::~Sample()
diff --git a/src/sample.h b/src/sample.h
index cd3e111..61a3468 100644
--- a/src/sample.h
+++ b/src/sample.h
@@ -40,7 +40,7 @@ class Sample {
friend class InstrumentParser;
friend class PowerList;
public:
- Sample(std::string name);
+ Sample(std::string name, float power);
~Sample();
AudioFile *getAudioFile(InstrumentChannel *c);
@@ -49,6 +49,7 @@ private:
void addAudioFile(InstrumentChannel *c, AudioFile *a);
std::string name;
+ float power;
AudioFiles audiofiles;
};