Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- RATE=44100,
- TEMPO=60/600,
- SEMITONE=1.059463094,
- song=(t)=>(
- // s = sustain/level (0-1)
- // d = decay (time)
- // n = note (semitones)
- // sustain/decay multiplier
- decay=(s,d,t)=>max(s*(d-t)/d,0),
- U=(n,t)=>t*220*pow(SEMITONE,n),
- // sine wave
- sw=(n,t)=>sin(U(n,t)*PI*4),
- // saw wave
- saw=(n,t)=>(u=U(n,t),u%1+u*.996%1-1),
- // square wave
- sq=(n,t)=>(U(n,t*4)|0)%2,
- // sine w/ SDN
- f=(s,d,n,t)=>sw(n,t) * decay(s,d,t),
- fm=(modS,modD,modN, s,d,n,t)=>sw(n, t + f(modS,modD,n+modN,t)) * decay(s,d,t),
- ts=t/44100,
- beat=floor(ts/TEMPO),
- bprg=ts%TEMPO,
- mp=beat%16,
- LENGTH=16,
- measure=floor(beat/LENGTH),
- mprg=ts%(TEMPO*16),
- m4=measure%4,
- m8=measure%8,
- // 0100 1001 0010 1011
- bup=(mp%3&1)^(mp>11),
- bassnote=[4,4,0,2][m4]-(bup?28:40),
- melnote=[0,3,12,8,0,3,8,3][m8]-12,
- meln2=[12,7,10,10,12,0,7,5][m8]-12,
- mg=(v,l)=>measure>l&&v,
- // MS MD MN CS CD CN t
- fm(-1e-3*bassnote-.017, .4, 0, .5, .6, bassnote, bprg) + // bassline
- mg(fm(9, 9, 0, .04, .03, 0, bprg), 7) + // hats
- mg(fm(0,1,0, !(mp&3)*.7, .5, -38, pow(bprg, .6)), -3) + // kick
- mg(fm(.1,1,0, !((mp+4)&7)/4, .2, 0, pow(bprg, .7)), 7) + // snare
- mg(
- saw(m4==3?2:0, mprg) +
- saw(m8==3?5:3, mprg) +
- saw(m8==7?7:(m4<2?7:4+m4*2), mprg),
- 15
- )*min(mprg, .4) * decay(.5,2,mprg) + // chords
- mg(
- fm(2e-3,2,0, .5,2,melnote, mprg) +
- fm(2e-3,2,0, meln2&&.5,2,meln2, max(mprg-TEMPO*8,0)),
- 23
- ) + // melody
- 0
- ),
- //song(t) * 64 + 128;
- echo=(t,k)=>(k?song(max(t-k*4200,0))*pow(.3,k)+echo(t,k-1):0),
- echo(t,4) * 128 + 128;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement