From da07de3b118ab4224956b0f931bcae8c237d2c68 Mon Sep 17 00:00:00 2001 From: CharsonBurensen <1peruejos@Hdsb.ca> Date: Wed, 23 Apr 2025 10:51:12 -0400 Subject: [PATCH 1/3] Add files via upload --- note_block_advanced.js | 628 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 628 insertions(+) create mode 100644 note_block_advanced.js diff --git a/note_block_advanced.js b/note_block_advanced.js new file mode 100644 index 00000000..7900db96 --- /dev/null +++ b/note_block_advanced.js @@ -0,0 +1,628 @@ +audioContext = new AudioContext() + +//Derived from Alice's note_block.js - thanks! +//adv_note_block/note_block_advance/nba + +oscillatorDefaults = { + frequency: 440, + type: "sine", + endType: "none", + length: 1, + volume: 1, + delay: 0, +}; + +audioObject = {}; + +function oscillator(name="test",parameterObject=oscillatorDefaults){ //creates oscillator with gain node, has specifiable frequency and type, fades out over 1 second (hard-coded) + var defaultKeys = Object.keys(oscillatorDefaults); //readability variable + + for(i = 0; i < defaultKeys.length; i++) { + var key = defaultKeys[i]; //the indexed keyname + if(typeof(parameterObject[key]) === "undefined") { + parameterObject[key] = oscillatorDefaults[key]; + }; + }; + + var oscillatorNodeName = `${name}Oscillator`; + var gainNodeName = `${name}Gain`; + + audioObject[oscillatorNodeName] = audioContext.createOscillator() + audioObject[gainNodeName] = audioContext.createGain() + audioObject[gainNodeName].gain.value = parameterObject.volume; + audioObject[oscillatorNodeName].type = parameterObject.type + audioObject[oscillatorNodeName].connect(audioObject[gainNodeName]) + audioObject[oscillatorNodeName].frequency.value = parameterObject.frequency + audioObject[gainNodeName].connect(audioContext.destination) + audioObject[oscillatorNodeName].start(audioContext.currentTime + parameterObject.delay) + + //stopping handler + if(parameterObject.endType === "exponential") { //starts fading immediately + audioObject[gainNodeName].gain.exponentialRampToValueAtTime( + 0.00001, audioContext.currentTime + parameterObject.length + ); + } else if(parameterObject.endType === "linear") { //starts fading immediately + audioObject[gainNodeName].gain.linearRampToValueAtTime( + 0.00001, audioContext.currentTime + parameterObject.length + ); + } else { //waits to stop + audioObject[oscillatorNodeName].stop(audioContext.currentTime + parameterObject.delay + parameterObject.length); + }; +}; + +elements.c_note_block = { + color: "#eb4034", + name: "Note Block - C", + behavior: behaviors.WALL, + state: "solid", + category: "note_blocks", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 261.63, + type: "triangle", + endType: "none", + length: 0.5, + volume: 0.7, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + tick: function(pixel) { + var pixelSoundName = `x${pixel.x}y${pixel.y}`; //Generate unique-enough name + + var pixelPropertyObject = { //Load sound properties from pixel as object; + frequency: pixel.frequency, + type: pixel.type, + endType: pixel.endType, + length: pixel.length, + volume: pixel.volume, + delay: pixel.delay, + }; + + //console.log(pixelPropertyObject); + + if(pixel.debounce < 1) { + //console.log(`${pixel.debounce} not debounced, play`); + if(pixel.charge) { + oscillator(pixelSoundName,pixelPropertyObject); + delete pixel.charge; + pixel.debounce = pixel.debounceLength; + }; + } else if(pixel.debounce > 0) { + //console.log(`${pixel.debounce} debounced, don't play`); + pixel.debounce--; + }; + }, +}; + +elements.cs_note_block = { + color: "#fc3903", + name: "Note Block - C Sharp", + behavior: behaviors.WALL, + state: "solid", + category: "note_blocks", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 277.183, + type: "triangle", + endType: "none", + length: 0.5, + volume: 0.7, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + tick: function(pixel) { + var pixelSoundName = `x${pixel.x}y${pixel.y}`; //Generate unique-enough name + + var pixelPropertyObject = { //Load sound properties from pixel as object; + frequency: pixel.frequency, + type: pixel.type, + endType: pixel.endType, + length: pixel.length, + volume: pixel.volume, + delay: pixel.delay, + }; + + //console.log(pixelPropertyObject); + + if(pixel.debounce < 1) { + //console.log(`${pixel.debounce} not debounced, play`); + if(pixel.charge) { + oscillator(pixelSoundName,pixelPropertyObject); + delete pixel.charge; + pixel.debounce = pixel.debounceLength; + }; + } else if(pixel.debounce > 0) { + //console.log(`${pixel.debounce} debounced, don't play`); + pixel.debounce--; + }; + }, +}; + +elements.d_note_block = { + color: "#fc6203", + name: "Note Block - D", + behavior: behaviors.WALL, + state: "solid", + category: "note_blocks", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 293.66, + type: "triangle", + endType: "none", + length: 0.5, + volume: 0.7, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + tick: function(pixel) { + var pixelSoundName = `x${pixel.x}y${pixel.y}`; //Generate unique-enough name + + var pixelPropertyObject = { //Load sound properties from pixel as object; + frequency: pixel.frequency, + type: pixel.type, + endType: pixel.endType, + length: pixel.length, + volume: pixel.volume, + delay: pixel.delay, + }; + + //console.log(pixelPropertyObject); + + if(pixel.debounce < 1) { + //console.log(`${pixel.debounce} not debounced, play`); + if(pixel.charge) { + oscillator(pixelSoundName,pixelPropertyObject); + delete pixel.charge; + pixel.debounce = pixel.debounceLength; + }; + } else if(pixel.debounce > 0) { + //console.log(`${pixel.debounce} debounced, don't play`); + pixel.debounce--; + }; + }, +}; + +elements.ef_note_block = { + color: "#fc9803", + name: "Note Block - E Flat", + behavior: behaviors.WALL, + state: "solid", + category: "note_blocks", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 293.66, + type: "triangle", + endType: "none", + length: 0.5, + volume: 0.7, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + tick: function(pixel) { + var pixelSoundName = `x${pixel.x}y${pixel.y}`; //Generate unique-enough name + + var pixelPropertyObject = { //Load sound properties from pixel as object; + frequency: pixel.frequency, + type: pixel.type, + endType: pixel.endType, + length: pixel.length, + volume: pixel.volume, + delay: pixel.delay, + }; + + //console.log(pixelPropertyObject); + + if(pixel.debounce < 1) { + //console.log(`${pixel.debounce} not debounced, play`); + if(pixel.charge) { + oscillator(pixelSoundName,pixelPropertyObject); + delete pixel.charge; + pixel.debounce = pixel.debounceLength; + }; + } else if(pixel.debounce > 0) { + //console.log(`${pixel.debounce} debounced, don't play`); + pixel.debounce--; + }; + }, +}; + + +elements.e_note_block = { + color: "#fce303", + name: "Note Block - E", + behavior: behaviors.WALL, + state: "solid", + category: "note_blocks", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 329.63, + type: "triangle", + endType: "none", + length: 0.5, + volume: 0.7, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + tick: function(pixel) { + var pixelSoundName = `x${pixel.x}y${pixel.y}`; //Generate unique-enough name + + var pixelPropertyObject = { //Load sound properties from pixel as object; + frequency: pixel.frequency, + type: pixel.type, + endType: pixel.endType, + length: pixel.length, + volume: pixel.volume, + delay: pixel.delay, + }; + + //console.log(pixelPropertyObject); + + if(pixel.debounce < 1) { + //console.log(`${pixel.debounce} not debounced, play`); + if(pixel.charge) { + oscillator(pixelSoundName,pixelPropertyObject); + delete pixel.charge; + pixel.debounce = pixel.debounceLength; + }; + } else if(pixel.debounce > 0) { + //console.log(`${pixel.debounce} debounced, don't play`); + pixel.debounce--; + }; + }, +}; + +elements.f_note_block = { + color: "#fce303", + name: "Note Block - F", + behavior: behaviors.WALL, + state: "solid", + category: "note_blocks", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 349.228, + type: "triangle", + endType: "none", + length: 0.5, + volume: 0.7, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + tick: function(pixel) { + var pixelSoundName = `x${pixel.x}y${pixel.y}`; //Generate unique-enough name + + var pixelPropertyObject = { //Load sound properties from pixel as object; + frequency: pixel.frequency, + type: pixel.type, + endType: pixel.endType, + length: pixel.length, + volume: pixel.volume, + delay: pixel.delay, + }; + + //console.log(pixelPropertyObject); + + if(pixel.debounce < 1) { + //console.log(`${pixel.debounce} not debounced, play`); + if(pixel.charge) { + oscillator(pixelSoundName,pixelPropertyObject); + delete pixel.charge; + pixel.debounce = pixel.debounceLength; + }; + } else if(pixel.debounce > 0) { + //console.log(`${pixel.debounce} debounced, don't play`); + pixel.debounce--; + }; + }, +}; + +elements.fs_note_block = { + color: "#03fc3d", + name: "Note Block - F Sharp", + behavior: behaviors.WALL, + state: "solid", + category: "note_blocks", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 369.99, + type: "triangle", + endType: "none", + length: 0.5, + volume: 0.7, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + tick: function(pixel) { + var pixelSoundName = `x${pixel.x}y${pixel.y}`; //Generate unique-enough name + + var pixelPropertyObject = { //Load sound properties from pixel as object; + frequency: pixel.frequency, + type: pixel.type, + endType: pixel.endType, + length: pixel.length, + volume: pixel.volume, + delay: pixel.delay, + }; + + //console.log(pixelPropertyObject); + + if(pixel.debounce < 1) { + //console.log(`${pixel.debounce} not debounced, play`); + if(pixel.charge) { + oscillator(pixelSoundName,pixelPropertyObject); + delete pixel.charge; + pixel.debounce = pixel.debounceLength; + }; + } else if(pixel.debounce > 0) { + //console.log(`${pixel.debounce} debounced, don't play`); + pixel.debounce--; + }; + }, +}; + +elements.g_note_block = { + color: "#03fcca", + name: "Note Block - G", + behavior: behaviors.WALL, + state: "solid", + category: "note_blocks", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 391.995, + type: "triangle", + endType: "none", + length: 0.5, + volume: 0.7, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + tick: function(pixel) { + var pixelSoundName = `x${pixel.x}y${pixel.y}`; //Generate unique-enough name + + var pixelPropertyObject = { //Load sound properties from pixel as object; + frequency: pixel.frequency, + type: pixel.type, + endType: pixel.endType, + length: pixel.length, + volume: pixel.volume, + delay: pixel.delay, + }; + + //console.log(pixelPropertyObject); + + if(pixel.debounce < 1) { + //console.log(`${pixel.debounce} not debounced, play`); + if(pixel.charge) { + oscillator(pixelSoundName,pixelPropertyObject); + delete pixel.charge; + pixel.debounce = pixel.debounceLength; + }; + } else if(pixel.debounce > 0) { + //console.log(`${pixel.debounce} debounced, don't play`); + pixel.debounce--; + }; + }, +}; + +elements.gs_note_block = { + color: "#0394fc", + name: "Note Block - G Sharp", + behavior: behaviors.WALL, + state: "solid", + category: "note_blocks", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 415.305, + type: "triangle", + endType: "none", + length: 0.5, + volume: 0.7, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + tick: function(pixel) { + var pixelSoundName = `x${pixel.x}y${pixel.y}`; //Generate unique-enough name + + var pixelPropertyObject = { //Load sound properties from pixel as object; + frequency: pixel.frequency, + type: pixel.type, + endType: pixel.endType, + length: pixel.length, + volume: pixel.volume, + delay: pixel.delay, + }; + + //console.log(pixelPropertyObject); + + if(pixel.debounce < 1) { + //console.log(`${pixel.debounce} not debounced, play`); + if(pixel.charge) { + oscillator(pixelSoundName,pixelPropertyObject); + delete pixel.charge; + pixel.debounce = pixel.debounceLength; + }; + } else if(pixel.debounce > 0) { + //console.log(`${pixel.debounce} debounced, don't play`); + pixel.debounce--; + }; + }, +}; + +elements.a_note_block = { + color: "#0f03fc", + name: "Note Block - A", + behavior: behaviors.WALL, + state: "solid", + category: "note_blocks", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 440, + type: "triangle", + endType: "none", + length: 0.5, + volume: 0.7, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + tick: function(pixel) { + var pixelSoundName = `x${pixel.x}y${pixel.y}`; //Generate unique-enough name + + var pixelPropertyObject = { //Load sound properties from pixel as object; + frequency: pixel.frequency, + type: pixel.type, + endType: pixel.endType, + length: pixel.length, + volume: pixel.volume, + delay: pixel.delay, + }; + + //console.log(pixelPropertyObject); + + if(pixel.debounce < 1) { + //console.log(`${pixel.debounce} not debounced, play`); + if(pixel.charge) { + oscillator(pixelSoundName,pixelPropertyObject); + delete pixel.charge; + pixel.debounce = pixel.debounceLength; + }; + } else if(pixel.debounce > 0) { + //console.log(`${pixel.debounce} debounced, don't play`); + pixel.debounce--; + }; + }, +}; + +elements.bf_note_block = { + color: "#9803fc", + name: "Note Block - B Flat", + behavior: behaviors.WALL, + state: "solid", + category: "note_blocks", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 466.164, + type: "triangle", + endType: "none", + length: 0.5, + volume: 0.7, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + tick: function(pixel) { + var pixelSoundName = `x${pixel.x}y${pixel.y}`; //Generate unique-enough name + + var pixelPropertyObject = { //Load sound properties from pixel as object; + frequency: pixel.frequency, + type: pixel.type, + endType: pixel.endType, + length: pixel.length, + volume: pixel.volume, + delay: pixel.delay, + }; + + //console.log(pixelPropertyObject); + + if(pixel.debounce < 1) { + //console.log(`${pixel.debounce} not debounced, play`); + if(pixel.charge) { + oscillator(pixelSoundName,pixelPropertyObject); + delete pixel.charge; + pixel.debounce = pixel.debounceLength; + }; + } else if(pixel.debounce > 0) { + //console.log(`${pixel.debounce} debounced, don't play`); + pixel.debounce--; + }; + }, +}; + +elements.b_note_block = { + color: "#fc03b5", + name: "Note Block - B", + behavior: behaviors.WALL, + state: "solid", + category: "note_blocks", + density: 1200, + hardness: 0.2, + breakInto: ["plastic","metal_scrap","metal_scrap","metal_scrap"], + conduct: 1, + properties: { + frequency: 493.883, + type: "triangle", + endType: "none", + length: 0.5, + volume: 0.7, + delay: 0, + debounce: 0, + debounceLength: tps, + }, + tick: function(pixel) { + var pixelSoundName = `x${pixel.x}y${pixel.y}`; //Generate unique-enough name + + var pixelPropertyObject = { //Load sound properties from pixel as object; + frequency: pixel.frequency, + type: pixel.type, + endType: pixel.endType, + length: pixel.length, + volume: pixel.volume, + delay: pixel.delay, + }; + + //console.log(pixelPropertyObject); + + if(pixel.debounce < 1) { + //console.log(`${pixel.debounce} not debounced, play`); + if(pixel.charge) { + oscillator(pixelSoundName,pixelPropertyObject); + delete pixel.charge; + pixel.debounce = pixel.debounceLength; + }; + } else if(pixel.debounce > 0) { + //console.log(`${pixel.debounce} debounced, don't play`); + pixel.debounce--; + }; + }, +}; \ No newline at end of file From be52845f5e31802437163c428149b03df7062ccb Mon Sep 17 00:00:00 2001 From: CharsonBurensen <1peruejos@Hdsb.ca> Date: Wed, 23 Apr 2025 10:54:10 -0400 Subject: [PATCH 2/3] Update mod-list.html --- mod-list.html | 1 + 1 file changed, 1 insertion(+) diff --git a/mod-list.html b/mod-list.html index cc061b34..521b2135 100644 --- a/mod-list.html +++ b/mod-list.html @@ -243,6 +243,7 @@ human_friendly_design.jsMakes pipes and portals not kill humans, as well as making drag and mix not kill humans.Nekonico logicgates.jsAdds predictable electricity and logic gatesnousernamefound note_block.jsAdds musical Note BlocksAlice +note_block_advanced.jsImprovement of Alice's note_block.js, adds different blocks with different frequenciesCharsonBurensen nousersthings.jsDestroyable machines, pipe variants, filters, and morenousernamefound portal.jsAdds portals that can teleport pixelsAlice pullers.jsAdds pixels that pull pixels towards themvoidapex11 From a46c6e5b25929353724fb7fd244724a6ed7a47cc Mon Sep 17 00:00:00 2001 From: slweeb <91897291+slweeb@users.noreply.github.com> Date: Wed, 23 Apr 2025 21:13:40 -0400 Subject: [PATCH 3/3] Update mod-list.html --- mod-list.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mod-list.html b/mod-list.html index 521b2135..d3c99c8a 100644 --- a/mod-list.html +++ b/mod-list.html @@ -243,7 +243,7 @@ human_friendly_design.jsMakes pipes and portals not kill humans, as well as making drag and mix not kill humans.Nekonico logicgates.jsAdds predictable electricity and logic gatesnousernamefound note_block.jsAdds musical Note BlocksAlice -note_block_advanced.jsImprovement of Alice's note_block.js, adds different blocks with different frequenciesCharsonBurensen +note_block_advanced.jsEdit of Alice's note_block.js, adds different blocks with different frequenciesCharsonBurensen nousersthings.jsDestroyable machines, pipe variants, filters, and morenousernamefound portal.jsAdds portals that can teleport pixelsAlice pullers.jsAdds pixels that pull pixels towards themvoidapex11