summaryrefslogtreecommitdiff
path: root/rotord/src/nodes_audio_analysis.cpp
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-11-22 14:18:24 +0000
committerTim Redfern <tim@eclectronics.org>2013-11-22 14:18:24 +0000
commitdaadf9e268759f2052ccc1e30a201fe687ee4336 (patch)
treeaf090218e9bc1866a2d436f80a52756cef39a516 /rotord/src/nodes_audio_analysis.cpp
parent6a9e9a8f44ca5b9996acd239ddb16ee4f00f00d5 (diff)
intensity segmenter levels
Diffstat (limited to 'rotord/src/nodes_audio_analysis.cpp')
-rw-r--r--rotord/src/nodes_audio_analysis.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/rotord/src/nodes_audio_analysis.cpp b/rotord/src/nodes_audio_analysis.cpp
index ad6f5ad..5770fb2 100644
--- a/rotord/src/nodes_audio_analysis.cpp
+++ b/rotord/src/nodes_audio_analysis.cpp
@@ -182,12 +182,14 @@ namespace Rotor{
for (auto t:totals) bucketoffsets.push_back(0.0f);
if (parameters["levels"]->value>0.0f&&parameters["levels"]->value<totals.size()){
//use bucketoffsets to redistribute into smaller number of buckets
- int numbertoredistribute=totals.size()-((int)parameters["levels"]->value);
- int numberperbin=ceil((float)numbertoredistribute/totals.size());
+ int numbertoredistribute=totals.size()-((int)parameters["levels"]->value-2);
+ float numberperbin=((float)numbertoredistribute/totals.size());
+ float toadd=0.0f;
int added=0;
- for (int j=0;j<numbertoredistribute-numberperbin;j+=numberperbin){
- int numbertoadd=min(numbertoredistribute-added,numberperbin);
- bucketoffsets[j]=numbertoadd;
+ for (int j=0;j<totals.size();j++){
+ int numbertoadd=min(numbertoredistribute-added,(int)toadd);
+ bucketoffsets[j]=added;
+ toadd=(toadd+numberperbin)-numbertoadd;
added+=numbertoadd;
}
if (numbertoredistribute>0) {
@@ -200,7 +202,7 @@ namespace Rotor{
}
for (i=0;i<totals.size();i++){
vampHost::feature f;
- f.values.push_back((float)i+bucketoffsets[i]);
+ f.values.push_back((float)i-bucketoffsets[i]);
features[times[totals[i].first]]=f;
}
}