diff options
Diffstat (limited to 'rotord')
| -rw-r--r-- | rotord/src/nodes_audio_analysis.cpp | 14 |
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&¶meters["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; } } |
