summaryrefslogtreecommitdiff
path: root/passadesgui/src/AudioPlotter.cpp
diff options
context:
space:
mode:
authorTim Redfern <tim@getdrop.com>2022-09-29 21:12:40 +0100
committerTim Redfern <tim@getdrop.com>2022-09-29 21:12:40 +0100
commita2c919f85c366e02cdc71f0fb46f4ebd4e4afebe (patch)
treeba1b88607e8de35b0b49683648d7f64ac8259fe1 /passadesgui/src/AudioPlotter.cpp
parent8c43a654fdc0a0fd822fd0bd9462cdadf6d96456 (diff)
revert to working single plugin chaos
Diffstat (limited to 'passadesgui/src/AudioPlotter.cpp')
-rw-r--r--passadesgui/src/AudioPlotter.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/passadesgui/src/AudioPlotter.cpp b/passadesgui/src/AudioPlotter.cpp
new file mode 100644
index 0000000..7c775fa
--- /dev/null
+++ b/passadesgui/src/AudioPlotter.cpp
@@ -0,0 +1,114 @@
+#include "Audioplotter.h"
+
+colourPolyline Audioplotter::compute_chaos(colourPolyline& poly,float colourFade){
+ colourPolyline tempPoly;
+ for (int i=0;i<poly.size();i++){
+ REAL iv[6]={(poly[i].x-(ofGetWidth()/2))/chaosscale,(poly[i].y-(ofGetHeight()/2))/chaosscale,chaos_a,chaos_b,chaos_k,chaos_p};
+ //ofLog() << i<<": calculating chaos with: "<<poly[i].x<<"->"<<((poly[i].x-(ofGetWidth()/2))/chaosscale)<<" "<<poly[i].y<<"->"<<((poly[i].y-(ofGetHeight()/2))/chaosscale)<<" "<<attractor.a<<" "<<attractor.b<<" "<<attractor.k<<" "<<attractor.p;
+ attractor.set(iv);
+ attractor.calc();
+ //ofLog() << i<<": got points: "<<attractor.nx<<" "<<attractor.ny;
+ tempPoly.addVertex(ofPoint((attractor.nx*chaosscale)+(ofGetWidth()/2),(attractor.ny*chaosscale)+(ofGetHeight()/2)),poly.getColourAt(i)*colourFade);
+ }
+ return tempPoly;
+}
+vector <colourPolyline> Audioplotter::output(float plotscale,float plotdecay){
+
+ ofMatrix4x4 x = ofMatrix4x4::newIdentityMatrix();
+ x.translate((-ofGetWidth()/2)+((ofVec2f)translate).x,(-ofGetHeight()/2)+((ofVec2f)translate).y,0);
+ x.rotate(rotate,0,0,1);
+
+ x.scale(((ofVec2f)scale).x,((ofVec2f)scale).y,1.0f);
+
+ x.translate((ofGetWidth()/2),(ofGetHeight()/2),0);
+
+
+ ofMatrix4x4 flip = ofMatrix4x4::newIdentityMatrix();
+ flip.translate((-ofGetWidth()/2),(-ofGetHeight()/2),0);
+ flip.scale(-1.0f,1.0f,1.0f);
+ flip.translate((ofGetWidth()/2),(ofGetHeight()/2),0);
+ //destructive or non?
+ float fadefactor=plotdecay<0.0f?1.0f-(1.0f/history_size):plotdecay;
+
+ vector <colourPolyline> outdata;
+
+ for (int i=0;i<data.size();i++){
+ vector <colourPolyline> newdata;
+ for (int j=0;j<data[i].size();j++){
+ colourPolyline line=lineTransformer::polyLineTransform(x,data[i][j]); //,fadefactor);
+ line.setColour((line.getColourAt(0)*fadefactor)+(((ofColor)endColour)*(1.0f-fadefactor)));
+
+ if (usechaos) {
+ colourPolyline chaosline=compute_chaos(line); //,fadefactor);
+ line.mix(chaosline,chaosamount);
+ }
+
+
+ //ofLog() << "set colour to "<<col;
+ newdata.push_back(line);
+ outdata.push_back(line);
+
+ }
+ data[i]=newdata;
+ if (mirror){
+ for (int j=0;j<data[i].size();j++){
+ outdata.push_back(lineTransformer::polyLineTransform(flip,data[i][j]));
+ }
+ }
+ }
+ return outdata;
+}
+void Audioplotter::addpoints(vector <float> &audio){
+ int num=min((int)num_points,(int)audio.size());
+ float step=((float)audio.size())/(num+1);
+ vector <colourPolyline> newdata;
+ if (joined){
+ colourPolyline line;
+ if (bars&&num>1){
+ for (int i=0;i<num-1;i++){
+ line.addVertex(((step*(i+1))*ofGetWidth())/audio.size(),(0.5f+audio[step*(i+1)])*ofGetHeight(),startColour);
+ line.addVertex(((step*(i+2))*ofGetWidth())/audio.size(),(0.5f+audio[step*(i+1)])*ofGetHeight(),startColour);
+ line.addVertex(((step*(i+2))*ofGetWidth())/audio.size(),(0.5f+audio[step*(i+2)])*ofGetHeight(),startColour);
+ }
+ }
+ else {
+ for (int i=0;i<num;i++){
+ line.addVertex(((step*(i+1))*ofGetWidth())/audio.size(),(0.5f+audio[step*(i+1)])*ofGetHeight(),startColour);
+ }
+ }
+ newdata.push_back(line);
+ }
+ else{
+ for (int i=0;i<num;i++){
+ colourPolyline line;
+ if (random){
+ float in=ofRandom(0.0f,audio.size());
+ line.addVertex(((in*ofGetWidth())/audio.size())-(width/2),(0.5f+audio[in])*ofGetHeight(),startColour);
+ line.addVertex(((in*ofGetWidth())/audio.size())+(width/2),(0.5f+audio[in])*ofGetHeight(),startColour);
+ }
+ else {
+ line.addVertex(((step*(i+1))*ofGetWidth())/audio.size()-(width/2),(0.5f+audio[step*(i+1)])*ofGetHeight(),startColour);
+ line.addVertex(((step*(i+1))*ofGetWidth())/audio.size()+(width/2),(0.5f+audio[step*(i+1)])*ofGetHeight(),startColour);
+ }
+ newdata.push_back(line);
+ }
+ }
+ data.insert(data.begin(),newdata);
+ while (data.size()>history_size) {
+ data.pop_back();
+ }
+}
+void Audioplotter::blankframe(){
+ vector <colourPolyline> newdata;
+ data.insert(data.begin(),newdata);
+ while (data.size()>history_size) {
+ data.pop_back();
+ }
+}
+int Audioplotter::numpoints(){
+ int num=0;
+ for (auto d=data.begin();d!=data.end();d++){
+ num+=d->size();
+ }
+ return num;
+} \ No newline at end of file