|
18 | 18 | <script> |
19 | 19 | let detuneRange = 4800; |
20 | 20 |
|
21 | | - let oscillator = createjs.Sound.context.createOscillator(); |
22 | | - oscillator.start(); |
23 | 21 | let oscillatorBus = new createjs.Group(); |
24 | | - oscillator.connect(oscillatorBus.inputNode); // Web audio nodes can be connected into SoundJS 2! |
25 | | - |
| 22 | + oscillatorBus.volume = 0; |
| 23 | + oscillatorBus.mute(); |
26 | 24 | oscillatorBus.volume = 0.1; |
27 | 25 |
|
| 26 | + let oscillator = createjs.Sound.context.createOscillator(); |
| 27 | + oscillator.connect(oscillatorBus.inputNode); // Web audio nodes can be connected into SoundJS 2! |
| 28 | + |
28 | 29 | let stage = new createjs.Stage("demoCanvas"); |
29 | 30 |
|
30 | | - stage.on("stagemousedown", (e) => oscillatorBus.unmute()); |
| 31 | + let backgroundFilter = new createjs.Shape(); |
| 32 | + |
| 33 | + backgroundFilter.on("mousedown", (e) => oscillator.start(), window, true); // Start the oscillator on first click |
| 34 | + |
| 35 | + stage.on("stageMouseDown", (e) => oscillatorBus.unmute()); |
| 36 | + backgroundFilter.on("mousedown", (e) => oscillatorBus.unmute()); |
31 | 37 | stage.on("stagemouseup", (e) => oscillatorBus.mute()); |
32 | 38 | stage.on("stagemousemove", handleMouseMove); |
33 | 39 | stage.enableMouseOver(); |
34 | 40 |
|
| 41 | + let fillColor = null, dotFillColor = null; |
| 42 | + |
35 | 43 | function handleMouseMove(e){ |
36 | 44 | oscillator.detune.value = detuneRange * (e.stageX/stage.canvas.width - 1/2); |
| 45 | + |
| 46 | + if(!oscillatorBus.muted){ |
| 47 | + fillColor = getCanvasColor(bgColorCanvas, e.stageX, e.stageY, 0.05); |
| 48 | + dotFillColor = getCanvasColor(dotColorCanvas, e.stageX, e.stageY); |
| 49 | + fillCmd.style = fillColor; |
| 50 | + dotFillCmd.style = dotFillColor; |
| 51 | + dot.visible = true; |
| 52 | + dot.x = e.stageX; |
| 53 | + dot.y = e.stageY; |
| 54 | + }else{ |
| 55 | + dot.visible = false; |
| 56 | + } |
| 57 | + |
37 | 58 | } |
38 | 59 |
|
39 | 60 | // Visuals only beyond this point |
| 61 | + stage.autoClear = false; |
40 | 62 |
|
41 | 63 | createjs.Ticker.addEventListener("tick", handleTick); |
42 | 64 | createjs.Ticker.timingMode = createjs.Ticker.RAF; |
43 | 65 |
|
44 | 66 | function handleTick(e){ |
45 | 67 | stage.update(); |
| 68 | + console.log(fillColor); |
| 69 | + } |
| 70 | + |
| 71 | + |
| 72 | + let fillCmd = backgroundFilter.graphics.beginFill("#9999CC").command; |
| 73 | + backgroundFilter.graphics.drawRect( 0, 0, stage.canvas.width, stage.canvas.height); |
| 74 | + backgroundFilter.graphics.endFill(); |
| 75 | + stage.addChild(backgroundFilter); |
| 76 | + |
| 77 | + fillCmd.style = "rgba(200,100,150,0.01)"; |
| 78 | + |
| 79 | + let dotColor = "#FF0000"; |
| 80 | + let dot = new createjs.Shape(); |
| 81 | + let dotFillCmd = dot.graphics.beginFill(dotColor).command; |
| 82 | + dot.graphics.drawCircle(0,0,7); |
| 83 | + dot.graphics.endFill(); |
| 84 | + stage.addChild(dot); |
| 85 | + |
| 86 | + |
| 87 | + let bgColorImage = document.createElement("img"); |
| 88 | + let bgColorCanvas = document.createElement("canvas"); |
| 89 | + bgColorCanvas.width = 800; |
| 90 | + bgColorCanvas.height = 600; |
| 91 | + bgColorImage.onload = () => bgColorCanvas.getContext("2d").drawImage(bgColorImage, 0, 0); console.log('loaded'); |
| 92 | + bgColorImage.src = "./assets/art/sjs2_examples_theremin_gradient6.png"; |
| 93 | + |
| 94 | + let dotColorImage = document.createElement("img"); |
| 95 | + let dotColorCanvas = document.createElement("canvas"); |
| 96 | + dotColorCanvas.width = 800; |
| 97 | + dotColorCanvas.height = 600; |
| 98 | + dotColorImage.onload = () => dotColorCanvas.getContext("2d").drawImage(dotColorImage, 0, 0); |
| 99 | + dotColorImage.src = "./assets/art/sjs2_examples_theremin_gradient5.png"; |
| 100 | + |
| 101 | + function getCanvasColor(canvas, x, y, alpha = 1){ |
| 102 | + let data = canvas.getContext("2d").getImageData(x, y, 1, 1).data; |
| 103 | + if(data[3] > 0.001){ |
| 104 | + return `rgba(${data[0]}, ${data[1]}, ${data[2]}, ${alpha})` |
| 105 | + }else{ |
| 106 | + return "rgba(200,100,150,0.01)"; |
| 107 | + } |
| 108 | + |
46 | 109 | } |
47 | 110 |
|
48 | | - let background = new createjs.Shape(); |
49 | | - background.graphics.beginFill("#FF00FF"); |
50 | | - background.graphics.drawRect( 0, 0, stage.canvas.width, stage.canvas.height); |
51 | | - background.graphics.endFill(); |
52 | | - stage.addChild(background); |
53 | 111 |
|
54 | 112 | </script> |
55 | 113 | </body> |
|
0 commit comments