Skip to content

Instantly share code, notes, and snippets.

@rasteiner
Last active June 17, 2016 16:53
Show Gist options
  • Save rasteiner/ae09bf8ef9fff3ea7c64 to your computer and use it in GitHub Desktop.
Save rasteiner/ae09bf8ef9fff3ea7c64 to your computer and use it in GitHub Desktop.
Wavepot - semplicissimo player di melodie (senza ritmo)
/*!
* 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;
}
@gusmerolisara
Copy link

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 ';

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment