summaryrefslogtreecommitdiff
path: root/rotord/src/nodes_drawing.h
diff options
context:
space:
mode:
authorComment <tim@gray.(none)>2013-08-20 20:58:14 +0100
committerComment <tim@gray.(none)>2013-08-20 20:58:14 +0100
commit95295030238e63890b6ea3113a2741b843e0b8c1 (patch)
tree2deaac595841365a0d9c123599abb9380be15dd3 /rotord/src/nodes_drawing.h
parent18b3b3a7f81e03ac7833eb8b99ea9c59274f872a (diff)
audio viz: waves node
Diffstat (limited to 'rotord/src/nodes_drawing.h')
-rw-r--r--rotord/src/nodes_drawing.h38
1 files changed, 33 insertions, 5 deletions
diff --git a/rotord/src/nodes_drawing.h b/rotord/src/nodes_drawing.h
index d6b7abe..3c26c9f 100644
--- a/rotord/src/nodes_drawing.h
+++ b/rotord/src/nodes_drawing.h
@@ -113,7 +113,31 @@ namespace Rotor {
private:
Colour colour;
};
- class Waves: public Draw_node {
+ class Audio_viz: public Draw_node {
+ public:
+ Audio_viz(){}
+ Audio_viz(map<string,string> &settings):Audio_viz() {
+ base_settings(settings);
+ };
+ ~Audio_viz(){};
+ Audio_viz* clone(map<string,string> &_settings) { return new Audio_viz(_settings);};
+ void vector_output(cairo_t * cr,const Frame_spec &frame){
+ if (audioactive){
+ if (!frame.audio){
+ cerr<<"Audio_viz: audio not found"<<endl;
+ audioactive=false;
+ }
+ }
+ if (frame.audio){
+ vector_audio_output(cr,frame);
+ audioactive=true;
+ }
+ }
+ virtual void vector_audio_output(cairo_t * cr,const Frame_spec &frame){};
+ private:
+ bool audioactive;
+ };
+ class Waves: public Audio_viz {
public:
Waves(){
title="Waves";
@@ -124,11 +148,15 @@ namespace Rotor {
};
~Waves(){};
Waves* clone(map<string,string> &_settings) { return new Waves(_settings);};
- void vector_output(cairo_t * cr,const Frame_spec &frame){
- if (frame.audio){
-
+ void vector_audio_output(cairo_t * cr,const Frame_spec &frame){
+ cairo_set_source_rgb(cr, 1.0,1.0,1.0);
+ cairo_save(cr); //not really even necessary?
+ cairo_translate(cr, 0, frame.h/2);
+ for (int i=0;i<frame.w;i++){
+ cairo_line_to(cr,i,(((int16_t)frame.audio->samples[i*frame.audio->channels])*frame.h)>>16);
}
- else cerr<<"error: visualisation audio not found"<<endl;
+ cairo_restore (cr); //not really even necessary?
+ cairo_stroke(cr);
}
private:
};