diff options
Diffstat (limited to 'gui/src/AudioPlotter.cpp')
| -rw-r--r-- | gui/src/AudioPlotter.cpp | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/gui/src/AudioPlotter.cpp b/gui/src/AudioPlotter.cpp new file mode 100644 index 0000000..dba6765 --- /dev/null +++ b/gui/src/AudioPlotter.cpp @@ -0,0 +1,86 @@ +#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,poly[i].y,chaos_a,chaos_b,chaos_k,chaos_p}; + //ofLog() << i<<": calculating chaos with: "<<poly[i].x<<" "<<poly[i].y<<" "<<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,attractor.ny),poly.getColourAt(i)*colourFade); + } + return tempPoly; +} +vector <colourPolyline> Audioplotter::output(float scale,float decay){ + + 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); + //destructive or non? + float fadefactor=decay<0.0f?1.0f-(1.0f/history_size):decay; + + 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; + } + 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){ + 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; + line.addVertex(((step*(i+1))*ofGetWidth())/audio.size(),(0.5f+audio[step*(i+1)])*ofGetHeight(),startColour); + line.addVertex(((step*(i+1))*ofGetWidth())/audio.size()+width,(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(); + } +} +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 |
