A melody played by a simple piano synthesizer with a reverb and some other stuff.
Log in to post a comment.
ditty.bpm = 120; const quality = 12; let bandPass = (f0, f1) => { //something like a band pass filter. i doubt that its actualy a band pass filter let a = { f0: f0, f1: f1, z0: 0, z1: 0, p: 0, v: 0, sample(sample) { a.z0 = lerp(a.z0, sample, a.f0); a.z1 = lerp(a.z1, sample, a.f1); let k = a.z0 + (sample-a.z1); return k; } } return a; } let resonancePass = (k, damp=0.99) => { // passes spacific freqancys more than others based on k let a = { k: k, p: 0, v: 0, damp: damp, sample(sample) { let k = sample; let acc = k-a.p; a.v += acc*a.k*(Math.cos(a.p*3)*0.5+0.5); a.p += a.v; a.p *= a.damp; return a.p; } } return a; } let saw = (x) => { return } let ding = synth.def(class { constructor(options) { if (options.resonance === undefined) options.resonance = [0.01, 0.1] this.z = 0; this.filters = []; for (let i = 0; i < quality; i++) { this.filters.push(resonancePass(lerp(options.resonance[0], options.resonance[1], Math.pow(Math.random(), 4)))); } this.band = bandPass(0.05, 0.1); this.time = 0; } process(note, env) { let wave = (x) => { return ((x + x%2)%1)*2-1; } this.time += ditty.dt * (midi_to_hz(note)); let signal = wave(this.time)*env.value; let mean = 0; for (let i of this.filters) mean += i.sample(signal); mean /= this.filters.length; return this.band.sample(mean); } }, "ding"); let loop1 = 0; loop(() => { // ding dong ding ding dong dong dingdong !! let amp = 0; if (loop1 > 0) amp = 0.125; if (loop1 > 4) amp = 0; ding.play(c3, { attack: 0, release: 3, duration: 0, amp: amp}); ding.play(e4, { attack: 0, release: 2, duration: 0, amp: amp}); sleep(2); ding.play(c4, { attack: 0, release: 1.5, duration: 0, amp: amp}); sleep(1); ding.play(d4, { attack: 0, release: 1.5, duration: 0, amp: amp}); if (loop1%2 == 0) { sleep(1); ding.play(e4, { attack: 0, release: 1.5, duration: 0, amp: amp}); sleep(1); } else sleep(2); ding.play(c4, { attack: 0, release: 1.5, duration: 0, amp: amp}); sleep(1); ding.play(d3, { attack: 0, release: 3, duration: 0, amp: amp}); ding.play(a3, { attack: 0, release: 2, duration: 0, amp: amp}); sleep(2); ding.play(g3, { attack: 0, release: 1.5, duration: 0, amp: amp}); sleep(1); ding.play(e3, { attack: 0, release: 2, duration: 0, amp: 0.8*amp}); sleep(2); ding.play(g3, { attack: 0, release: 2, duration: 0, amp: 1*amp}); sleep(2); let a = () => { ding.play(c3, { attack: 0, release: 3, duration: 0, amp: amp}); ding.play(e4, { attack: 0, release: 2, duration: 0, amp: amp}); sleep(1.5); ding.play(g4, { attack: 0, release: 2, duration: 0, amp: 2*amp}); sleep(1.5); ding.play(d4, { attack: 0, release: 4, duration: 0, amp: amp}); ding.play(d3, { attack: 0, release: loop1==4?8:4, duration: 0, amp: amp}); sleep(4); } let b = () => { ding.play(c3, { attack: 0, release: 3, duration: 0, amp: 0.5*amp}); ding.play(e4, { attack: 0, release: 2, duration: 0, amp: 0.5*amp}); sleep(1.5); ding.play(g4, { attack: 0, release: 2, duration: 0, amp: 1*amp}); sleep(1.5); ding.play(c4, { attack: 0, release: 4, duration: 0, amp: 1*amp}); ding.play(c3, { attack: 0, release: 4, duration: 0, amp: 0.5*amp}); sleep(2); }; loop1%2==1 ? (a(),b()) : (b(),a()); sleep(10); loop1++; }, {name: "1"}); let loop2 = 0; loop(() => { let amp = 0.0; if (loop2 > 3) { amp = 0.15; } if (loop2 > 35) { amp /= Math.exp(loop2-35); } let k = lerp(0.5, 1, Math.random())*amp; ding.play(c5, { attack: 0, release: 1.5, duration: 0, amp: 1*k}); sleep(1); ding.play(b4, { attack: 0, release: 1.5, duration: 0, amp: 0.8*k}); sleep(1); ding.play(g4, { attack: 0, release: 1.5, duration: 0, amp: 0.7*k}); sleep(1); ding.play(e4, { attack: 0, release: 1.5, duration: 0, amp: 0.8*k}); sleep(1); loop2++; }, {name: "2"}); let loop3 = 0; loop(() => { let amp = 0.09*(1-Math.exp(-loop3)); if (loop3 > 138) { amp /= Math.exp(loop3-138); } ding.play(d4, { attack: 0, release: 1+Math.random()*0.1, duration: 0, amp: amp, resonance: [0.02, 0.1]}); sleep(0.5); ding.play(a3, { attack: 0, release: 1.5+Math.random()*0.1, duration: 0, amp: amp, resonance: [0.02, 0.1]}); sleep(0.5); loop3 ++; }, {name: "3"}); let loop4 = 0; loop(() => { let amp = 0; if (loop4 > 4) amp = 0.09; if (loop4 > 22) { amp /= Math.exp(loop4-22); } ding.play(c3, { attack: 0, release: 1+Math.random()*0.1, duration: 0, amp: amp, resonance: [0.02, 0.1]}); sleep(1.5); ding.play(b2, { attack: 0, release: 1.5+Math.random()*0.1, duration: 0, amp: amp, resonance: [0.02, 0.1]}); sleep(1.5); ding.play(a2, { attack: 0, release: 1.5+Math.random()*0.1, duration: 0, amp: amp, resonance: [0.02, 0.1]}); sleep(1.5); ding.play(a2, { attack: 0, release: 1.5+Math.random()*0.1, duration: 0, amp: amp, resonance: [0.02, 0.1]}); sleep(1.5); loop4++; }, {name: "4"});