valde/static/js/app.js

86 lines
2.3 KiB
JavaScript
Raw Normal View History

2024-01-25 23:08:03 +00:00
import { amsynth } from "./modules/instruments/amsynth.js"
import { duosynth } from "./modules/instruments/duosynth.js"
import { monosynth } from "./modules/instruments/monosynth.js"
import { plucksynth } from "./modules/instruments/plucksynth.js"
let FILTER_FREQ = 400
let REV_RANGE = 12
let REV = Math.random() * REV_RANGE
let NOTES = ["A3", "A2", "C4", "C3", "F3", "F2"]
let NOTE = NOTES[ Math.floor(Math.random() * NOTES.length)]
let SPACING = ["7h", "8h", "9h", "10h"]
let SPACE = SPACING[Math.floor(Math.random() * SPACING.length)]
Tone.Transport.bpm.value = 60;
let INSTRUMENTS = [amsynth, monosynth, plucksynth]
let INSTRUMENT = INSTRUMENTS[Math.floor(Math.random() * INSTRUMENTS.length)]
const channel = new Tone.Channel();
const freeverb = new Tone.Freeverb({ roomSize: 0.98, wet : 0.4 })
const filter = new Tone.Filter({type:"lowpass", frequency:800})
channel.chain(freeverb, filter, Tone.Master)
for (let inst of INSTRUMENTS) {
inst.connect(channel)
}
const play = () => {
let r = Math.random()
if (r > 0.7) {
const a = new Tone.Loop((time) => {
INSTRUMENT.triggerAttackRelease(NOTE, "16n")
}, SPACE).start(0)
} else if (r > 0.3) {
const a = new Tone.Loop((time) => {
amsynth.triggerAttack(NOTE, "16n")
}, SPACE).start(0)
} else {
freeverb.wet.value = 0.0
const bassPart = new Tone.Sequence(((time, note) => {
plucksynth.triggerAttack(note);
}), ["C7", "C8", "C7", "C5", "C#8"], "8n").start(0);
bassPart.probability = 0.6;
}
}
let ac_x = document.getElementById("ac_x")
let ac_y = document.getElementById("ac_y")
let ac_z = document.getElementById("ac_z")
if (window.DeviceOrientationEvent) {
window.addEventListener(
"deviceorientation",
(event) => {
const rotateDegrees = event.alpha; // alpha: rotation around z-axis
const leftToRight = event.gamma; // gamma: left to right
const frontToBack = event.beta; // beta: front back motion
// ac_x.innerHTML = rotateDegrees
ac_y.innerHTML = leftToRight
// ac_z.innerHTML = frontToBack
filter.frequency.value = (180 + leftToRight) * 6
ac_x.innerHTML = filter.frequency.value
},
true,
);
}
(function() {
document.getElementById('start').addEventListener('click', function() {
Tone.context.resume().then(() => {
Tone.start()
Tone.Transport.start()
play()
})
})
})()