628 lines
16 KiB
JavaScript
628 lines
16 KiB
JavaScript
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--;
|
|
};
|
|
},
|
|
}; |