Audiovisuals with SC - Example01a - louder is bigger ›

Audiovisuals with SC - Example00 - structure

See /f0blog/audiovisuals-with-sc/

//Example00 - structure
s.latency= 0.05;

  //--window setup
  var width= 500, height= 500;
  var w= Window("Example00 - structure", Rect(99, 99, width, height), false);
  var u= UserView(w, Rect(0, 0, width, height));

  var theta= 0;  //will be used as a counter. no external access at runtime
  var syn= SynthDef(\av, {|freq= 400, amp= 0, pan= 0|
    var z=,, amp)*2pi), amp);,, pan));
  }, #[0.05, 0.05, 0.05]).play(s);

  ~speed= 0.025;  //it is possible to change these at runtime
  ~radius= 20;
  ~spreadx= 20;
  ~spready= 20;

  //--main loop
  u.drawFunc= {
    var x= sin(theta)*~spreadx;  //calculate coordinates
    var y= cos(x)*~spready;
    var a= x.hypot(y)/1.42/~spreadx;
    syn.set(  //update the synth with mapped parameters
      \freq, y.linexp(height.neg*0.5, height*0.5, 100, 1000),
      \amp, a.min(0.995),
      \pan, x.linlin(width.neg*0.5, width*0.5, -1, 1)
    Pen.translate(width*0.5, height*0.5);  //offset all drawing to the middle
    Pen.fillColor=;  //set the fill color
    Pen.fillOval(Rect.aboutPoint(Point(x, y), ~radius*a, ~radius*a));
    theta= theta+~speed%2pi;  //our counter counts in radians

  //--window management
  u.clearOnRefresh= true;  //erase view for each refresh
  u.background= Color.white;  //set background color
  w.onClose= {};  //stop the sound when window closed
  w.front;  //make the window appear
    var nextTime;
    while({w.isClosed.not}, {
      nextTime= Main.elapsedTime+(1/60);

//change these while the program is running
~spreadx= 150;
~spready= 100;
~speed= pi*0.9;
~speed= 2pi/3;
~speed= pi*0.45;
~radius= 80;
~spreadx= 60;
~speed= pi*0.99/0.1;
~speed= pi*0.99/4;
~radius= 40;
~spreadx= 10;
~spready= 40;
~speed= 0.05
~speed= pi*0.8;

//close the window to stop or press cmd+.