Source for demo by Pedro Cardoso.
m=Math;U=900;V=100;s=36
function C(n){return String.fromCharCode(n)}
function I(n){return W(n)+W(n>>16)}
function W(n){return C(n&255)+C((n>>8)&255)}
function M(e){R=22050,w="",n={},b='c #c d #d e f #f g #g a #a b'.split(' ');i=s;while(i--)n[b[i%12]+(0^i/12)]=130*m.pow(2,i/12);while(d=e.shift()){d=d.split(/(\d{1,2})(\.|-)?(.*)/);t=R*2/(d[1]||1);q=n[d[3]]||0;i=0;while (++i<t){v=m.sin((6.28*i*q)/R)*120*(t-i)/t;w+=C((v-128)&255)}s+=t}a=new Audio;a.src="data:audio/wav;base64,"+btoa("RIFF"+I(s)+"WAVEfmt "+I(16)+W(1)+W(1)+I(R)+I(R)+W(1)+W(8)+"data"+I(s)+w);a.play()}
with(document.getElementById("c")){width=U;height=V;c=getContext("2d")}
setInterval(function(){
with(c){
fillStyle="rgba(255,255,255,.2)"
fillRect(0,0,U,V)
beginPath()
i=5;while(i--){moveTo(0,i*9+25);lineTo(U,i*9+25)}
stroke()
fillStyle="#000";font="60px serif"
i=9;while(i--){fillText('♬',i*V,50+m.sin(i+s++/40)*20)}}},s)
M('4e1 4e1 4e1 8c1 16- 16g1 4e1 8c1 16- 16g1 4e1 4- 4b1 4b1 4b1 8c2 16- 16g1 4#d1 8c1 16- 16g1 4e1 8-'.split(' '))