0x4774567d…5ac5sent to0x1ca007e2…096a·#18,825,373·0xf1f257da…9bca80
let mic,sampler,soundFile,newSoundFile,initialMouse=!1,firstClickReleased=!1,firstLoop=!0,displayInstrument=!1,recButton,playButton,pitchButtons,sliceButtons,instrumentButtons,loadSample=!1,toyType,instrumentType,sequences=[[392,987.77,392,987.77,415.3,1046.5,415.3,1046.5,466.16,1174.66,466.16,1174.66,415.3,1046.5,415.3,1046.5],[987.76,784,739.98,784,987.76,784,739.98,739.98,784],[587.33,587.33,739.99,1046.5,1046.5,739.99,523.25,523.25,659.25,932.33,932.33,554.37,698.46,698.46],[349.23,440,493.885,587.33,698.46,880,987.77,1318.51,1396.92,1760,1975.54,3135.96,2793.82,2349.32,1975.54,2349.32],[349.23,698.46,349.23,349.23,698.46,349.23,698.46,349.23,698.46,698.46,622.25,523.25,698.46,622.25,698.46,622.25,523.25,698.46,622.25,523.25,698.46,622.25,523.25,698.46,622.25,622.25,622.25,622.25],[392,783.99,587.33,659.25,698.46,392,783.99,587.33,659.25,698.46,659.25,587.33,659.25],[587.33,523.25,440,587.33,523.25,440,369.99,369.99,369.99,587.33,523.25,440,659.25,830.61,1174.66,622.25,783.99,1108.73],[392,987.77,349.23,880,349.23,392,987.77,392,987.77,349.23,880,349.23,880,392,987.77,349.23,880,293.66,369.99,440,554.37,587.33,554.37],[329.63,493.88,830.61,493.88,369.99,554.37,880,415.3,622.25,987.77,622.25,440,659.25,1108.73]],sequence,pitchRatio,pitchRatios=[[1.49857,1.18918,1,.890816,.5],[1.49824,1.2599,1,.890816,.841],[1.3348,1.18918,1,.8908,.7071],[1.1225,1.0595,1,.9439,.8907],[1.2599,1.1225,1,.84086,.7492]],ratioIndex=-1,sequenceIndex=-1,charSize,game,timer=1,gameTimer=1,animationSpeed,backgroundColor,charColor,flashColor,buttonColor,colorPalette,diameter,printWidth,printHeight,strokeWidth,canvas;function setup(){tokenId=parseInt(tokenId),randomSeed(1e3*tokenId),rt=window.rt,loadInitalData(),canvas=createCanvas(windowWidth,windowHeight),printWidth=windowWidth,printHeight=windowHeight,strokeWidth=printWidth<printHeight?printWidth/50:printHeight/50,canvas.drop(gotFile),ellipseMode(CENTER),rectMode(CENTER),noStroke(),chooseColorPalette(),diameter=printWidth<printHeight?.15*printWidth:.15*printHeight,animationSpeed=15}function draw(){background(backgroundColor),instructionLoaded&&(loadedSoundFile=loadSound(loadedInstruction)),initialMouse||(fill(charColor),rect(3*printWidth/8,printHeight/2,printWidth/4,printHeight),fill(flashColor),rect(5*printWidth/8,printHeight/2,printWidth/4,printHeight),fill(buttonColor),rect(7*printWidth/8,printHeight/2,printWidth/4,printHeight)),firstClickReleased&&(mouseIsPressed?(recButton.collision(),instrumentButtons.collision()):instrumentButtons.sequencer&&instrumentButtons.turnSliderOff(),fill(charColor),circle(printWidth/2,printHeight/2-mic.getLevel()*printHeight/2,.33*diameter),recButton.draw(),displayInstrument||sampler.thresholdReached||sampler.amplitudeThreshold()),displayInstrument&&instrumentButtons.draw(),loadSample&&soundFile.isLoaded()&&(console.log("sample finished loading :::"),loadSample=!1,instrumentButtons.recordingLoaded(),soundFile.playMode("restart"),displayInstrument=!0,"looper"!=instrumentType&&"sequencer"!=instrumentType||(firstLoop?firstLoop=!1:instrumentButtons.buttons[0].togglePause(),instrumentButtons.buttons[0].play())),"looper"!=instrumentType&&"sequencer"!=instrumentType||!firstClickReleased||(animationSpeed=floor(map(instrumentButtons.buttons[0].sliderLERP,.5,4,40,7))),displayInstrument&&(timer%animationSpeed==0&&soundFile.isPlaying()?game.play():displayInstrument&&game.draw(),soundFile.isPlaying())&&timer++}class sampleRecorder{constructor(){this.recorder=new p5.SoundRecorder,this.recorder.setInput(mic.mic),soundFile=new p5.SoundFile,this.thresholdReached=!0}startRecord(){console.log("start record"),this.thresholdReached=!1}amplitudeThreshold(){.03<mic.getLevel()&&(this.thresholdReached=!0,"looper"==instrumentType||"sequencer"==instrumentType?(newSoundFile=new p5.SoundFile,this.recorder.record(newSoundFile)):(soundFile=new p5.SoundFile,this.recorder.record(soundFile)))}stopRecord(){console.log("stop record"),this.thresholdReached?(this.recorder.stop(),"looper"!=instrumentType&&"sequencer"!=instrumentType||(instrumentButtons.buttons[0].playing&&instrumentButtons.buttons[0].togglePause(),soundFile.disconnect(),soundFile=newSoundFile),loadSample=!0):console.log("amplitude threshold never exceeded"),console.log("stoped rec. begin loading sample")}loadInstruction(){console.log("load instruction sound file from link"),this.recorder.stop(),"looper"!=instrumentType&&"sequencer"!=instrumentType||instrumentButtons.buttons[0].playing&&instrumentButtons.buttons[0].togglePause(),soundFile=loadedSoundFile,loadSample=!0,instructionLoaded=!1,console.log("MEOWWW")}}class microphone{constructor(){this.mic=new p5.AudioIn,this.mic.start(),this.mic.amp(4)}getLevel(){return this.mic.getLevel()}}class recordButton{constructor(t,e,i){this.x=t,this.y=e,this.diameter=i,this.state=!1}draw(){instructionLoaded&&sampler.loadInstruction(),this.state?fill(charColor):fill(buttonColor),circle(this.x,this.y,this.diameter)}collision(){var t=this.x-mouseX,e=this.y-mouseY;pow(pow(t,2)+pow(e,2),.5)<=this.diameter/2&&(("looper"==instrumentType||"sequencer"==instrumentType)&&instrumentButtons.buttons[0].sliding||this.toggle())}toggle(){millis()-this.lastPush<50?this.lastPush=millis():(this.lastPush=millis(),this.state=!this.state,displayInstrument=(this.state?(instrumentButtons.recordingStarted(),sampler.startRecord()):sampler.stopRecord(),!1),this.state?fill(charColor):fill(buttonColor),circle(this.x,this.y,this.diameter))}}class instrumentInterface{constructor(t,e){if(this.intstrumentType=t,this.play=!1,this.pitch=!1,this.slice=!1,this.sequencer=!1,this.buttons=[],this.diameter=e,"pitch"==t){this.pitch=!0,this.x=.75*printWidth,this.y=printHeight/2,this.state=!1,fill(buttonColor);for(let t=0;t<5;t++)this.buttons[t]=new audioButton("pitch",t),this.buttons[t].pitchConstructor(this.x,printHeight*(.125+.1875*t),this.diameter,pitchRatio[t])}else"slice"==t?(this.slice=!0,this.x=printWidth/8,this.y=3*printHeight/4,this.state=!1,fill(buttonColor),this.buttons[0]=new audioButton("slice",0),this.buttons[0].sliceConstructor(this.x,this.y,this.diameter,0,.25),this.buttons[1]=new audioButton("slice",1),this.buttons[1].sliceConstructor(3*this.x,this.y,this.diameter,.25,.5),this.buttons[2]=new audioButton("slice",2),this.buttons[2].sliceConstructor(5*this.x,this.y,this.diameter,.5,.75),this.buttons[3]=new audioButton("slice",3),this.buttons[3].sliceConstructor(7*this.x,this.y,this.diameter,.75,1)):"looper"!=t&&"sequencer"!=t||(this.sequencer=!0,this.state=!1,fill(buttonColor),this.buttons[0]=new slider("looper"),"looper"==t?(this.x=.25*printWidth,this.y=.5*printHeight,this.buttons[0].sequencerConstructor(this.x,this.y,this.diameter)):"sequencer"==t&&(this.x=.5*printWidth,this.y=.25*printHeight,this.buttons[0].sequencerConstructor(this.x,this.y,this.diameter),this.buttons[0].toggleMelodicSequencer()))}recordingStarted(){this.state=!1;for(let t=0;t<this.buttons.length;t++)this.buttons[t].state=!1;displayInstrument&&this.draw()}recordingLoaded(){for(let t=0;t<this.buttons.length;t++)this.buttons[t].recordingLoaded();this.state=!0,this.draw()}draw(){for(let t=0;t<this.buttons.length;t++)this.buttons[t].draw()}collision(){if(this.state)for(let t=0;t<this.buttons.length;t++)this.buttons[t].collision()}turnSliderOff(){this.buttons[0].sliding=!1}resetPitchRatios(){if(this.pitch)for(let t=0;t<5;t++)this.buttons[t].setRatio(pitchRatio[t])}resetSequence(){this.sequencer&&this.buttons[0].toggleMelodicSequencer()}}class slider{constructor(t){this.sequencer=!1,this.sliding=!1,this.playing=!1,this.melodic=!1,this.minPitchRatio=.5,this.maxPitchRatio=4,"looper"==t&&(this.sequencer=!0)}sequencerConstructor(t,e,i){this.x=t,this.y=e,this.startX=t,this.startY=e,this.diameter=i,this.sliderValue=.5,this.sliderLERP=1}toggleMelodicSequencer(){this.melodic=!0,this.sequenceNoteIndex=0,this.sequence=[];for(let t=0;t<sequence.length;t++)this.sequence[t]=sequence[t]/sequence[0]}draw(){var t=this.state?charColor:buttonColor;this.sequencer&&!this.melodic?(stroke(buttonColor),strokeWeight(strokeWidth),line(this.startX,.25*this.startY,this.startX,1.75*this.startY),noStroke(),fill(t),this.sliding&&fill(flashColor),circle(this.x,this.y,this.diameter),this.state&&this.play()):this.sequencer&&this.melodic&&(stroke(buttonColor),strokeWeight(strokeWidth),line(.25*this.startX,this.startY,1.75*this.startX,this.startY),noStroke(),fill(t),this.sliding&&fill(flashColor),circle(this.x,this.y,this.diameter),this.state)&&this.play()}play(){var t,e;this.playing?(t=millis()/1e3,this.melodic?(e=this.sequence[this.sequenceNoteIndex],soundFile.rate(.5*e*this.sliderLERP),t-this.lastBeat>=.5*this.secondsPerBeat&&(this.lastBeat=t,this.secondsPerBeat=soundFile.duration()*map(this.sliderValue,0,1,this.maxPitchRatio,this.minPitchRatio),this.sequenceNoteIndex==this.sequence.length-1?this.sequenceNoteIndex=0:this.sequenceNoteIndex++)):soundFile.rate(this.sliderLERP)):(this.lastBeat=millis()/1e3,soundFile.rate(map(this.sliderLERP,0,1,this.minPitchRatio,this.maxPitchRatio)),soundFile.loop(),this.secondsPerBeat=soundFile.duration()*map(this.sliderValue,0,1,this.maxPitchRatio,this.minPitchRatio),this.playing=!0)}reset(){this.playing&&soundFile.jump()}togglePause(){this.playing&&(soundFile.isPlaying()?soundFile.pause():soundFile.loop())}recordingStarted(){this.state=!1,this.playing=!1,soundFile.stop(),this.draw()}recordingLoaded(){this.state=!0,this.draw(),console.log("length of recording loaded: "+soundFile.duration()),this.play()}saveSliderValue(t){this.sliderValue=t,this.melodic?(mouseX/printWidth<=.125?this.x=.125*printWidth:.875<=mouseX/printWidth?this.x=.875*printWidth:this.x=mouseX,this.sliderLERP=t<=.5?map(t,0,.5,.5,1):t<=.75?map(t,.5,.75,1,2):map(t,.75,1,2,4)):(mouseY/printHeight<=.125?this.y=.125*printHeight:.875<=mouseY/printHeight?this.y=.875*printHeight:this.y=mouseY,this.sliderLERP=t<=.25?map(t,0,.25,4,2):t<=.5?map(t,.25,.5,2,1):map(t,.5,1,1,.5))}getSliderValue(){let t;return this.melodic?(t=map(mouseX/printWidth,.125,.875,0,1))<0?t=0:1<t&&(t=1):(t=map(mouseY/printHeight,.125,.875,0,1))<0?t=0:1<t&&(t=1),t}collision(){var t,e,i;this.state&&(this.sliding?(i=this.getSliderValue(),this.saveSliderValue(i)):(i=this.getSliderValue(),this.sequencer,t=this.x-mouseX,e=this.y-mouseY,pow(pow(t,2)+pow(e,2),.5)<=diameter/2&&(this.sliding=!0,this.saveSliderValue(i))),this.draw())}}class audioButton{constructor(t,e){this.playback=!1,this.pitch=!1,this.slice=!1,this.buttonIndex=e,"pitch"==t?this.pitch=!0:"slice"==t?this.slice=!0:"play"==t&&(this.playback=!0)}playConstructor(t,e,i){this.x=t,this.y=e,this.diameter=i,this.state=!1,fill(buttonColor),circle(this.x,this.y,this.diameter)}pitchConstructor(t,e,i,s){this.x=t,this.y=e,this.diameter=i,this.shiftRatio=s,this.state=!1,this.lit=!1,fill(buttonColor),circle(this.x,this.y,this.diameter)}sliceConstructor(t,e,i,s,o){this.x=t,this.y=e,this.diameter=i,this.start=s,this.end=o,this.state=!1,fill(buttonColor),circle(this.x,this.y,this.diameter)}draw(){this.state?this.lit?fill(flashColor):fill(charColor):fill(buttonColor),circle(this.x,this.y,this.diameter),this.lit&&!soundFile.isPlaying()&&(this.lit=!1)}unlitOtherButtons(){for(let t=0;t<instrumentButtons.buttons.length;t++)t!=this.buttonIndex&&(instrumentButtons.buttons[t].lit=!1)}recordingStarted(){this.state=!1,this.draw()}recordingLoaded(){this.state=!0,this.draw(),this.slice&&(console.log("length of recording loaded: "+soundFile.duration()),this.playTime=.24999*soundFile.duration(),this.startTime=this.start*soundFile.duration())}setRatio(t){this.shiftRatio=t}collision(){var t,e;this.state&&(millis()-this.lastPush<50?this.lastPush=millis():(this.lastPush=millis(),t=this.x-mouseX,e=this.y-mouseY,pow(pow(t,2)+pow(e,2),.5)<=this.diameter/2&&(this.pitch?(soundFile.rate(this.shiftRatio),soundFile.play()):this.slice?(soundFile.play(),soundFile.jump(this.startTime,this.playTime)):this.playback&&(soundFile.rate(1),soundFile.play()),this.lit=!0,this.unlitOtherButtons())))}play(){this.slice?(soundFile.play(),soundFile.jump(this.startTime,this.playTime),this.lit=!0,this.unlitOtherButtons()):this.pitch&&("undefined"===this.shiftRatio?console.log("undefffff"):(soundFile.rate(this.shiftRatio),soundFile.play(),this.lit=!0,this.unlitOtherButtons()))}}function keyTyped(){"1"===key?instrumentButtons.slice?instrumentButtons.buttons[0].play():instrumentButtons.pitch&&instrumentButtons.buttons[4].play():"2"===key?instrumentButtons.slice?instrumentButtons.buttons[1].play():instrumentButtons.pitch&&instrumentButtons.buttons[3].play():"3"===key?(instrumentButtons.slice||instrumentButtons.pitch)&&instrumentButtons.buttons[2].play():"4"===key?instrumentButtons.slice?instrumentButtons.buttons[3].play():instrumentButtons.pitch&&instrumentButtons.buttons[1].play():"5"===key?instrumentButtons.pitch&&instrumentButtons.buttons[0].play():"r"===key||"R"===key?instrumentButtons.sequencer&&instrumentButtons.buttons[0].reset():32===keyCode?instrumentButtons.sequencer&&instrumentButtons.buttons[0].togglePause():68===keyCode?instrumentButtons.state&&soundFile.save():13==keyCode&&("sequencer"==instrumentButtons.intstrumentType?(console.log("hello"),chooseSequence(),instrumentButtons.resetSequence()):instrumentButtons.pitch&&(choosePitchRatios(),instrumentButtons.resetPitchRatios()))}function gotFile(t){background(0),"audio"===t.type&&(soundFile.isPlaying()&&instrumentButtons.sequencer&&instrumentButtons.buttons[0].togglePause(),soundFile=loadSound(t))}function touchStarted(){var t;initialMouse||(userStartAudio(),initialMouse=!0,mic=new microphone,sampler=new sampleRecorder,(t=mouseX)<printWidth/4?(instrumentType="pitch",choosePitchRatios(),chooseColors(0)):t<printWidth/2?(instrumentType="slice",chooseColors(1)):t<.75*printWidth?(instrumentType="looper",chooseColors(2)):(instrumentType="sequencer",chooseSequence(),chooseColors(3)),console.log("instrument chosen: "+instrumentType),instrumentButtons=new instrumentInterface(instrumentType,diameter),game=new diceGame)}function mouseReleased(){firstClickReleased||(firstClickReleased=!0,recButton=new recordButton(.5*printWidth,printHeight/2,diameter),console.log("record button created"))}class diceGame{constructor(){charSize=printWidth<printHeight?.41*printWidth:.41*printHeight,textSize(charSize),textAlign(CENTER),this.die=[],this.die[0]=new dice(0),this.die[1]=new dice(1),this.die[2]=new dice(2)}play(){fill(charColor);var t,e,i,s=gameTimer%100;49==s?(t=this.die[0].rollValue(),e=this.die[1].rollValue(),i=this.die[2].rollValue(),(e<t&&i<t?this.die[0]:t<e&&i<e?this.die[1]:t<i&&e<i?this.die[2]:t==e&&t!=i?(this.die[0].won(),this.die[1]):((t==i&&t!=e?this.die[0]:(e==i&&t!=e||this.die[0].won(),this.die[1])).won(),this.die[2])).won()):99==s&&(this.die[0].roll(),this.die[1].roll(),this.die[2].roll()),this.die[0].draw(),this.die[1].draw(),this.die[2].draw(),gameTimer++}draw(){fill(charColor),this.die[0].draw(),this.die[1].draw(),this.die[2].draw()}}class dice{constructor(t){this.playerIndex=t,this.state=!1,this.rolling=!0,this.value=-1,this.diceChars=[],this.diceChars[0]=-1,this.diceChars[1]=9856,this.diceChars[2]=9857,this.diceChars[3]=9858,this.diceChars[4]=9859,this.diceChars[5]=9860,this.diceChars[6]=9861,this.winner=!1,"pitch"==instrumentType?(this.x=.22*printWidth,this.y=(this.playerIndex+1)*(.61*printHeight/2)):"looper"==instrumentType?(this.x=.78*printWidth,this.y=(this.playerIndex+1)*(.61*printHeight/2)):"sequencer"==instrumentType?(this.x=(1+2*this.playerIndex)*(printWidth/6),this.y=.9*printHeight):"slice"==instrumentType&&(this.x=(1+2*this.playerIndex)*(printWidth/6),this.y=.33*printHeight)}roll(){this.rolling=!0,this.winner=!1}rollValue(){return this.rolling=!1,this.value=random([1,2,3,4,5,6]),this.value}won(){this.winner=!0}draw(){var t;this.rolling?(t=1+gameTimer%6,text(String.fromCodePoint(this.diceChars[t]),this.x,this.y)):(this.winner&&gameTimer%2==0?fill(flashColor):fill(charColor),text(String.fromCodePoint(this.diceChars[this.value]),this.x,this.y))}}let colorPalettes=[[[227,163,181],[235,228,86],[225,114,0],[0,77,142]],[[183,185,239],[213,111,49],[112,147,247],[78,63,158]],[[44,46,75],[173,161,128],[143,106,116],[152,87,87]],[[173,161,128],[185,71,30],[18,2,2],[147,30,18]],[[234,97,42],[26,37,39],[245,245,14],[134,223,252]],[[117,251,76],[232,57,183],[154,31,110],[61,126,34]],[[44,98,209],[193,94,48],[124,28,23],[35,84,117]],[[226,216,133],[142,208,224],[224,188,129],[180,111,50]],[[162,210,169],[191,179,129],[149,142,125],[159,161,94]],[[193,142,186],[156,196,125],[164,201,223],[225,227,144]],[[136,47,120],[95,114,214],[199,143,74],[13,44,74]],[[212,128,93],[99,31,116],[26,67,174],[59,133,39]],[[86,119,45],[157,75,32],[136,114,121],[219,186,136]],[[145,188,211],[251,244,179],[214,145,159],[243,194,61]],[[194,92,40],[177,90,43],[69,49,100],[194,230,89]],[[172,56,46],[112,24,12],[17,46,39],[48,90,94]],[[166,201,199],[241,159,236],[146,133,162],[182,180,72]],[[252,145,171],[254,253,169],[109,93,133],[250,98,71]],[[218,223,218],[9,100,82],[181,245,124],[101,192,213]],[[64,194,16],[5,25,100],[118,108,203],[213,67,231]],[[250,47,3],[244,123,3],[80,121,1],[166,197,7]],[[92,26,16],[70,81,118],[227,81,66],[157,193,135]],[[215,160,255],[255,195,165],[1,225,255],[255,170,202]],[[0,60,209],[148,247,239],[217,1,22],[255,41,179]]],indexShuffler=[[0,1,2,3],[3,1,2,0],[1,0,2,3],[3,2,0,1],[2,3,0,1],[1,2,0,3],[2,1,0,3],[0,1,3,2],[0,3,2,1],[0,2,3,1],[3,0,1,2],[1,2,3,0],[1,3,2,0],[2,3,1,0],[1,0,3,2],[0,3,1,2],[1,3,0,2],[0,2,1,3],[2,0,1,3],[2,0,3,1],[3,0,2,1],[3,2,1,0],[2,1,3,0],[3,1,0,2]];function chooseColorPalette(){var t=(tokenId+21)%colorPalettes.length,e=floor((tokenId+21)/colorPalettes.length)%(colorPalettes.length*indexShuffler.length),t=colorPalettes[t],e=indexShuffler[e];backgroundColor=t[e[0]],charColor=t[e[1]],flashColor=t[e[2]],buttonColor=t[e[3]],(colorPalette=[])[0]=t[e[0]],colorPalette[1]=t[e[1]],colorPalette[2]=t[e[2]],colorPalette[3]=t[e[3]]}function chooseColors(e){backgroundColor=colorPalette[e];var i=[];for(let t=0;t<4;t++)t!=e&&i.push(t);buttonColor=colorPalette[i[0]],charColor=colorPalette[i[1]],flashColor=colorPalette[i[2]]}function chooseSequence(){sequenceIndex=-1==sequenceIndex?floor(random(0,sequences.length)):(sequenceIndex+1)%sequences.length,sequence=sequences[sequenceIndex]}function choosePitchRatios(){ratioIndex=-1==ratioIndex?floor(random(0,pitchRatios.length)):(ratioIndex+1)%pitchRatios.length,pitchRatio=pitchRatios[ratioIndex]}let paste,instructionLoaded=!1,loadedInstruction,loadedSoundFile,rt=(document.addEventListener("paste",function(t){clipdata=t.clipboardData||window.clipboardData,paste=clipdata.getData("text/plain"),console.log(paste),console.log("SUBMIT INSTRUCTIONS TO ETHEREUM!"),t={instruction:paste},rt.mutateToken({tokenId:tokenId,data:t}),rt.commitToken({tokenId:tokenId})}),{});const loadInitalData=async()=>{await rt?.init();var t=await rt,t=(console.log("res.errors: "+t.errors),console.log("tokenIds: "+t.tokenIds),(rt?.getToken({tokenId:tokenId})).data);console.log("tokenId: "+tokenId),console.log("data: "+t),t&&loadInstruction(t)};function loadInstruction(t){console.log("loading instruction: "+t),loadedInstruction=t.instruction,instructionLoaded=!0,console.log("link: "+loadedInstruction)}