Last active
June 17, 2016 16:53
-
-
Save rasteiner/ae09bf8ef9fff3ea7c64 to your computer and use it in GitHub Desktop.
Wavepot - semplicissimo player di melodie (senza ritmo)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*! | |
* Vai su: http://wavepot.com/ | |
* Modifica la melodia qui sotto: | |
*/ | |
var bpm = 120; | |
var melodia = 'do do sol sol la la sol fa fa mi mi re re do '; | |
var basso = 'do do sol sol la la sol fa fa mi mi re re do '; | |
/*-------------------------------------------------------------*/ | |
var note = { | |
'do': 261.6, | |
'do#': 277.2, | |
're': 293.7, | |
're#': 311.1, | |
'mi': 329.6, | |
'fa': 349.2, | |
'fa#': 370.0, | |
'sol': 392, | |
'sol#': 415.3, | |
'la': 440, | |
'la#': 466.2, | |
'si': 493.9 | |
}; | |
var bps = bpm / 60; | |
function getMelody(str) { | |
var m = str.split(' '); | |
var len = m.length; | |
var mlen = len / bps; | |
return { | |
m: m, | |
len: len, | |
mlen: mlen | |
}; | |
} | |
var bassMelody = getMelody(basso); | |
var highMelody = getMelody(melodia); | |
export function dsp(t) { | |
faster(); | |
return bass(t) * 0.3 + high(t) * 0.7; | |
} | |
function faster(t) { | |
bpm *= 1.000001; | |
bps = bpm / 60; | |
bassMelody.mlen = bassMelody.len / bps; | |
highMelody.mlen = highMelody.len / bps; | |
} | |
function bass(t) { | |
var power = Math.sin(Math.PI * t * bps) / 5; | |
var n = bassMelody.m[Math.floor((t % bassMelody.mlen) * bps)]; | |
if(!note.hasOwnProperty(n)) { | |
return 0; | |
} | |
return sin(t, note[n] / 2) * power; | |
} | |
function high(t) { | |
var power = Math.sin(Math.PI * t * bps) / 5; | |
var n = highMelody.m[Math.floor((t % highMelody.mlen) * bps)]; | |
if(!note.hasOwnProperty(n)) { | |
return 0; | |
} | |
return linear(t, note[n]) * power; | |
} | |
function sin(t, freq) { | |
return Math.sin((Math.PI * 2 * t) * freq); | |
} | |
function linear(t, freq) { | |
return (t % (1/freq)) * freq; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
var marcianuziale = 'do5 si fa# la sol fa re do si3 do re do re mi do mi sol do mi sol do5 si fa# la sol fa re do si3 do mi re mi re do ';
var happybday = 'do do re do fa mi do do re do sol fa do do do5 la fa mi re la# la# la fa sol fa ';
var framartino = 'do re mi do do re mi do mi fa sol mi fa sol sol la sol fa mi do sol la sol fa mi do re sol do re sol do ';
var barilla= 'do re mi fa sol la sol la si do5 si la sol la sol fa mi re mi sol re re mi fa sol fa mi re do re mi fa sol la sol la si do5 si la sol la la si do5 sol mi sol fa re do ';