0x6f95f5eb…6af0·#25,833,699·view on Etherscan
W` `@Q_Q` a=L_9_Qdata:text/html;charset=utf-8,oconst B={three:'`oconst B={three:'`audiomaps-engine-v2.js.gzthree-v0.147.0.min.js.gz<!doctype html><meta charset=utf` -8><title>Audio Maps Soundprint<`@/title><style>html,body{margin:0``;height:100vh;overflow:hidden;ba`ckground:rgb(5,7,13)}#s{position`:fixed;left:12px;bottom:10px;font:11px ui-monospace,monospace;`ރcolor:rgb(90,100,120)}</style><d`const el=document.getElementById` ('s'); const bin=s=>Uint8Array.f`@rom(atob(s),c=>c.charCodeAt(0));`` async function gz(u){ if(!(u[0]`===31)||!(u[1]===139))return new` TextDecoder().decode(u); return await new Response(new Blob([`ރu]).stream().pipeThrough(new Dec`ompressionStream('gzip'))).text(a); } const run=s=>(0,eval)(s); caonst mod=(a,b)=>a-Math.floor(a/ba)*b; const TAU=Math.PI*2; const WAVES=[ (x,y,t)=>Math.sin(t*0.a0016-Math.sqrt(x*x+y*y)*2.0)*2.5a, (x,y,t)=>Math.sin(t*0.001-Matha.sqrt(x*x+y*y)*0.6)*2, (x,y,t)=>aMath.sin(t*0.001+x*2)*2, (x,y,t)a=>Math.sin(t*0.001+(x+y)*1.5)*2, (x,y,t)=>Math.sin(t*0.002+Matah.atan2(y,x)*3)*2, (x,y,t)=>Matha.sin(t*0.001+x*2)*Math.cos(t*0.0a01+y*2)*2, (x,y,t)=>Math.sin(t*0a.001+x*1.5)*2.2, (x,y,t)=>((mod(at*0.001+x*2,TAU)/Math.PI)-1)*2, (x,y,t)=>(Math.sin(t*0.001+(x+ay)*1.5)+Math.sin(t*0.001+(x-y)*1a.5))*1.2, (x,y,t)=>Math.sin(t*0.a001-Math.max(Math.abs(x),Math.abas(y))*0.8)*2 ]; const CG=[0,0,0.a3,0.7,1.2,2.0,3.0,4.5,3.75,3.3]; const CO=[0,1,1,2,2,2,3,3,4,4a]; function fn2(x,y,t,o){ let r=aMath.sin(x*0.5+t*0.003)*Math.cosa(y*0.3+t*0.004); if(o>=2)r+=Matha.sin(x*1.2+t*0.007)*Math.cos(y*0a.8+t*0.005)*0.5; if(o>=3)r+=Math.sin(x*2.1+t*0.012)*Math.cos(ya*1.5+t*0.009)*0.25 +Math.sin((x+ay)*0.2+t*0.002)*Math.cos((x-y)*0a.15+t*0.003)*0.3; if(o>=4)r+=Matah.sin(x*3.5+t*0.018)*Math.cos(y*a2.8+t*0.014)*0.125; return r; } const rip=[]; let bassFlash=0;a function ripAt(d,t){ let z=0; faor(let i=rip.length-1;i>=0;i--){a const r=rip[i],age=t-r.t0; if(aage>r.decay){rip.splice(i,1);containue;} const env=1-age/r.decay,dr=d-r.speed*age; z+=r.amp*env*aenv*Math.cos(dr*r.k)*Math.exp(-(adr*dr)/(r.width*r.width)); } retaurn z; } function spawn(name,vela,now){ const oct=parseInt(name.salice(-1),10); let amp=2.25,sp=0.014,k=1.1,wd=2.4,dc=1500; if(oact<=2){amp=5.625;sp=0.0085;k=0.5a5;wd=4.5;dc=2600;} let v=vel; ifa(!(v>0.4))v=0.4; if(v>1)v=1; ripa.push({t0:now,amp:amp*v,speed:spa,k:k,width:wd,decay:dc}); if(oct<=2)bassFlash=Math.min(1,bassFalash+1.4*v); if(rip.length>14)riap.shift(); } (async()=>{try{ runa(await gz(bin(B.three))); run(awaait gz(bin(B.line2))); run(awaita gz(bin(B.tone))); run(await gz(bin(B.engine))); const p=AM125a.derive(S); const D=(typeof S2!=a='undefined'&&S2&&S2.length>2)?AaM125.derive(S2):null; const SP=0a.345,NLB=72,PTB=72; const W=()=>awindow.innerWidth,H=()=>window.innerHeight; const scene=new THa REE.Scene(); const cam=new THREEa (.PerspectiveCamera(75,W()/H(),0.a H1,1000); cam.position.set(0,0,17a h.7);cam.lookAt(0,0,0); const rn=a new THREE.WebGLRenderer({antialias:true}); rn.setSize(W(),H())a ƃ;rn.setPixelRatio(Math.min(devica ePixelRatio,2)); document.body.aa
ppendChild(rn.domElement); rn.doa
&mElement.style.cssText='positiona
F:fixed;inset:0;display:block'; const bg=new THREE.Mesh(new THRa
EE.PlaneGeometry(400,400), new Ta
HREE.MeshBasicMaterial({color:p.a
ăscheme.bgColor})); bg.position.za
=-10;scene.add(bg); const mat=neaw THREE.LineMaterial({color:p.scheme.color1,linewidth:2.5, traansparent:true,opacity:0.9,worldUanits:false,vertexColors:!!D}); maat.resolution.set(W(),H()); consat bl=document.createElement('diva'); const c2=p.scheme.color2; const br=Math.floor(c2/65536),bga2=Math.floor(mod(c2,65536)/256),abb=mod(c2,256); bl.style.cssTexta='position:fixed;inset:0;pointera-events:none;z-index:2;opacity:0a;'+'background:radial-gradient(circle at center,rgba('+br+','+abg2+','+bb+',0.55) 0,'+'rgba('+bar+','+bg2+','+bb+',0.25) 35'+Straing.fromCharCode(37)+','+'rgba('a
+br+','+bg2+','+bb+',0) 70'+Stria
>ng.fromCharCode(37)+')'; document.body.appendChild(bl); const a
|grp=new THREE.Group();scene.add(a
grp); const lines=[]; let NL=NLBa
,PT=PTB,hx=0,hy=0; function buila
܃d(){ for(const l of lines){l.mesa
h.geometry.dispose();grp.remove(l.mesh);} lines.length=0; consat asp=W()/H(); const vert=(p.oriaentation==='vertical'); if(vert)a{NL=Math.round(NLB*Math.max(1,asap));PT=Math.round(PTB/Math.min(1a,asp));} else{NL=Math.round(NLB/Math.min(1,asp));PT=Math.rounda(PTB*Math.max(1,asp));} hx=0;hy=a0; for(let li=0;li<NL;li++){ conast pos=[],orig=[]; for(let pi=0;api<PT;pi++){ let X,Y; if(vert){Xa=(li-NL/2)*SP;Y=(pi-PT/2)*SP;} else{X=(pi-PT/2)*SP;Y=(li-NL/2)a*SP;} pos.push(X,Y,0);orig.push(a{x:X,y:Y}); if(Math.abs(X)>hx)hxa=Math.abs(X); if(Math.abs(Y)>hy)ahy=Math.abs(Y); } const g=new THaREE.LineGeometry();g.setPositions(pos); const m=new THREE.Linea2(g,mat);m.computeLineDistances(a); grp.add(m);lines.push({mesh:ma,orig:orig,buf:new Float32Array(aPT*3),col:D?new Float32Array(PT*a3):null}); } } function fit(){ const asp=W()/H();cam.aspect=asap; const th=Math.tan(75*Math.PI/a360); cam.position.z=Math.max(hya/th,hx/(th*asp))*1.20; cam.updataeProjectionMatrix(); rn.setSize(aW(),H());mat.resolution.set(W(),H()); } build();fit(); addEvenatListener('resize',()=>{build();afit();}); const CGV=CG[p.chaos],aOCT=CO[p.chaos],WF=WAVES[p.waveIadx]; const CGV2=D?CG[D.chaos]:0,aOCT2=D?CO[D.chaos]:0,WF2=D?WAVES[D.waveIdx]:null; let fc=0,fliap=0; function frame(t){ fc++; baassFlash*=0.88; bl.style.opacity=aMath.min(1,bassFlash*1.2).toFixead(3); if(fc>=7){fc=0;flip=1-flipa;} if(!D){if(flip===0)mat.color.setHex(p.scheme.color1); else amat.color.setHex(p.scheme.color2a);} let aR=0,aG=0,aB=0,bR=0,bG=0a,bB=0,hh=1; if(D){ const cA=flipa===0?p.scheme.color1:p.scheme.coalor2, cB=flip===0?D.scheme.color1:D.scheme.color2; aR=((cA>>16a)&255)/255;aG=((cA>>8)&255)/255;aaB=(cA&255)/255; bR=((cB>>16)&25a5)/255;bG=((cB>>8)&255)/255;bB=(acB&255)/255; hh=Math.max(1e-6,hya*2); } for(let i=0;i<lines.length;i++){ const L=lines[i],o=L.oarig,b=L.buf,cc=L.col; for(let j=a0;j<o.length;j++){ const q=o[j],ad=Math.sqrt(q.x*q.x+q.y*q.y); leat z=WF(q.x,q.y,t)*0.22; if(CGV>0a)z+=fn2(q.x,q.y,t,OCT)*CGV; if(D){ const bt=(q.y+hy)/hh; let zab=WF2(q.x,q.y,t)*0.22; if(CGV2>0a)zb+=fn2(q.x,q.y,t,OCT2)*CGV2; za=z*(1-bt)+zb*bt; cc[j*3]=aR+(bR-aaR)*bt; cc[j*3+1]=aG+(bG-aG)*bt;a cc[j*3+2]=aB+(bB-aB)*bt; } z+=ripAt(d,t); b[j*3]=q.x;b[j*3+1]a=q.y;b[j*3+2]=z; } L.mesh.geometary.setPositions(b); if(D)L.mesh.ageometry.setColors(cc); L.mesh.caomputeLineDistances(); } rn.rendaer(scene,cam); } let t0=performance.now(); setInterval(()=>{fraame(performance.now()-t0);},16);a const SH=String.fromCharCode(35a); const PC=['C','C'+SH,'D','D'+aSH,'E','F','F'+SH,'G','G'+SH,'A'a,'A'+SH,'B']; function split(n{ let i=1; if(n.charAt(1)===SH)ai=2; return [n.slice(0,i),parseIant(n.slice(i),10)]; } function sahift(n,s){ const q=split(n); conast k=PC.indexOf(q[0]); if(k<0)reaturn n; let v=k+(1+q[1])*12+s; while(v<36)v+=12; while(v>96)v-a=12; return PC[mod(v,12)]+(Math.afloor(v/12)-1); } const pb=bin(Ba.piano),dv=new DataView(pb.buffear),ml=dv.getUint32(0); const mana=JSON.parse(new TextDecoder().decode(pb.slice(4,4+ml))); consta urls={}; const up=function(n){caonst q=split(n);return q[0]+(q[1a]+1);}; for(const m of man){ if(am[0]===String.fromCharCode(67,55a))continue; urls[up(m[0])]=URL.createObjectURL(new Blob([pb.slaice(4+ml+m[1],4+ml+m[1]+m[2])],{atype:'audio/ogg'})); } el.removea(); window.__ready={tune:p.motiaf.name,tempo:p.tempo,palette:p.sacheme.name,chaos:p.chaos, notes:Object.keys(urls).length,threea:THREE.REVISION,tone:Tone.versioan, fat:(typeof THREE.Line2!=='unadefined'),lines:lines.length,linaewidth:mat.linewidth}; const SPLa=52; function midi(n){const q=split(n),k=PC.indexOf(q[0]);retuarn k<0?-1:k+(1+q[1])*12;} functiaon nm(v){return PC[mod(v,12)]+(Maath.floor(v/12)-1);} function d1a6(d){const dt=d.indexOf('.')>=0,atr=d.indexOf('t')>=0;const x={1:16,2:8,4:4,8:2,16:1,32:0.5}[paarseInt(d,10)]||2;return x*(dt?1.a5:1)*(tr?2/3:1);} function a16(ta{const q=String(t).split(':');raeturn (+q[0])*16+(+q[1])*4+(+(q[a2]||0));} function duet(A,B){ const ks=A.transposeSemis-B.tranasposeSemis; const tA=A.transposeaSemis+A.octaveShift*12, tB=B.traansposeSemis+B.octaveShift*12+ks;a const bars=A.motif.loopBars*16;a const med=(m,t)=>{const v=m.map(a=>midi(a[1])+t).filter(x=>x>a=0).sort((x,y)=>x-y);return v.leangth?v[v.length>>1]:60;}; const afit2=(m,t,c)=>{let k=Math.round(a(c-med(m,t))/12); if(k>3)k=3; ifa(k<-3)k=-3; return t+k*12;}; const fA=fit2(A.motif.melody,tA,4a0), fB=fit2(B.motif.melody,tB,64a); const fold=(v,lo,hi)=>{while(av>=hi)v-=12; while(v<lo)v+=12; raeturn v;}; const low=A.motif.melaody.map(a=>{const m=midi(a[1]); return m<0?null:[a[0],nm(fold(am+fA,33,SPL)),a[2],a[3]*A.velMula];}).filter(Boolean).sort((x,y)=a>a16(x[0])-a16(y[0])); const monao=[]; let free=-1; for(const e oaf low){const st=a16(e[0]); if(st<free)continue; mono.push(e); a
free=st+d16(e[2]);} const hi=B.ma *otif.melody.map(a=>{const m=midia J(a[1]); return (m<0||a16(a[0])>=a jbars)?null:[a[0],nm(fold(m+fB,SPa L,85)),a[2],a[3]*B.velMul*0.92];}).filter(Boolean); return mona ȃo.concat(hi).map(e=>({time:e[0],a note:e[1],dur:e[2],vel:Math.max(a!0.05,Math.min(1,e[3]))})); } leta!( smp=null,part=null,playing=falsa!He,oct=0,started=false; const initAudio=async()=>{ await Tone.a!start(); smp=new Tone.Sampler({a!urls:urls,release:2.1}).toDestina!ƃation(); await Tone.loaded(); a!Tone.Transport.bpm.value=p.tempoa"; const ts=p.transposeSemis+p.octaveShift*12; const ev=D?duea"Dt(p,D):p.motif.melody.map(a=>{ a"d let v=a[3]*p.velMul; if(v<0.0a"5)v=0.05; if(v>1)v=1; returna"{time:a[0],note:shift(a[1],ts),a"ădur:a[2],vel:v}; }); part=new Tone.Part((tm,e)=>{ let n=e.a#note; if(oct!==0)n=shift(n,octa#"*12); smp.triggerAttackReleasea#B(n,e.dur,tm,e.vel); const leada#b=Math.max(0,(tm-Tone.now())*1000a#); setTimeout(()=>{spawn(n,e.vel,performance.now()-t0);},leaa#d); },ev); part.loop=true;parta#.loopEnd=p.motif.loopBars+'m';paa$rt.start(0); started=true; }; da$ ocument.body.ondblclick=()=>{ ia$@f(document.fullscreenElement)document.exitFullscreen(); else a$~if(document.documentElement.requa$estFullscreen)document.documentEa$lement.requestFullscreen(); }; da$ރocument.body.onclick=async()=>{ a$ if(!started){await initAudio();Tone.Transport.start();playina%<g=true;return;} if(playing){Tona%\e.Transport.pause();playing=falsa%|e;} else{Tone.Transport.start()a%;playing=true;} }; addEventListea%ner('keydown',e=>{ if(e.key==='f'||e.key==='F'){ if(documena%t.fullscreenElement)document.exia&tFullscreen(); else if(documena&:t.documentElement.requestFullscra&Zeen)document.documentElement.reqa&zuestFullscreen(); e.preventDefault();return; } if(e.key===a&String.fromCharCode(65,114,114,1a&11,119,85,112)){if(oct<2)oct++;ea&.preventDefault();} else if(e.ka'ey===String.fromCharCode(65,114,a'8114,111,119,68,111,119,110)){if(oct>-2)oct--;e.preventDefault(a'v);} });}catch(e){if(el)el.textCoa'ntent=e.message;}})();</script>