aboutsummaryrefslogtreecommitdiffstats
path: root/python/examples/futureHouse/waveViz.js
blob: 9ef0bed1eaea410a3791171083f77850f98fc091 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/**
 *    Wave oscillators by Ken Fyrstenberg Nilsen
 *    http://abdiassoftware.com/
 *
 *    CC-Attribute 3.0 License
 */


  $(function() {

          var ctx = canvas.getContext('2d');
          var w, h;

          canvas.width = w = window.innerWidth * 0.9;
          canvas.height = h = window.innerHeight * 0.9;

          var osc1 = new osc(400, 100, 0.05);
          var horizon = h * 0.2; // the bigger this gets, the lower the wave offsets
          var count = 100; // 40
          var step = 10; //Math.ceil(w / count);
          var buffer = new ArrayBuffer(count * 4);
          var points = new Float32Array(buffer);

// Change wave amplitude
//osc1.max = 450;
//osc1.min = -450;

// Change wait time
//osc1.speed = 0.2

          function fill() {
              for (var i = 0; i < count; i++) {
                  points[i] = mixer(osc1);
              }
          }

          ctx.lineWidth = 5;
          ctx.strokeStyle = '#ffffff';
          ctx.fillStyle = 'rgb(50, 50, 80)';

          function loop() {

              var i;

              /// move points to the left
              for (i = 0; i < count - 1; i++) {
                  points[i] = points[i + 1];
              }

              /// get a new point
              points[count - 1] = mixer(osc1) //, osc2, osc3);

              //ctx.clearRect(0, 0, w, h);
              ctx.fillRect(0, 0, w, h);

              /// render wave
              ctx.beginPath();
              ctx.moveTo(0, points[0]);

              for (i = 1; i < count; i++) {
                  ctx.lineTo(i * step, points[i]);
              }

              ctx.stroke();

              requestAnimationFrame(loop);
          }

          loop();

/// oscillator object
          function osc(maxx, minn, spd) {

              this.max = maxx;
              this.min = minn;
              this.speed = spd;

              var me = this,
                  a = 0,
                  max = getMax(),
                  min = getMin();

              this.getAmp = function () {

                  a += this.speed;

                  if (a >= 2.0) {
                      a = 0;
                  }

                  //return max * Math.sin(a * Math.PI);
                  return a < 1 ? max : min;
              }

              function getMax() {
                  return me.max;
              }

              function getMin() {
                  return me.min;
              }

              return this;
          }

          function mixer(osc) {

              var d = arguments.length,
                  i = d,
                  sum = 0;

              if (d < 1) return 0;

              while (i--) sum += arguments[i].getAmp();

              console.log("1: " + osc.getAmp());
              console.log("2: " + sum);
              console.log("3: " + d + horizon);
              console.log("4: " + horizon);

              // return osc.getAmp() + horizon;
              return sum / d + horizon;
              //return arguments[i].getAmp() + horizon;


          }
      }
)