| 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;
          }
      }
)
 |