-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCompiled.js
More file actions
134 lines (134 loc) · 51 KB
/
Compiled.js
File metadata and controls
134 lines (134 loc) · 51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
var BasicMIDI=new function(){this.init=function(i,e){return t.init(i,e)}
var t=new function(){var t=100,i=160,h=200,o=900,n=80
this.init=function(t,i){return new r(t,i)}
var r=function(t,i){this.player=i,$(t).append('<div class="editor_container"><canvas class="editor_canvas">Your browser does not support the HTML5 canvas tag.</canvas></div>')
var h=document.getElementsByClassName("editor_canvas")
this.canvas=h[h.length-1],this.context=this.canvas.getContext("2d"),e.init(this.canvas),this.setDimensions(),this.midiWorkspace=s.init(this.canvas,this.width,this.height,n,this)
var o=this
$(window).resize(function(){o.setDimensions()}),this.canvas.addEventListener("InputEvent",function(t){o.draw()},!1)
var r=setInterval(function(){o.isReady&&(o.draw(),clearInterval(r))},300)
this.player.linkEditor(this),this.projectId=-1,console.log("New Editor created")}
r.prototype.setDimensions=function(){this.width=Math.max(window.innerWidth-t,o),this.height=Math.max(window.innerHeight-i,h),$(this.canvas).css({width:this.width+"px",height:this.height+"px"}),this.context.width=this.width,this.context.height=this.height,this.canvas.width=this.width,this.canvas.height=this.height,this.midiWorkspace&&this.midiWorkspace.windowResize(this.width,this.height),this.draw()},r.prototype.draw=function(){performance.now()
this.context.clearRect(0,0,this.width,this.height),this.context.font="16px arial",this.midiWorkspace&&this.midiWorkspace.draw(this.context)
performance.now()},r.prototype.isReady=function(){return this.midiWorkspace.ready()},r.prototype.recordKeyDown=function(t){this.midiWorkspace.recordKeyDown(t)},r.prototype.recordKeyUp=function(t){this.midiWorkspace.recordKeyUp(t)},r.prototype.midiKeyDown=function(t){this.player.midiKeyDown(t)},r.prototype.midiKeyUp=function(t){this.player.midiKeyUp(t)},r.prototype.sendNotes=function(t){this.player.saveNotes(t,this.projectId)},r.prototype.notesSaved=function(t){this.projectId=t},r.prototype.loadNotes=function(){return this.player.loadNotes()},r.prototype.notesLoaded=function(t,i){this.midiWorkspace.notesLoaded(t),this.projectId=i},r.prototype.newProject=function(){this.projectId=-1},r.prototype.setBPM=function(t){this.midiWorkspace.setBPM(t)}},i=new function(){var t=4,i=30,e=90,s=30,h=!0,o=["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAABxCAYAAADifkzQAAADrklEQVR42u3czUsVURjH8UubaH25oI1nZm71DwRRWUK08aatinYFvWjtyqRN0UKLwghfaF8tTOtf0BaK7sogCInWwl3XNsQmLRJf7s07r+c853wfGBBBzu+cz5yZM85LqWRBHfKDKMlWVf6vElVsHVb+alKwOBsjbcgsu3ThYnTzRt/mBqqBcFm3+X52FtC84UzLhFgLA9XTXYsk5Ax9/zt4AvfwhpgdwTx4lvRl/df7rcVTStVsPbc4cc50ZWHQoJ8/bejXAddWdROjY/bssK4vy8X3nWuqv3X18pUdK1i1BiCzstiwr1++AlASpGpvP8bsEwxZqVSOANh6nTp+wixIz/M6AYxfI0+emgMJYPLaWDNoHz8A09fgwIA+SACFL3YAzHdMww71obDGbvX1gyhxcjALhUMCKBwSQBAp3eMNoHBIAEFsqT4tLaV6xP7x8HCUVR9Ne8Q/dTtFBQWxefV210CUjpjKociQWxGTZMwSMcnf5T0+byYnQZSOmChj0StSEPeurpOdIEpHjJ2z6HAgZpxTx8U9iBm3CaIMxP+2qyMYiBlm1fV/UhAzPKSCKAuxYdu6QoGYUd7QDz6DKAOxads67xuCCKLTiKHvfzUiEIgZZQYRRBALrtmZme2ZNz7cCqIsxF3t636iDUQQQQRRPmK5XPZAFI4YesEYiMIR/2T498OjoSEQQQQRRBDTI3JOBBFEVqcgcp3If2xAFI/IXQwLEHUHAjF+7bqfCCJ39kE0DZGn3WQhhir4BmLJpudOlb8MonBEnaFAzDAvb0WBCKLuQ6nOYCBmnJV39kEEUfehVFc4EHPIyRelLEAs+tYUiHvXmdNd8TPylUWzEBNlBNEcxLdTU8kt+PKw8C8Pg2gG4vlzPenbKSJsvV5/MT46GiXd5ufmUmVL0/bGZuws1HnxT+Uw9kBagAikBYAgWgAIpEWIQFoAuLORu7fvACl1gjAb8x3Tqgq+2LfXOARY+HgCmb4e3n8QaR9HIJPX85FnkRHj57W1nQUyfk2MjUdGjdvBSuUokK3X1rv0Ro2X53mdQBq+iEkS8t30NJjSAEWGZUyA3Kv6r13fNg5hh1oTvfe5hmlN39cXPGXXIHu7a3buvK7Myl39VGrZ/k5aguncqUPX85sF4u1z9sQvBXNlZWWxUe6qUh+5hjIctFnG0A9+cCXcAqYJX25y+rCZB2geqIsLC0a8e+EsaLPt3uDg5mbySzNugSp/Ne0LMKAZWlvfbo6zhUrVbej/b3tawRq7/DAmAAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAABxCAYAAADifkzQAAAE30lEQVR42u2dTWgTQRTHU6+iIgYK+5VNVQRFra0VquIXFUVQ6cmiKELBi6JoWxVRiiDFix/4WUGx6slqFbS1oIhUq94UD4IVqade9OKhF4W6JofUWHfTTXaz+96b/4OBNNnuzHu/eW9mJzMviYQAsY3UjSor5RRT0qY1loDEI8XCKqXAygyhwWNjAtf76LETdZ0ZoL9Bp4BkDDRKLcQh5AozlFcbLdO8CnjMenhfb69HqDU/Ap4QXTJvT1EOIPSCktT1/CVSMenDRePmLXI6rOrTchfdZ8D7GMqN69d5dmQAZG6T/Ibu3rkLADmBNCorF8L7GINMJ5PzANC/vH3zhhZIW7erATC4V6IhAAmAyoIEwPCk5/796MdIAGQ+a82v6NnTp4BYPueYXp5KNK0BXsg8ygEgc5AAGJ2cO3P27/homN/DAaibh3I37Th1ChA5emOUXghPL4Pdow6jCNt/ZdOGjeFsvooTYrYc2LvPgTcGsH8cXoHd1t42sQxjf8n/3LBmbeQQs6/nzZkLmEGcKS7DudUJz8zzRs1oZwnRC+bQpyEH3khwhjhZvV+Hh5X1SjEQVQ6xvnVNaVozhfOAQWazUiGebG/3pyOVQ51BH03Ee6NhfZv0osFXg6wgZuXShYvivXJS3WYbqf64lQ+jfukhtqBOFJQOs37pZyHThvXB88NrnZ0iIHrB/DzE+/myYKek0FvL1YZbN7vEeGX7iRPuOmTzs0iGKC3EuradilJRfvmcX+pqah2OEDPl539vHm07rARE7s+Xrm2mokQc7di+rYldiAVEIePlP22kMqmhNkPOlbaWFoc8REo9j5IHUPdKQBQQYvM2GH8BRKYw/2nL+IaotesAsUiY/U/6HVIQya5EEJP3796RS6gLiExDLCCWEeai+QscQBSSwBYQGcme5uZYwiogClgQAMSQ4a1avsKJsw3jfwy8eIHnREYP/a4QsWLjLRfOn+exYgOI9MY9X+3C2ql/eHPTVSQ7V+ZlBb5PJDzu+bbVbE1rAsREYmRk5Cjbb/YphbG4j9TlytXLV0gDXLd6jfcem+whTpUgct2HWnCjlCr7TpfV1LLeRKw8RLE7wKnNDKOAt3H9erbnMZSDKO2Im69TUTifCIgkICp7UphCSA1a/0R4R1rbRAL0BZF79gwVfinV8yLbMEc5QVy1YqVSSYl865i7sHHLVocyRGSUCuviGCBOhFdft0yJ/G45fW3T7CCzclJsvSqnzCxJZ0qpMh/2PEC+01J0TyaT0yhARObhgA5FKQe4ynnAQ0vm3n33rhMXxITCEood8LsYNCCmrdQPNobN1vGkrw8Aw7Y7vIM5QIAUBBEgBQCcePPbXV0AyXViB28snyytXhLPj0PD9IztCpAC7FllmjcBUoBD2Ib5GyAFRDSscwoZkgAymM10Xa8n1yiALMoDK0g1LjNGjgGktxw/doxHR09b1p38hr59/RowuUYqhFchtlAd5IaGBhm7FFTdbuGi81RxSt3r7nZUgCeu00pW0C0HgK1pTcqEGs4waxYtVnt7pZvyO7fvYJv/W9lZuK7rszgZBPBKNFCcRjrd0eFgV3oJYuclDIzaeC8HBpzJ6rZ1/SAoheSdXqX14KGCkLOfF39f6zlohCAzEomZpUAttcDi0UlFUFjZfK/cjfAHJ5oQGJBfli8AAAAASUVORK5CYII=","data:image/png;base64,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","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHEAAABxCAYAAADifkzQAAAD70lEQVR42u3dTU8TQRjA8WriRWMaCAlUZ2d3FRMPvpCYAAZo5KCJGowv8aLBEFCPGgwI6BfwC6iH6kEPvt4AbxgTE0945gMQExIvXjwoiBUORSht+rLd3Xlm/5Psqe3OzPObZ2a33d2mUhYUT7nPD2g3X+vmO3o1RYm+1INV63bQ9ZaJtEFot4ZH8gPnzgfaRzqdbkIiBLiZ6el8HPWiEyCIJg4mxP4flHySEKShwRtgFhdf6ZlSAfk4N5eXOmMkyW+XLQFYO4pNHqatHe7vy5Y4B3U+24b3Owmj1dqsLO7U6J271q8dxX12tc5J7cvOJC/8E2PjsrOyuPFXL11O7GG4SEjOoYTHBMDq4+Nm3JsA2pGVy0Y2rD+bBbCGePmO/mtUg57lcgDWk5HKWTGiIbAEhNynHsXagKePn4AoLRE2V3yyswtAaZCecv4wjQqHBFB4bAGMDnF9xgOQbCxaB1tbuws7Ptx+CESJkGRhfJBr0+oqgGQjiOIhAbQI8cPsbCyXzEvbjIOMsnEgli9LS0tDgRHDnipsmvaMmlajWAtBDLmOwge+zs+DaBhiVfVEdUQKIoiJQ9xio/T3sm9qbm5WUTcIxAZnY5Qn9yCGVFfhDSeOd4BoOGLJ+jKZzG6jRhSItSNG/T0piCHUB6JIxB1mjiYQ659SQRSOGMfvhiA2uE4QLUI81dsHonRE2ztuI+JGvSCCCGLciJ7yXoAoHHH9nnEQZfZlo964ri0FEUQQQQQRRBBBBBFEEK1E5DzRAkRX6ZcgCv/GJu5GgAgiiCBaiMgv+/IQfa3fl1YFUQxi+dQEUR6iamvrBFFOX7h4OAmI3IshB7EplUqDKBxx2wstLS17QTS/LxWTrfDig8lJ7hSWjsg9++Yjln2D1noARHP7UnWS8Rwb8xEr/r8UiGb2pWYXEC1C5CmLKdGDfg+I5vSl7qTiycNmPHk40CDZH/LD+kCMKJl4Gn+85eHUVGPiX9hJx5GjQMa01jYMkWwUCgikRYiuUu8KOxy8dh1IaYBkoyWAQEZTzp4+E/55ZzqVbgJScBaWO0kn9EJnuc0Vvnn1GkipyxTZ2Pg4usq9kpwRZCFgKH/JDmR0cat4uQWQZgMaFbPNjcr29IIpJQM5/Qi0Bq4yVQgqPV3dW2LiOM4wcz7rXzTF1TqXdExr+p9EyOI+G3kAE7RTtmK2e779/bQZ08rsK1d8rX/YgvltcfFtUmaZqrNSSgAktz3SgJgYFPAqTbOO/mka6MLCQl7SIBOTnWEG8OLAhSou19dfEAoBtHi7PXIzPzF+fxv02Oi9+u6zUM4KEo0Cdb1l6Xc4UUoUpdSxIFi+dn9Jj8E/T3UVUFUBWIsAAAAASUVORK5CYII=","data:image/png;base64,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","data:image/png;base64,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","data:image/png;base64,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"]
this.init=function(t,i,e,s){return new n(t,i,e,s)}
var n=function(t,s,h,n){console.log("New Header Created"),this.viewWidth=s,this.height=h,this.items=[],this.items.push(new a(i,10,"Play",o[1],n)),this.items.push(new a(i+e,10,"Pause",o[0],n)),this.items.push(new a(i+2*e,10,"Stop",o[3],n)),this.items.push(new a(i+3*e,10,"Record",o[2],n)),this.items.push(new a(i+4*e,10,"New",o[4],n)),this.items.push(new a(i+5*e,10,"Save",o[6],n)),this.items.push(new a(i+6*e,10,"Load",o[5],n)),this.items.push(new r(i+7*e,30,1,9,6,"Zoom",n)),this.items.push(new r(i+8*e,30,40,240,140,"BPM",n))
var l=this
t.addEventListener("InputEvent",function(t){l.generalInput(t)},!1)}
n.prototype.generalInput=function(t){for(var i in this.items)this.items[i].checkMouseOver(t.detail.mouseX,t.detail.mouseY)
if(t.detail.mouseDown)for(var i in this.items)this.items[i].checkMouseDown(t.detail)
if(t.detail.scrollConsumes>0){t.detail.scrollConsumes--
for(var i in this.items)this.items[i]instanceof r&&this.items[i].smallInc(Math.floor(t.detail.deltaX))}},n.prototype.windowResize=function(t,i){this.viewWidth=t},n.prototype.draw=function(i){i.strokeStyle="rgb(200,200,200)",i.lineWidth=t,i.strokeRect(t/2,t/2,this.viewWidth-t,this.height-t)
for(var e in this.items)this.items[e].draw(i)},n.prototype.resetButtons=function(){for(var t in this.items)this.items[t]instanceof a&&(this.items[t].isDown=!1)},n.prototype.isReady=function(){for(var t in this.items)if(!this.items[t].isReady())return!1
return!0}
var r=function(t,i,e,s,h,o,n){this.x=t,this.y=i,this.width=60,this.height=20,this.min=e,this.max=s,this.value=h,this.text=o,this.mouseOver=!1,this.midiWorkspace=n}
r.prototype.draw=function(t){t.fillStyle="rgb(240,240,240)",t.fillRect(this.x,this.y,this.width,this.height),t.fillStyle="rgb(180,180,180)"
var i=(this.value-this.min)/(this.max-this.min)*this.width+this.x
t.beginPath(),t.moveTo(i-s/2,this.y-(s-this.height)/2),t.lineTo(i+s/2,this.y-(s-this.height)/2),t.lineTo(i,this.y+this.height+(s-this.height)/2),t.closePath(),t.fill(),this.mouseOver&&(t.fillStyle="rgb(230,230,30)",t.fillRect(this.x+this.width/2+5,this.y+this.height/2+10,t.measureText(this.text+": "+this.value).width+10,20),t.fillStyle="black",t.fillText(this.text+": "+this.value,this.x+this.width/2+10,this.y+this.height/2+26))},r.prototype.isReady=function(){return!0},r.prototype.checkMouseOver=function(t,i){t>this.x&&t<this.x+this.width&&i>this.y&&i<this.y+this.height?this.mouseOver=!0:this.mouseOver=!1},r.prototype.checkMouseDown=function(t){this.mouseOver&&this.setValue(Math.round(l(t.mouseX,this.x,this.x+this.width,this.min,this.max)))},r.prototype.smallInc=function(t){this.mouseOver&&h&&(this.setValue(Math.max(Math.min(this.value+Math.sign(t)*Math.min(Math.abs(t),1),this.max),this.min)),h=!1,setTimeout(function(){h=!0},250))},r.prototype.setValue=function(t){this.value=t,this.midiWorkspace.sliderChange(this.text,this.value)},n.prototype.setBPM=function(t){for(var i in this.items)"BPM"==this.items[i].text&&this.items[i].setValue(t)}
var a=function(t,i,e,s,h){this.x=t,this.y=i,this.text=e,this.midiWorkspace=h,this.width=60,this.height=60,this.icon=new Image(this.width,this.height),this.ready=!1,this.mouseOver=!1
var o=this
this.icon.addEventListener("load",function(){o.ready=!0},!1),this.icon.src=s,this.isDown=!1}
a.prototype.isReady=function(){return this.ready},a.prototype.draw=function(t){this.isDown?t.fillStyle="rgb(100,140,200)":t.fillStyle="rgb(230,230,230)",t.beginPath(),t.arc(this.x+this.width/2,this.y+this.height/2,this.width/2,0,2*Math.PI,!1),t.fill(),t.drawImage(this.icon,this.x,this.y,this.width,this.height),this.mouseOver&&(t.fillStyle="rgb(230,230,30)",t.fillRect(this.x+this.width/2+5,this.y+this.height/2+10,t.measureText(this.text).width+10,20),t.fillStyle="black",t.fillText(this.text,this.x+this.width/2+10,this.y+this.height/2+26))},a.prototype.checkMouseOver=function(t,i){t>this.x&&t<this.x+this.width&&i>this.y&&i<this.y+this.height?this.mouseOver=!0:this.mouseOver=!1},a.prototype.checkMouseDown=function(t){this.mouseOver&&this.midiWorkspace.buttonPress(this)},a.prototype.changeState=function(t){this.state=t}
var l=function(t,i,e,s,h){return(t-i)*(h-s)/(e-i)+s}},e=new function(){var t=[67,86]
this.init=function(t){this.Inputevents=new i(t)}
var i=function(i){this.detail={},this.detail.mouseDown=!1,this.detail.mouseDrag=!1,this.detail.mouseX=-1,this.detail.mouseY=-1,this.detail.keyDown=null,this.detail.ctrlKey=!1,this.detail.deltaX=0,this.detail.deltaY=0,this.detail.scrollConsumes=0,this.detail.doubleClickConsumes=0,this.editor=i,this.prevMouseX=-1,this.prevMouseY=-1
var e=this
this.inputEvent=new CustomEvent("InputEvent",{detail:this.detail}),$(this.editor).mousedown(function(t){return e.mouseInputDown(t),!1}),$(this.editor).mouseup(function(t){return e.mouseInputUp(t),!1}),$(this.editor).mousemove(function(t){return e.mouseInputMove(t),!1}),$(this.editor).mouseleave(function(t){return e.mouseInputLeave(t),!1}),$(this.editor).dblclick(function(t){return t.preventDefault(),e.mouseInputDoubleClick(t),!1}),$(document).keydown(function(i){return e.keyInputDown(i),(i.ctrlKey||i.metaKey)&&-1!=t.indexOf(i.keyCode)?!1:void 0}),$(document).keyup(function(i){return e.keyInputUp(i),(i.ctrlKey||i.metaKey)&&-1!=t.indexOf(i.keyCode)?!1:void 0}),this.editor.addEventListener("wheel",function(t){return t.preventDefault(),e.mouseInputWheel(t),!1}),console.log("New Input Events")}
i.prototype.keyInputDown=function(t){this.detail.keyDown=t.keyCode,this.detail.ctrlKey=t.ctrlKey||t.metaKey,this.editor.dispatchEvent(this.inputEvent)},i.prototype.keyInputUp=function(t){this.detail.keyDown=null,this.detail.ctrlKey=!1,this.editor.dispatchEvent(this.inputEvent)},i.prototype.mouseInputLeave=function(t){this.detail.mouseDown=!1,this.detail.mouseX=-1,this.detail.mouseY=-1,this.editor.dispatchEvent(this.inputEvent)},i.prototype.mouseInputDown=function(t){this.detail.mouseX=t.pageX-$(this.editor).offset().left,this.detail.mouseY=t.pageY-$(this.editor).offset().top,this.detail.deltaX=0,this.detail.deltaY=0,this.detail.mouseDown=!0,this.editor.dispatchEvent(this.inputEvent)},i.prototype.mouseInputUp=function(t){this.detail.mouseX=t.pageX-$(this.editor).offset().left,this.detail.mouseY=t.pageY-$(this.editor).offset().top,this.detail.mouseDown=!1,this.prevMouseX=-1,this.prevMouseY=-1,this.detail.mouseDrag=!1,this.editor.dispatchEvent(this.inputEvent)},i.prototype.mouseInputMove=function(t){this.detail.mouseX=t.pageX-$(this.editor).offset().left,this.detail.mouseY=t.pageY-$(this.editor).offset().top,-1!=this.prevMouseX&&(this.detail.deltaX=this.detail.mouseX-this.prevMouseX,this.detail.deltaY=this.detail.mouseY-this.prevMouseY),this.prevMouseX=this.detail.mouseX,this.prevMouseY=this.detail.mouseY,this.detail.mouseDown&&(this.detail.mouseDrag=!0),this.editor.dispatchEvent(this.inputEvent)},i.prototype.mouseInputWheel=function(t){this.detail.deltaX=t.deltaX,this.detail.deltaY=t.deltaY,this.detail.scrollConsumes=2,this.editor.dispatchEvent(this.inputEvent)},i.prototype.mouseInputDoubleClick=function(t){this.detail.doubleClickConsumes=1,this.editor.dispatchEvent(this.inputEvent)}},s=new function(){var t=4,e=30,s=24,h=10,o=16,r=70,a=[1/32,1/16,1/8,.25,.5,1,2,4,8,16,32],l=24,d=26,c=["1","2","3","4","5","6","7","8","9","0","-","=","Q","W","E","R","T","Y","U","I","O","P","[","]","A","S","D","F","G","H","J","K","L",";","'","\\n","Z","X","C","V","B","N","M",",",".","/","\\s","<",">","^","v"],f=[49,50,51,52,53,54,55,56,57,48,189,187,81,87,69,82,84,89,85,73,79,80,219,221,65,83,68,70,71,72,74,75,76,186,222,13,90,88,67,86,66,78,77,188,190,191,16,37,39,38,40],u=[49,50,51,52,53,54,55,56,57,48,173,61,81,87,69,82,84,89,85,73,79,80,219,221,65,83,68,70,71,72,74,75,76,59,222,13,90,88,67,86,66,78,77,188,190,191,16,37,39,38,40]
this.init=function(t,i,e,s,h){return new p(t,i,e,s,h)}
var p=function(t,h,o,l,c){this.width=h,this.height=o-l,this.heightOffset=l,this.drawClass=c,this.BPM=140,this.ZoomLevel=0,this.BeatsPerSection=a[this.ZoomLevel+5],this.BeatsToPixels=r/this.BeatsPerSection,this.horizontalOffset=0,this.verticalOffset=0,this.scrubBarAt=0,this.edgeScroll=!1,this.scrollInterval=null,this.maxWidth=this.width,this.noteHandler=n.init(t,s,this.heightOffset+e,this.width-s,this.height-e-d,r,f.length,this)
var u=this
t.addEventListener("InputEvent",function(t){u.generalInput(t)},!1),this.isRecording=!1,this.isPlaying=!1,this.header=i.init(t,this.width,this.horizontalOffset,this),console.log("New MIDI Workspace created")}
p.prototype.generalInput=function(t){t.detail.scrollConsumes>0&&(t.detail.mouseY>this.heightOffset&&this.canvasScroll(t.detail.mouseX,t.detail.mouseY,t.detail.deltaX,t.detail.deltaY),t.detail.scrollConsumes--),t.detail.mouseDown?(t.detail.mouseY>this.heightOffset&&t.detail.mouseY<this.heightOffset+e&&(this.scrubBarAt=Math.round(4*Math.max(0,(t.detail.mouseX-this.horizontalOffset-s)/this.BeatsToPixels)/this.BeatsPerSection)/(4/this.BeatsPerSection)),t.detail.mouseY>this.height+this.heightOffset-d&&t.detail.mouseX>s&&this.canvasScroll(t.detail.mouseX,t.detail.mouseY,t.detail.deltaX*(this.maxWidth/this.BeatsPerSection)/this.width,0),this.checkEdgeScroll(t.detail.mouseX,t.detail.mouseY,t.detail.deltaX,t.detail.deltaY)):(null!=this.scrollInterval&&clearInterval(this.scrollInterval),this.edgeScroll=!1)},p.prototype.checkEdgeScroll=function(t,i,h,o){if(2*s>t||t>this.width-s||i<this.height+this.heightOffset-d&&i>this.height+this.heightOffset-d-s||i>this.heightOffset+e&&i<this.heightOffset+e+s){if(!this.edgeScroll&&(2*s>t&&0>h||t>this.width-s&&h>0||i<this.height+this.heightOffset-d&&i>this.height+this.heightOffset-d-s&&o>0||i>this.heightOffset+e&&i<this.heightOffset+e+s&&0>o)){this.edgeScroll=!0
var n=this,r=[2]
2*s>t?r=[-l,0]:t>this.width-s?r=[l,0]:i<this.height+this.heightOffset-d&&i>this.height+this.heightOffset-d-s?r=[0,l]:i>this.heightOffset+e&&i<this.heightOffset+e+s&&(r=[0,-l]),this.scrollInterval=setInterval(function(){n.canvasScroll(t,i,r[0],r[1]),n.drawClass.draw()},100)}}else null!=this.scrollInterval&&clearInterval(this.scrollInterval),this.edgeScroll=!1},p.prototype.canvasScroll=function(i,h,o,n){this.horizontalOffset-=o,this.verticalOffset-=n,this.verticalOffset=Math.max(this.verticalOffset,-c.length*s+this.height-e-t-d),this.verticalOffset=Math.min(this.verticalOffset,0),this.horizontalOffset=Math.min(this.horizontalOffset,0),this.horizontalOffset=Math.max(this.horizontalOffset,Math.min(-(this.maxWidth/this.BeatsPerSection)+this.width,0)),this.noteHandler.scroll(i,h,this.horizontalOffset,this.verticalOffset)},p.prototype.windowResize=function(t,i){this.width=t,this.height=i-this.heightOffset,this.canvasScroll(-1,-1,0,0),this.noteHandler.windowResize(this.width-s,this.height-e-d),this.header.windowResize()},p.prototype.draw=function(i){var n=Math.ceil(this.width/r)+1
i.strokeStyle="rgb(90,70,70)",i.lineWidth=1
for(var a=0;n>a;a++)i.beginPath(),i.moveTo(a*r+s+this.horizontalOffset%r,this.heightOffset),i.lineTo(a*r+s+this.horizontalOffset%r,this.height+this.heightOffset),i.stroke()
this.noteHandler.draw(i)
var l=this.scrubBarAt*this.BeatsToPixels+this.horizontalOffset+s
i.strokeStyle="rgb(0,0,220)",i.beginPath(),i.moveTo(l,this.heightOffset+e),i.lineTo(l,this.heightOffset+this.height),i.stroke(),i.fillStyle="rgb(240,240,240)",i.fillRect(0,this.heightOffset,s,this.height),i.fillStyle="black"
for(var a=1;a<=c.length;a++){var f=this.heightOffset+e+a*s-6+this.verticalOffset
f>this.heightOffset+e&&f<=this.height+this.heightOffset+s&&i.fillText(c[a-1],8,this.heightOffset+e+a*s-6+this.verticalOffset)}var u=Math.ceil(this.height/s)
i.strokeStyle="rgb(90,70,70)"
for(var a=1;u>=a;a++)i.beginPath(),i.moveTo(0,this.heightOffset+e+a*s+this.verticalOffset%s),i.lineTo(this.width,this.heightOffset+e+a*s+this.verticalOffset%s),i.stroke()
i.fillStyle="rgb(210,210,210)",i.fillRect(0,this.heightOffset,this.width,e),i.fillStyle="black"
for(var a=0;n>a;a++){var p=a*r+s+this.horizontalOffset%r
i.beginPath(),i.moveTo(p,this.heightOffset),i.lineTo(p,this.heightOffset+e),i.stroke()
for(var g=1;3>=g;g++)i.beginPath(),i.moveTo(p+g*r/4,this.heightOffset+e-4+4*(g%2-1)),i.lineTo(p+g*r/4,this.heightOffset+e),i.stroke()
var v=a*this.BeatsPerSection+Math.floor(-1*this.horizontalOffset/r)*this.BeatsPerSection
v==Math.round(v)&&i.fillText(v+"",p+2,this.heightOffset+e-o+t)}i.fillStyle="rgb(0,0,220)",i.strokeStyle="rgb(0,0,220)",i.beginPath(),i.moveTo(l-.6*h,this.heightOffset+o+t),i.lineTo(l+.6*h,this.heightOffset+o+t),i.lineTo(l,this.heightOffset+t+h+o),i.closePath(),i.fill(),i.beginPath(),i.moveTo(l,this.heightOffset+o+t),i.lineTo(l,this.heightOffset+e),i.stroke(),i.fillStyle="rgb(100,100,100)",i.fillRect(s,this.height+this.heightOffset-d,this.width-s,d),i.fillStyle="rgb(200,200,200)",i.fillRect(s+2+this.width/(this.maxWidth/this.BeatsPerSection)*-this.horizontalOffset,this.height+this.heightOffset-d+2,this.width*this.width/(this.maxWidth/this.BeatsPerSection)-s-4-t,d-4-t),i.lineWidth=t,i.strokeStyle="rgb(170,170,170)",i.strokeRect(t/2,this.heightOffset+t/2,this.width-t,this.height-t),this.header.draw(i)},p.prototype.setMaxWidth=function(t){this.maxWidth=t+this.width},p.prototype.buttonPress=function(t){"Record"==t.text?this.isPlaying||(this.isRecording=!this.isRecording,this.header.resetButtons(),t.isDown=this.isRecording,this.isRecording?this.noteHandler.startRecording(this.BPM,this.scrubBarAt):this.scrubBarAt=this.noteHandler.stopRecording()):"Play"==t.text?this.isRecording||this.isPlaying||(this.isPlaying=!0,this.header.resetButtons(),this.noteHandler.startPlaying(this.BPM,this.scrubBarAt),t.isDown=!0):"Pause"==t.text?this.isPlaying&&(this.isPlaying=!1,this.header.resetButtons(),this.noteHandler.stopPlaying(!1),t.isDown=!0):"Stop"==t.text?this.stopPlaying(t):"New"==t.text?(this.stopPlaying(t),this.noteHandler.resetNotes(),this.drawClass.newProject()):"Save"==t.text?this.drawClass.sendNotes(this.noteHandler.getNotes()):"Load"==t.text&&this.drawClass.loadNotes()},p.prototype.spaceKey=function(){this.isPlaying?this.buttonPress({text:"Pause"}):this.buttonPress({text:"Play"})},p.prototype.notesLoaded=function(t){this.noteHandler.setNotes(t)},p.prototype.stopPlaying=function(t){this.isRecording?this.scrubBarAt=this.noteHandler.stopRecording():this.scrubBarAt=0,this.isPlaying&&this.noteHandler.stopPlaying(!1),this.isPlaying=!1,this.isRecording=!1,this.noteHandler.beatAt=this.scrubBarAt,this.header.resetButtons(),t.isDown=!0,this.redrawAll()},p.prototype.sliderChange=function(t,i){if("Zoom"==t){var e=this.ZoomLevel
this.ZoomLevel=i-6,this.BeatsPerSection=a[this.ZoomLevel+5],this.BeatsToPixels=r/this.BeatsPerSection,this.noteHandler.changeResolution(this.BeatsPerSection)
var s=this.horizontalOffset-this.width/2
this.horizontalOffset=Math.min(s*Math.pow(2,e-this.ZoomLevel)+this.width/2,0),this.canvasScroll(-1,-1,0,0)}else"BPM"==t&&(this.BPM=i)},p.prototype.setBPM=function(t){this.header.setBPM(t)},p.prototype.redrawAll=function(){(this.isPlaying||this.isRecording)&&(this.scrubBarAt=this.noteHandler.beatAt),this.drawClass.draw()},p.prototype.isReady=function(){return this.header.ready()},p.prototype.recordKeyDown=function(t){if(this.isRecording){var i=f.indexOf(t);-1==i&&(i=u.indexOf(t)),-1!=i&&this.noteHandler.recordNoteDown(i)}},p.prototype.recordKeyUp=function(t){if(this.isRecording){var i=f.indexOf(t);-1==i&&(i=u.indexOf(t)),-1!=i&&this.noteHandler.recordNoteUp(i)}},p.prototype.playKeyDown=function(t){this.drawClass.midiKeyDown(f[t])},p.prototype.playKeyUp=function(t){this.drawClass.midiKeyUp(f[t])},p.prototype.getScrubBarAt=function(){return this.scrubBarAt},p.prototype.setScrubBarAt=function(t){this.scrubBarAt=t}},h=new function(){this.init=function(){return new t}
var t=function(){this.isActive=!1,this.x=0,this.y=0,this.sx=0,this.sy=0,this.w=0,this.h=0}
t.prototype.startNew=function(t,i,e,s){this.isActive=!0,this.sx=t-e,this.sy=i-s,this.x=this.sx,this.y=this.sy,this.w=0,this.h=0},t.prototype.update=function(t,i,e,s){t-e>this.sx?(this.x=this.sx,this.w=t-(this.x+e)):(this.x=t-e,this.w=this.sx-this.x),i-s>this.sy?(this.y=this.sy,this.h=i-(this.y+s)):(this.y=i-s,this.h=this.sy-this.y)},t.prototype.noteInMulti=function(t){return t.px+t.pw>this.x&&t.px<this.x+this.w&&t.py+t.height>this.y&&t.py<this.y+this.h},t.prototype.draw=function(t,i,e,s){if(this.isActive){t.globalAlpha=.3,t.fillStyle="rgb(50,50,240)"
var h=this.y+e,o=this.h
s>h&&(o-=s-h,h=s),o>0&&t.fillRect(this.x+i,h,this.w,o),t.globalAlpha=1}}},o=new function(){this.createNote=function(i,e,s,h,o,n,r,a){return new t(i,e,s,h,o,n,r,a)}
var t=function(t,i,e,s,h,o,n,r){this.note=t,this.beat=i,this.length=e,this.height=s,this.note=Math.max(0,this.note),this.note=Math.min(r-1,this.note),this.note=Math.max(0,this.note),this.note=Math.min(r,this.note),this.px=h*this.beat+o,this.py=s*this.note+n,this.deltaX=0,this.deltaY=0,this.deltaWidth=0,this.pw=h*this.length,this.selected=!1,this.minResizePadding=15,this.radius=6,this.resizeRatio=5}
t.prototype.draw=function(t,i,e){this.selected?t.fillStyle="rgb(100,140,200)":t.fillStyle="rgb(168,214,238)",t.stokeStyle="rgb(190,235,255)"
var s=this.px+i,h=this.py+e
t.beginPath(),t.moveTo(s+this.radius,h),t.lineTo(s+this.pw-this.radius,h),t.quadraticCurveTo(s+this.pw,h,s+this.pw,h+this.radius),t.lineTo(s+this.pw,h+this.height-this.radius),t.quadraticCurveTo(s+this.pw,h+this.height,s+this.pw-this.radius,h+this.height),t.lineTo(s+this.radius,h+this.height),t.quadraticCurveTo(s,h+this.height,s,h+this.height-this.radius),t.lineTo(s,h+this.radius),t.quadraticCurveTo(s,h,s+this.radius,h),t.closePath(),t.stroke(),t.fill()},t.prototype.mouseOver=function(t,i){return t>this.px&&t<this.px+this.pw&&i>this.py&&i<this.py+this.height?!0:!1},t.prototype.adjustLength=function(t,i){this.pw=t*this.length,this.px=this.beat*t+i},t.prototype.moveNote=function(t,i){this.deltaX+=t,this.deltaY+=i,this.px+=t,this.py+=i},t.prototype.rightResize=function(t){this.pw+t>1&&(this.deltaWidth+=t,this.pw+=t)},t.prototype.leftResize=function(t){this.pw-t>1&&(this.deltaX+=t,this.px+=t,this.deltaWidth-=t,this.pw-=t)},t.prototype.overLeftEdge=function(t,i){return this.pw>this.minResizePadding&&t>this.px&&t<this.px+this.pw/this.resizeRatio&&i>this.py&&i<this.py+this.height?!0:!1},t.prototype.overRightEdge=function(t,i){return this.pw>this.minResizePadding&&t>this.px+this.pw-this.pw/this.resizeRatio&&t<this.px+this.pw&&i>this.py&&i<this.py+this.height?!0:!1},t.prototype.mouseUp=function(t,i,e,s,h,o){var n=Math.round(4*this.deltaX/e)/4,r=Math.round(this.deltaY/i)
if(this.px+=n*e-this.deltaX,this.py+=r*i-this.deltaY,this.deltaX=0,this.deltaY=0,this.beat+=n*t,this.note+=r,o){var a=this.beat
this.beat=Math.round(this.beat*(4/t))/(4/t),this.px+=(this.beat-a)*e}this.beat<0&&(this.px+=-this.beat*e,this.beat=0),this.note<0&&(this.py+=-this.note*i,this.note=0),this.note>=h&&(this.py+=(h-1-this.note)*i,this.note=h-1)
var l=Math.round(4*this.deltaWidth/e)/4
this.pw+=l*e-this.deltaWidth,this.deltaWidth=0,this.length+=l*t,this.length<=0&&(this.length=t/4,this.pw=s*this.length)},t.prototype.isVisible=function(t,i,e,s,h,o){return this.px+this.pw+h>t&&this.px+h<t+e&&this.py+this.height+o>i&&this.py+o<i+s?!0:!1}},n=new function(){this.init=function(i,e,s,h,o,n,r,a){return new t(i,e,s,h,o,n,r,a)}
var t=function(i,e,s,o,n,a,l,d){this.x=e,this.y=s,this.width=o,this.height=n,this.PixelsPerSection=a,this.maxKeys=l,this.midiEditor=d,this.notes=[],this.visibleNotes=[],this.beatAt=0,this.resolution=1,this.PixelsPerNote=e,this.PixelsPerBeat=this.PixelsPerSection/this.resolution,this.verticalOffset=0,this.horizontalOffset=0,this.selected=[],this.multiSelect=h.init(),this.selectedMouseUp=!0,this.possibleNewNote=null,this.possibleDoubleClick=!1,this.resizing=-1,this.farthestNote=0,this.selectedSet=!1,r.init(t),this.editor=i
var c=this
this.editor.addEventListener("InputEvent",function(t){c.generalInput(t)},!1),this.recordInterval=null,this.recordStartTime=0,this.recordBeatStart=0,this.recordNoteStart=[],this.MSToBeats=0,this.recordResolution=128,this.playInterval=null,this.playResolution=4,this.notesPlaying=[],this.intervalRedrawResolution=40,this.clipboard=[],this.clipboardStart=0,this.viewStartBeat=0,this.viewStartInd=0,console.log("New Note Handler created")}
t.prototype.scroll=function(t,i,e,s){var h=this.horizontalOffset-e,o=this.verticalOffset-s
if(this.horizontalOffset=e,this.verticalOffset=s,!this.multiSelect.isActive&&!this.selectedMouseUp)for(var n in this.selected)this.selected[n].moveNote(h,o)
this.multiSelect.isActive&&this.updateMulitSelect(t,i),this.visibleNotes=[]
var r=-1*this.horizontalOffset/this.PixelsPerBeat
if(this.viewStartInd>=this.notes.length&&(this.viewStartInd=0==this.notes.length?0:this.notes.length-1),0!=this.notes.length){if(r<this.viewStartBeat)for(;this.viewStartInd>=0;){if(this.notes[this.viewStartInd].beat+this.notes[this.viewStartInd].length<r){this.viewStartInd++
break}this.viewStartInd--}else if(r>this.viewStartBeat)for(;this.viewStartInd<=this.notes.length-1;){if(this.notes[this.viewStartInd].beat+this.notes[this.viewStartInd].length>=r){this.viewStartInd--
break}this.viewStartInd++}this.viewStartInd=Math.min(this.viewStartInd,this.notes.length-1),this.viewStartInd=Math.max(this.viewStartInd,0),0!=this.notes.length&&(this.viewStartBeat=this.notes[this.viewStartInd].beat+this.notes[this.viewStartInd].length)
for(var n=this.viewStartInd;n<this.notes.length;n++)this.notes[n].isVisible(this.x,this.y,this.width,this.height,this.horizontalOffset,this.verticalOffset)&&this.visibleNotes.push(this.notes[n]),this.notes[n].beat>=r+this.width/this.PixelsPerBeat}},t.prototype.updateMulitSelect=function(t,i){this.multiSelect.update(t,i,this.horizontalOffset,this.verticalOffset)
for(var e in this.notes)!this.notes[e].selected&&this.multiSelect.noteInMulti(this.notes[e])&&(this.selected.push(this.notes[e]),this.notes[e].selected=!0)
for(var e in this.selected)this.selected[e].selected&&!this.multiSelect.noteInMulti(this.selected[e])&&(this.selected[e].selected=!1,this.selected.splice(e,1))},t.prototype.draw=function(t){for(var i in this.visibleNotes)this.visibleNotes[i].draw(t,this.horizontalOffset,this.verticalOffset)
this.multiSelect.draw(t,this.horizontalOffset,this.verticalOffset,this.y)},t.prototype.windowResize=function(t,i){this.width=t,this.height=i},t.prototype.changeResolution=function(t){this.resolution=t,this.PixelsPerBeat=this.PixelsPerSection/this.resolution
for(var i in this.notes)this.notes[i].adjustLength(this.PixelsPerBeat,this.x)},t.prototype.findNote=function(t,i,e){for(var s,h,o=0,n=t.length-1;n>=o;)if(s=(o+n)/2|0,h=t[s],h.beat<i.beat)o=s+1
else if(h.beat>i.beat)n=s-1
else{if(e)return s
for(var r=o;n>=r;r++)if(t[r]==i)return r
o++}return e||(console.log("Didn't find note"),console.log(t),console.log(i),console.log(s+","+o+","+n),console.log("***************** Critical Error! Didn't find note *****************")),o},t.prototype.startRecording=function(t,i){this.MSToBeats=t/6e4,this.recordStartTime=(new Date).getTime(),this.recordBeatStart=i
var e=this
this.recordInterval=setInterval(function(){e.beatAt=e.recordBeatStart+e.MSToBeats*((new Date).getTime()-e.recordStartTime)
var t=e.beatAt*e.PixelsPerBeat;(t+e.horizontalOffset>=e.width/2||t+e.horizontalOffset<0)&&e.midiEditor.canvasScroll(-1,-1,t+e.horizontalOffset-e.width/2,0),e.midiEditor.redrawAll()},e.intervalRedrawResolution)},t.prototype.stopRecording=function(){return clearInterval(this.recordInterval),this.beatAt=this.recordBeatStart,this.recordNoteStart=[],this.beatAt},t.prototype.recordNoteDown=function(t){var i=!1
for(var e in this.recordNoteStart)this.recordNoteStart[e].note==t&&(i=!0)
i||this.recordNoteStart.push({note:t,sTime:(new Date).getTime()})},t.prototype.recordNoteUp=function(t){for(var i=(new Date).getTime(),e=0;e<this.recordNoteStart.length;e++)if(this.recordNoteStart[e].note==t){this.addNewNote(o.createNote(t,Math.round((this.recordBeatStart+(this.recordNoteStart[e].sTime-this.recordStartTime)*this.MSToBeats)*this.recordResolution)/this.recordResolution,Math.max(Math.round((i-this.recordNoteStart[e].sTime)*this.MSToBeats*this.recordResolution)/this.recordResolution,1/this.recordResolution),this.PixelsPerNote,this.PixelsPerBeat,this.x,this.y,this.maxKeys)),this.recordNoteStart.splice(e,1),e--
break}},t.prototype.startPlaying=function(t,i){this.MSToBeats=t/6e4
var e=this,s=0,h=(new Date).getTime(),o=(new Date).getTime(),n=i,r=-1
for(var a in this.notes)if(this.notes[a].beat>=n){r=a
break}-1==r&&(r=0,n=0),this.playInterval=setInterval(function(){0==e.notesPlaying.length&&r>=e.notes.length&&e.stopPlaying(!0)
var t=(new Date).getTime()
e.beatAt=n+e.MSToBeats*((new Date).getTime()-h)
var i=e.beatAt*e.PixelsPerBeat;(i+e.horizontalOffset>=e.width/2||i+e.horizontalOffset<0)&&e.midiEditor.canvasScroll(-1,-1,i+e.horizontalOffset-e.width/2,0)
for(var a=0;a<e.notesPlaying.length;a++)e.notes[e.notesPlaying[a]].beat+e.notes[e.notesPlaying[a]].length<=e.beatAt&&(e.midiEditor.playKeyUp(e.notes[e.notesPlaying[a]].note),e.notesPlaying.splice(a,1),a--)
for(;r<e.notes.length&&e.notes[r].beat<=e.beatAt;)e.notesPlaying.push(r),e.midiEditor.playKeyDown(e.notes[r].note),r++
s+=t-o,o=t,s>e.intervalRedrawResolution&&(s-=e.intervalRedrawResolution,e.midiEditor.redrawAll())},this.playResolution)},t.prototype.stopPlaying=function(t){clearInterval(this.playInterval)
for(var i in this.notesPlaying)this.midiEditor.playKeyUp(this.notes[this.notesPlaying[i]].note)
this.notesPlaying=[],t&&this.midiEditor.stopPlaying({text:"Stop",isDown:!1})},t.prototype.resetNotes=function(){this.selected=[],this.notes=[],this.visibleNotes=[]},t.prototype.getNotes=function(){return this.notes},t.prototype.setNotes=function(t){this.notes=[]
for(var i in t)this.addNewNote(o.createNote(t[i].note,t[i].beat,t[i].length,this.PixelsPerNote,this.PixelsPerBeat,this.x,this.y,this.maxKeys))
this.selected=[],this.visibleNotes=[],this.scroll(0,0,this.horizontalOffset,this.verticalOffset),this.midiEditor.redrawAll()},t.prototype.addNewNote=function(t){this.insertNote(t),this.visibleNotes.push(t)},t.prototype.insertNote=function(t){this.notes.splice(this.findNote(this.notes,t,!0),0,t),t.px+t.pw>this.farthestNote&&(this.farthestNote=t.px+t.pw,this.midiEditor.setMaxWidth(this.farthestNote*this.resolution))}},r=new function(){this.init=function(t){t.prototype.generalInput=function(t){if(t.detail.mouseDown){this.possibleDoubleClick=!0
var i=!1
if(this.multiSelect.isActive)this.updateMulitSelect(t.detail.mouseX,t.detail.mouseY),i=!0
else if(0==this.selected.length){for(var e=this.visibleNotes.length-1;e>=0;e--)if(this.visibleNotes[e].mouseOver(t.detail.mouseX-this.horizontalOffset,t.detail.mouseY-this.verticalOffset)){this.visibleNotes[e].selected=!0,this.selected.push(this.visibleNotes[e]),this.selectedMouseUp=!1,this.resizing=0,i=!0
break}}else if(this.selectedMouseUp){for(var e in this.selected)if(this.selected[e].mouseOver(t.detail.mouseX-this.horizontalOffset,t.detail.mouseY-this.verticalOffset)){this.selectedMouseUp=!1
break}}else{if(-1==this.resizing)for(var e in this.selected){if(this.selected[e].overLeftEdge(t.detail.mouseX-this.horizontalOffset,t.detail.mouseY-this.verticalOffset)){this.resizing=1
break}if(this.selected[e].overRightEdge(t.detail.mouseX-this.horizontalOffset,t.detail.mouseY-this.verticalOffset)){this.resizing=2
break}}-1==this.resizing&&(this.resizing=0)
for(var e in this.selected)1==this.resizing?this.selected[e].leftResize(t.detail.deltaX):2==this.resizing?this.selected[e].rightResize(t.detail.deltaX):this.selected[e].moveNote(t.detail.deltaX,t.detail.deltaY)
this.selectedSet=!1,i=!0}if(!i&&this.selectedMouseUp&&0!=this.selected.length){for(var e in this.selected)this.selected[e].selected=!1
this.selected=[],i=!0}!i&&this.selectedMouseUp&&t.detail.mouseX>this.x&&t.detail.mouseX<this.x+this.width&&t.detail.mouseY>this.y&&t.detail.mouseY<this.y+this.height&&(this.possibleNewNote=o.createNote(Math.floor((t.detail.mouseY-this.y-this.verticalOffset)/this.PixelsPerNote),Math.floor((t.detail.mouseX-this.x-this.horizontalOffset)/this.PixelsPerSection)*this.resolution,this.resolution,this.PixelsPerNote,this.PixelsPerBeat,this.x,this.y,this.maxKeys))}else if(null!=this.possibleNewNote&&(this.addNewNote(this.possibleNewNote),this.possibleNewNote=null),this.selectedMouseUp=!0,this.multiSelect.isActive=!1,this.resizing=-1,this.selected.length>0){for(var s=!1,h=this.selected.length-1;h>=0;h--)if(this.selected[h].mouseOver(t.detail.mouseX-this.horizontalOffset,t.detail.mouseY-this.verticalOffset)){(this.selected[h].overLeftEdge(t.detail.mouseX-this.horizontalOffset,t.detail.mouseY-this.verticalOffset)||this.selected[h].overRightEdge(t.detail.mouseX-this.horizontalOffset,t.detail.mouseY-this.verticalOffset))&&($(this.editor).css("cursor","col-resize"),s=!0)
break}s||$(this.editor).css("cursor","default")}if(27==t.detail.keyDown){for(var e in this.selected)this.selected[e].selected=!1
this.selected=[]}else if(8==t.detail.keyDown){for(var e in this.selected){this.notes.splice(this.notes.indexOf(this.selected[e]),1)
var n=this.visibleNotes.indexOf(this.selected[e]);-1!=n&&this.visibleNotes.splice(n,1)}this.selected=[]}else if(32==t.detail.keyDown)this.midiEditor.spaceKey()
else if(t.detail.ctrlKey)if(67==t.detail.keyDown&&this.selected.length>0){this.clipboardStart=this.notes[this.notes.length-1].beat,this.clipboard=[]
for(var r in this.selected)this.clipboard.push(this.selected[r]),this.clipboardStart=Math.min(this.clipboardStart,this.selected[r].beat)}else if(86==t.detail.keyDown&&this.clipboard.length>0){var a=this.midiEditor.getScrubBarAt(),l=0
for(var e in this.selected)this.selected[e].selected=!1
this.selected=[]
for(var r in this.clipboard){var d=o.createNote(this.clipboard[r].note,a+this.clipboard[r].beat-this.clipboardStart,this.clipboard[r].length,this.PixelsPerNote,this.PixelsPerBeat,this.x,this.y,this.maxKeys)
this.insertNote(d),this.selected.push(d),d.selected=!0,l=Math.max(l,d.beat+d.length)}this.midiEditor.setScrubBarAt(l),this.scroll(0,0,this.horizontalOffset,this.verticalOffset)}if(t.detail.mouseDrag&&(this.possibleNewNote=null,0==this.selected.length&&!this.multiSelect.isActive&&t.detail.mouseY>this.y?this.multiSelect.startNew(t.detail.mouseX,t.detail.mouseY,this.horizontalOffset,this.verticalOffset):this.selected.length>0&&(this.possibleDoubleClick=!1)),(!t.detail.mouseDown||t.detail.mouseX<this.x||t.detail.mouseY<this.y||t.detail.mouseY>this.y+this.height)&&!this.selectedSet){for(var e in this.selected)this.notes.splice(this.findNote(this.notes,this.selected[e],!1),1)
for(var e in this.selected)this.selected[e].mouseUp(this.resolution,this.PixelsPerNote,this.PixelsPerSection,this.PixelsPerBeat,this.maxKeys,1==this.selected.length),this.insertNote(this.selected[e])
this.selectedSet=!0}if(t.detail.doubleClickConsumes>0){if(this.possibleDoubleClick)for(var e=this.visibleNotes.length-1;e>=0;e--)if(this.visibleNotes[e].mouseOver(t.detail.mouseX-this.horizontalOffset,t.detail.mouseY-this.verticalOffset)){this.notes.splice(this.notes.indexOf(this.visibleNotes[e]),1),this.visibleNotes.splice(e,1),this.selected.splice(this.selected.indexOf(this.visibleNotes[e]),1)
break}this.possibleDoubleClick=!1,t.detail.doubleClickConsumes--}},console.log("Added input function to Note Handler object")}}}