var demoFiles = { "sinebobs.js" : function() {var n = 70; return { init : function() { resetTime(); }, render : function() { decay(0.3); var sx = .4, sy = .4, t = time * 1.5; for (var i=0;i 2) rotozoom(sin((time-2)*.05) * pi2, min(1.3, 1 + (time-2)*0.1)); commit(); } };} , "fft2.js" : function() { var n = 32; var mode = 0; var avgLevels = []; for (var i=0;i>0] += soundData.eqDataL[i]; for (var i=0;i 0) level = ((levels[i] - avgLevels[i]) + (levels[i] / avgLevels[i]) + (levels[i] * 0.4)) * 1.3; var h = pow(max(0,level),0.85)*0.15; h = ((h / n2) >> 0) * n2; var x = 1/(n-1)*i; for (var j=h;j>0;j-=n2) drawRect(x, 1-h + j, n1, n2, "green"); if (h > maxLevels[i].h) maxLevels[i] = {h:h, t:time}; } for (var i=0;i 1) maxLevels[i].h = 0; } commit(); } };} , "mousetext.js" : function() {var text = "This text follows your mouse"; var mp = []; var chars; return { init : function() { chars = text.split(""); for (var i=0;i text.length) mp.shift(); } }, mousemove : function(x, y) { } };} , "borderblobs.js" : function() {// Click to take control of blob #1 var ts = 0; return { render : function() { quality(0.4); if (frameNum == 0) drawRect(0,0,1,1,"rgba(255,255,255,0.5)"); decay(0.15); var n = 100; ts += 0.10 + time * 0.01; for (var i=0;i>0) + ",70%,70%)" ); } //drawRect(0,0,1,1,"rgb(50,0,0)"); var n = 4, s = 1/screenWidth, hs = s*.5, t = time; for (var i=0,pos=[] ; i 72 && c < 80) drawRect(x, y, s, s, "white"); } } quality(1); for (var i=0;i>0], "smb3", 2, i*s + 0.02, 0.02); var f = (255 / n) >> 0; for (var i=0;i>0] += soundData.eqDataL[i]; for (var i=0;i 0) level = ((levels[i] - avgLevels[i]) + (levels[i] / avgLevels[i]) + (levels[i] * 0.4)) * 1.3; var h = pow(max(0,level),0.75)*0.15; h = ((h / n2) >> 0) * n2 * 20; if (h < 2) h = 2; transform.translate( cos(theta) * 2, bs, sin(theta) * 2 ); transform.scale(1,h,1); transform.translate(0, -1, 0); var hue = (theta - pi/2) / pi2 * 360; var rgb = hsl2rgb(hue, 100, 50); Pre3dRenderer.fill_rgba = new Pre3d.RGBA(rgb.r / 255, rgb.g / 255, rgb.b / 255, 1); Pre3dRenderer.bufferShape(boxes[i]); } Pre3dRenderer.ctx.setFillColor(0,0,0,1); //Pre3dRenderer.drawBackground(); Pre3dRenderer.drawBuffer(); Pre3dRenderer.emptyBuffer(); commit(); }, mousemove : function(x, y) { Pre3dCamera(0, 0, -10, 0.5, 0, 0); Pre3dCamera(0, 0, -10, 0.5, x * pi2, y * pi2); } };} , "pre3d_colorscube.js" : function() {// Test using Dean McNamee's Pre3D renderer - see: http://deanm.github.com/pre3d/ // Pre3D and original Colorscube demo (c) by Dean McNamee var cubes, num_cubes; var nc = 6; return { init : function() { Pre3dInit(); cubes = [ ]; for (var i = 0; i < nc; ++i) { for (var j = 0; j < nc; ++j) { for (var k = 0; k < nc; ++k) { if (i == 0 || j == 0 || k == 0 || i == nc-1 || j == nc-1 || k == nc-1) { var cube = Pre3d.ShapeUtils.makeCube(1); var transform = new Pre3d.Transform(); var x = (i - 3) * 2; var y = (j - 3) * 2; var z = (k - 3) * 2; transform.translate(x, y, z); cubes.push({ shape: cube, color: new Pre3d.RGBA(i / nc, j / nc, k / nc, 0.3), trans: transform, x : x, y : y, z : z, row : i }); } } } } num_cubes = cubes.length; Pre3dRenderer.camera.focal_length = 2.5; Pre3dCamera(0, 0, -30, 0.40, -1.06, 0); }, render : function() { decay(0.5); if (!mouse.over) Pre3dCamera(0, 0, -30, 0.40, -1.06 + sin(time/3) * pi2, cos(time/3) * pi2); for (var i = 0; i < num_cubes; ++i) { var cube = cubes[i]; if ( ((time % 0.7) / 0.7 * nc)>>0 == cube.row) var scale = 1 + soundData.mid * 0.7; else var scale = 0.7 + soundData.bass * 0.1; var trans = cube.trans; trans.reset(); trans.scale(scale,scale,scale); trans.translate(cube.x, cube.y, cube.z); Pre3dRenderer.fill_rgba = cube.color; Pre3dRenderer.transform = cube.trans; Pre3dRenderer.bufferShape(cube.shape); } Pre3dRenderer.drawBuffer(); Pre3dRenderer.emptyBuffer(); drawText("Pre3D by Dean McNamee (deanm.github.com)", "smb3", 1, 0.5, 0.95); commit(); }, mousemove : function(x, y) { Pre3dCamera(0, 0, -30, 0.40, -1.06 + x * pi2, y * pi2); } };} , "hypnoglow.js" : function() {// Tribute to p01's Dynamic Hypnoglow. See: http://www.p01.org/releases/20_lines_dynamic_hypnoglow/ var q = 0.25; return { render : function() { quality(q); decay(0.9); var mx = mouse.x*screenWidth*10, my = mouse.y*screenHeight*10, t = time*1000, b = pow(soundData.bass, 0.3); var colors = ['#165', '#457', 'rgb(' + round(24+my/19+34*cos(t/8192+mx/92)) + ',' + round(16+20*cos(2+t/7192 + my/71)) + ',' + round(32+24*cos(4+t/5192 + mx/87)) + ')']; for(var j=0; j> 0; drawPath(pointsL, false, null, "hsl(" + h + ",100%,15%)", 32); drawPath(pointsL, false, null, "hsl(" + h + ",100%,25%)", 24); quality(1); drawPath(pointsL, false, null, "white", 2); drawRect(0,0.8,1,0.2,"black"); var font = "aura"; drawText("Artist:", font, 1.3, 0.05, 0.89, "left"); drawText("Track:", font, 1.3, 0.05, 0.94, "left"); drawText("Mr. Spastic", font, 1.3, 0.35, 0.89, "left"); drawText("tEh (r0x!)", font, 1.3, 0.35, 0.94, "left"); drawRect(0,0.8,1,0.2,"rgba(0,0,0,0.3)"); commit(); } };} , "imagedeform.js" : function() {var waves = []; return { render : function() { drawImage("pirateship.jpg", 0, 0, 1, 1); drawText("CLICK FOR WAVES", "smb3", 2, 0.5, 0.9); for (var a=0,b=waves.length;a 3) waves.shift(); } };} , "onesandzeros.js" : function() {return { render : function() { decay(0.15); var n = 20, s = 1/n, chars = ("01 ").split(""); deform(function(r,a,x,y) { return { moveY : 0.05, stretchX : 1.1 } },1,1,0); for (var i=0;i<=n;i++) drawText(chars[(random()*chars.length)>>0], "smb3", 2, i*s + 0.02, 0.02); commit(); } };} , "embossblobs.js" : function() {// This is the same as Blobs but with an emboss effect. // Requires Pixastic, ie. won't work in stable Chrome. // Click to take control of blob #1 return { init : function() { quality(0.5); }, render : function() { decay(1); var s = 1/screenWidth, hs = s*.5, t = time/3, pos = [], n = 3; for (var i=0;i 75 && !b) drawRect(x, y, s, s, "white"); } } for (var i=0;i> 0; var l = sin(t)*50 + (sin(hue/(100 + sin(t/2.3)*50)*pi) * 100) >> 0; drawRect(x+.5, y+.5, s, s, "hsla(" + hue + ",100%," + l + "%,0.5)"); } } commit(); } };} , "waveformdeform.js" : function() {// Music by Mr. Spastic (http://www.8bitpeoples.com/discography/by/mr_spastic) (CC BY-NC-ND) return { render : function() { decay(0.2); var n = 128, p = []; for (var i=0;i<=n;i++) p[i] = [i/n, .5 + soundData.waveDataL[(i/n*255)>>0] * .15]; quality(0.1); drawPath(p, false, null, "white", 20); quality(0.25); drawPath(p, false, null, "yellow", 12); drawPath(p, false, null, "red", 12); quality(0.5); drawPath(p, false, null, "black", 10); drawPath(p, false, null, "white", 1); deform(function(r, a, x, y) { return { rotate : x - .5, stretchX : 1.4, moveY : -.05 } }, 8, 8); commit(); } }; } , "blobs.js" : function() {// Click to take control of blob #1 var ts = 0; return { init : function() { //quality(0.4); }, render : function() { if (frameNum == 0) drawRect(0,0,1,1,"rgba(255,255,255,0.5)"); // decay(1); quality(0.4); decay(0.15); var n = 100; ts += 0.10 + time * 0.01; for (var i=0;i>0) + ",70%,70%)" ); } // commit(true); var s = 1/screenWidth, hs = s*.5, t = time, pos = [], n = 4; for (var i=0;i 75 && c < 170 && !b) drawRect(x, y, s, s, "white"); } } for (var i=0;i 0.32 ? 0 : (dx / dist) * radius * sin(dist/radius), moveY : dist > 0.32 ? 0 : (dy / dist) * radius * sin(dist/radius) } },12,12,0); commit(); drawCircle(mx, my, 0.36, null, "black", 8); drawCircle(mx, my, 0.36, null, "white", 4); commit(); } };} , "pre3d_spinring.js" : function() {// Test using Dean McNamee's Pre3D renderer - see: http://deanm.github.com/pre3d/ // Pre3D and original Spin Ring demo (c) by Dean McNamee var orange, green, box1, box2, box3, state; function spin() { var m1 = 2 + soundData.mid; state.box1_rotate_y_rad += 0.1 * m1; state.box1_rotate_x_rad += 0.01 * m1; state.box1_rotate_z_rad += 0.03 * m1; state.box1_z = sin(state.box1_rotate_y_rad / 2) - 2; var m2 = 3; state.box2_rotate_y_rad += 0.1 * m2; state.box2_rotate_x_rad += 0.01 * m2; state.box2_x = sin(state.box2_rotate_y_rad / 2) * 3; state.box2_y = sin(state.box2_rotate_x_rad * 4) * 2.8; var m2 = 3; state.box3_rotate_y_rad -= 0.1 * m2; state.box3_rotate_x_rad -= 0.01 * m2; state.box3_x = sin(state.box3_rotate_y_rad / 2) * 3; state.box3_y = sin(state.box3_rotate_x_rad * 4) * 2.8; } return { init : function() { Pre3dInit(); box1 = Pre3d.ShapeUtils.makeBoxWithHole(0.8, 0.8, 0.8, 0.4, 0.4); box2 = Pre3d.ShapeUtils.makeCube(0.5); box3 = Pre3d.ShapeUtils.makeCube(0.5); orange = new Pre3d.RGBA(0xff / 255, 0x78 / 255, 0, 1); green = new Pre3d.RGBA(0x78 / 255, 0xff / 255, 0, 1); for (var i = 0; i < 2; ++i) { Pre3d.ShapeUtils.linearSubdivide(box1); Pre3d.ShapeUtils.averageSmooth(box1); } state = { box1_rotate_y_rad: 0, box1_rotate_x_rad: 0, box1_rotate_z_rad: 0, box1_z: 0, box2_rotate_y_rad: 0, box2_rotate_x_rad: 0, box2_x: 2, box2_y: 0, box2_z: -4, box3_rotate_y_rad: 0, box3_rotate_x_rad: 0, box3_x: -2, box3_y: 0, box3_z: -4 }; Pre3dRenderer.camera.focal_length = 2.5; Pre3dCamera(0, 0, -8, 0, 0, 0); }, render : function() { quality(0.6); decay(0.05); zoom(0.95); spin(); var transform = Pre3dRenderer.transform; transform.reset(); transform.scale(1,1,1 + min(1,soundData.mid*0.25)); transform.rotateZ(state.box1_rotate_z_rad); transform.rotateX(state.box1_rotate_x_rad); transform.rotateY(state.box1_rotate_y_rad); transform.translate(0, 0, state.box1_z); var hue = (time * 180 + 180) % 360; var rgb = hsl2rgb(hue, 100, 50); Pre3dRenderer.fill_rgba = new Pre3d.RGBA(rgb.r / 255, rgb.g / 255, rgb.b / 255, 1); //Pre3dRenderer.fill_rgba = orange; Pre3dRenderer.bufferShape(box1); transform.reset(); transform.scale(1,1 + soundData.bass*0.3, 1); transform.rotateX(state.box2_rotate_x_rad); transform.rotateY(state.box2_rotate_y_rad); transform.translate(state.box2_x, state.box2_y, state.box2_z); var hue = (time * 180) % 360; var rgb = hsl2rgb(hue, 100, 50); Pre3dRenderer.fill_rgba = new Pre3d.RGBA(rgb.r / 255, rgb.g / 255, rgb.b / 255, 1); Pre3dRenderer.bufferShape(box2); transform.reset(); transform.scale(1,1 + soundData.bass*0.3, 1); transform.rotateX(state.box3_rotate_x_rad); transform.rotateY(state.box3_rotate_y_rad); transform.translate(state.box3_x, state.box3_y, state.box3_z); var hue = (time * 180 + 90) % 360; var rgb = hsl2rgb(hue, 100, 50); Pre3dRenderer.fill_rgba = new Pre3d.RGBA(rgb.r / 255, rgb.g / 255, rgb.b / 255, 1); Pre3dRenderer.bufferShape(box3); Pre3dRenderer.drawBuffer(); Pre3dRenderer.emptyBuffer(); commit(); quality(1); drawRect(0,0.91,1,0.1,"black"); drawText("Pre3D by Dean McNamee (deanm.github.com)", "smb3", 1, 0.5, 0.95); commit(); } };} , "scroller.js" : function() {var m = 0.3; var w = 0.08; var g = 0.012; var n = 3; function drawBar(b) { var h = ((time/3 * 360 + b*130) % 360)>>0; for (var i=0;i<3;i++) { var y = 0.45 + 0.2*(b-1)*0; var f = i / 3; var s = 70; var l = ((40 + 60 * f) >> 0); var c = "hsl(" + h + "," + s + "%," + l + "%)"; drawRect(0, y + sin(time*1.5 + b) * m + g*i, 1, w - g*i*2, c); } } return { init : function() { resetTime(); }, render : function() { decay(0.4); for (var b=0;b= 0) drawBar(b); } commit(); scrollText("OBLIGATORY SCROLLING TEXT", "aura", 2, 8, 0.5); deform(function(r, a, x, y){ return { stretchY : 2 + sin(x*pi) * 0.9, moveY : sin(x*pi2*2) * 0.05 } },12,4,0); commit(); for (var b=0;b>0; g = (100 + random()*55)>>0; b = (0 + random()*55)>>0; drawRect(x, 0.90 + random() * 0.1, s*2, 0.05, "rgba("+r+","+g+","+b+",0.12)"); r = (200 + random()*55)>>0; g = (200 + random()*55)>>0; b = (100 + random()*55)>>0; drawRect(x, 0.94 + random()*0.03, s*2, 0.1, "rgba("+r+","+g+","+b+",0.1)"); } for (var i=0;i<10;i++) drawRect(random(), random(), 0.005, 0.01, "rgba(200,200,100,0.7)"); deform(function(r,a,x,y) { return { moveX : (random()-0.5)*0.15*(1-y), moveY : y < 1 ? (random()-0.5)*0.03 : 0, centerY : 1, stretchY : 1.05 } },16,16,0) commit(); } };} , "tunnel.js" : function() {var t = 0; return { init : function() { quality(0.4); }, render : function() { decay(0.15); var n = 100; t += 0.10 + time * 0.01; for (var i=0;i>0) + ",70%,70%)" ); } commit(); } };} , "chesszoom.js" : function() {// mouse over for fancy magnifying glass effect (best in Chrome) return { render : function() { var n = 12; var z = sin(time) * .5 var s = (2 + z) / n; var ox = (cos(time) - sin(time/1.7) - cos(time/0.5)) * 0.1 - 0.3 - z*2/n; var oy = (sin(time/2) + cos(time/1.5) - sin(time/3)) * 0.1 - 0.3 - z*2/n; for (var y=0;y 0.45 ? 0 : (dx / dist) * radius * sin(dist/radius) * m, moveY : dist > 0.45 ? 0 : (dy / dist) * radius * sin(dist/radius) * m } },12,12,0); commit(); drawCircle(mouse.x, mouse.y, 0.47, null, "black", 6); drawCircle(mouse.x, mouse.y, 0.47, null, "white", 3); // } commit(); } };} , "paint2.js" : function() {var mx = 0, my = 0, d = 0; var text = "PAINT!"; var mp = []; var chars; return { init : function() { chars = text.split(""); for (var i=0;i> 0; var n = 40; if (mouse.over) { var f = 1 / (n); for (var i=0;i text.length) mp.shift(); } } };} , "title.js" : function() {return { init : function() { resetTime(); quality(1); playSound("Mr_Spastic_tEh(rox!)_64kbit_mono.mp3"); }, render : function() { decay(0.2); if (frameNum == 4) drawRect(0,0,1,1,"white"); var font = "smb3"; if (time > 0.7) { str = "5 OMG,"; drawText(str, font, 3, 0.1, 0.1, "left"); } if (time > 0.8) { str = "4 IT'S"; drawText(str, font, 3, 0.1, 0.2, "left"); } if (time > 0.9) { str = "3 FULL"; drawText(str, font, 3, 0.1, 0.3, "left"); } if (time > 1.0) { str = "2 OF"; drawText(str, font, 3, 0.1, 0.4, "left"); } if (time > 1.1) { str = "1 JAVASCRIPT"; drawText(str, font, 3, 0.1, 0.5, "left"); } commit(); } };} , "colortunnel.js" : function() {var big = 0; return { init : function() { }, render : function() { decay(0.1); if (big > 0) big -= 0.1; var n = ((time*12)%16)>>0, s = 1/16; for (var x=0;x<16;x++) for (var y=0;y<16;y++) drawRect(0.2 + x*s*0.6, 0.2 + (y)*s*0.6, s * 0.4, s * 0.4, ((x^y) 14) stop(); } } };} , "spasticsquared.js" : function() {// I don't know what this is. A dancing Mario? For fun and color inversion, try clicking. // Music by Mr. Spastic (http://www.8bitpeoples.com/discography/by/mr_spastic) (CC BY-NC-ND) return { init : function() { quality(0.5); resetTime(); }, render : function() { var hue = (time%1.5/1.5*360); drawRect(.2, .2, .6, .6, "hsla(" + hue + ",100%,50%,0.2)", "white", 2); decay(.5 - soundData.bass * .3); deform(function(radius, angle, x, y, mouse){ return { stretchX : 1 + (random()-0.5)*0.1 * soundData.bass, stretchY : 1 + (random()-0.5)*0.1 * soundData.bass, rotate : sin(angle*0.5)*0.1 + 0.5*time } }, 4, 4) if (soundData.mid > .7) drawImage("mario_jump_" + (time%1.5>.75? "l":"r") + ".png", .3, .3 - (soundData.mid)*.05, .4, .4); else drawImage("mario_stand.png", .3, .3, .4, .4); commit(); /* scrollText("Today Mario dances just for YOU", "aura", 2, 15, .5); deform(function(radius, angle, x, y, mouse){ return { moveY : sin(-x*pi2) * .1 * soundData.bass + 0.4, stretchY : 1 + sin(x*pi) * 6 * soundData.bass } }, 16, 0, false) */ drawRect(0,0,1,1, "hsla(" + (360-hue) + ",100%,50%," + (soundData.treb*0.05) + ")") if (mouse.down) process("invert", {}, true) commit(); } };} , "ellipse.js" : function() {// this is messed up in Opera. Looks like something's wrong with the canvas transformations. return { init : function() { quality(0.5); }, render : function() { decay(0.3); drawCircle(.5, .5, .3, "rgba(0,128,0,0.4)", "green", 2); var fill = "rgba(0,255,0,0.3)"; var fill = "hsla(0,100%,50%,0.3)"; drawEllipse(.5, .5, .3, .1, time, fill, "green", 4); var fill = "hsla(60,100%,50%,0.3)"; drawEllipse(.5, .5, .3, .1, time*0.75, fill, "green", 4); var fill = "hsla(120,100%,50%,0.3)"; drawEllipse(.5, .5, .3, .1, time*1.5, fill, "green", 4); var fill = "hsla(180,100%,50%,0.3)"; drawEllipse(.5, .5, .3, .1, -time*0.75, fill, "green", 4); var fill = "hsla(240,100%,50%,0.3)"; drawEllipse(.5, .5, .3, .1, -time*1.5, fill, "green", 4); deform(function(){ return { moveX : .1 * cos(time*4), moveY : .1 * sin(time*4), zoom : .9 + sqrt(soundData.bass) * 0.2 - 0.1 } },1,1); commit(); } };} } ;