summaryrefslogtreecommitdiff
path: root/gui/src/AudioPlotter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/src/AudioPlotter.cpp')
-rw-r--r--gui/src/AudioPlotter.cpp86
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