class Diatone::Strat
Public Class Methods
blisters(choice=nil,strings=self.standard_tuning,scale=nil)
click to toggle source
# File lib/diatone.rb, line 369 def self.blisters (choice=nil,strings=self.standard_tuning,scale=nil) blisters = {} if choice == nil return blisters.to_json end tonic = Note.key(choice[0],true)%12 colors = $chordcolors[tonic] 6.times do |s| blisterstr = [] st = strings[s] t = Note.fix st $numfrets.times do |f| n = Note.key(t,false) i = choice.rindex {|a| a == n} if i color = colors[i] if i == 0 then rad = 7 else rad = 5 end if f == 0 blister = { 'type' => 'circle', 'cx' => $boardmargin+s*$boardstep, 'cy' => $dists[f]+8, 'r' => rad-1, 'count' => Note.ord2tone(t.to_i), 'coord' => [s,f], 'index' => i, 'stroke' => color, 'stroke-width' => 3, 'fill' => 'black' } blisterstr.push blister else xc = ($dists[f]/460.0) blister = { 'type' => 'circle', 'cx' => $boardmargin-xc*2.5+s*($boardstep+xc), 'cy' => $dists[f], 'r' => rad, 'count' => Note.ord2tone(t.to_i), 'coord' => [s,f], 'index' => i, 'fill' => color, #'fill-opacity' => 1.2-f/($numfrets*1.0), 'stroke' => 'none' } blisterstr.push blister end end t += 1 end blisters[s] = blisterstr end legend = [] ords = [] choice.length.times do |c| nt = choice[c] cl = colors[c] o = Note.fix(nt+'4').to_i if c > 0 and o < ords[c-1] o += 12 end ords.push o legend.push(nt+','+cl+','+o.to_s) end blisters['legend'] = (legend.join(';')) return blisters end
fretboard()
click to toggle source
# File lib/diatone.rb, line 252 def self.fretboard () y = $firstfretwidth; yy = 0; board = [] head = { 'type' => 'path', 'path' => "m 0,0 c 0.67553,-13.141072 -4.48542,-17.874924 -30.62047,-25.353202 l 93.57286,-287.670447 c 13.79673,-28.33919 54.14057,-31.93149 75.04833,-12.57035 9.11046,9.06332 20.55453,35.78224 9.28602,60.61698 -5.45523,12.0228 -17.15423,23.82984 -36.50441,32.19232 0,0 -2.81387,3.53158 -1.91422,9.86513 4.11709,28.98438 32.13336,129.84242 24.99516,141.72309 -7.13821,11.880669 -48.15894,10.032667 -52.87363,81.339695 z", 'stroke' => 'none', 'fill' => '90-#8b512e-#cd8f69:10-#c07040' } board.push(head) body = { 'type' => 'path', 'path' => "m -4,770 c -4.5242,43.39873 -83.3941,32.78475 -108.7634,-11.67981 -20.7376,-36.34659 5.2806,-91.30037 -19.9816,-102.2859 -30.8976,-13.43602 -80.1227,35.57216 -72.3811,129.47097 7.3335,88.948316 57.1253,131.731505 44.9389,217.090413 -12.1864,85.358817 -110.4576,200.116007 -85.1837,318.218047 25.2739,118.10213 162.8277,135.95354 274.3877,145.03181 111.5601,9.07826 263.55221,6.37368 287.47455,-128.09349 24.6158,-138.36507 -67.0671,-209.42944 -74.31643,-304.36328 -3.18581,-41.719804 14.39068,-62.103376 22.96767,-88.367288 8.5803,-26.274115 25.80111,-44.13946 23.04036,-96.234742 -4.57647,-86.35794 -45.45078,-70.88739 -48.67796,-70.97081 -27.19304,7.98078 -15.26175,59.28649 -42.35049,85.685817 -8.8064,8.582202 -30.3951,18.925638 -49.5918,18.485334 -60.499,-1.387536 -54.4462,-20.583252 -61.4426,-35.736221 -8.599,-18.62415 -90.1201,-76.25085 -90.1201,-76.25085 z", 'stroke' => 'none', 'fill' => 'maroon' } board.push(body) white = { 'type' => 'path', 'path' => "m -96,1140 c 0.098,7.01566 0.8747,14.03337 2.4142,21.22344 8.7356,48.54034 40.2199,58.7572 74.4886,53.05809 40.0337,1.66041 95.5773,-7.43657 154.943,7.6553 50.2963,12.78628 73.79222,31.93169 94.91923,51.95945 17.53567,15.74884 37.64893,32.96362 55.5543,23.46872 30.22696,-20.56269 -2.85821,-89.94559 -13.0125,-115.40769 -21.34736,-53.00201 -47.47667,-93.35326 -50.38964,-150.820522 -2.42253,-47.791858 16.95174,-74.49973817 24.01244,-96.120565 10.32302,-31.610493 24.49009,-41.3072 21.99337,-88.420203 -2.10544,-39.72965 -11.89005,-48.9677 -14.67067,-50.69193 -1.3903,-0.86212 -2.28921,-0.9382 -3.72532,-0.90891 -0.71806,0.0145 -1.44538,0.0977 -2.28269,0.24145 -0.18297,0.031 -0.46873,0.0898 -0.67735,0.12887 -0.0684,0.19233 -0.14486,0.42621 -0.76059,1.67448 -1.49359,3.02792 -3.37982,9.69246 -5.23772,18.05192 -3.60708,16.22961 -7.38026,39.85959 -25.58263,58.765547 l 0.0275,0.02835 c -0.50003,0.606339 -1.06013,1.131786 -1.57707,1.716489 -11.46688,12.97011 -26.98306,22.595111 -42.57546,25.085465 -16.2953,2.602665 -32.6136,-1.418191 -48.8761,-5.556621 -32.5252,-8.276954 -65.6194,-25.061756 -95.7875,-39.87163 -30.1681,-14.80978 -58.4564,-27.17844 -71.6229,-28.67619 -6.5833,-0.74888 -6.5511,0.23292 -6.2433,-0.0811 0.2923,-0.29824 -2.0298,2.90505 -2.0368,13.55084 15.6979,74.226032 12.888,128.553187 -6.4573,178.417869 -18.2156,46.953021 -37.3243,86.480971 -36.8373,121.528471 z", 'stroke' => 'none', 'fill' => 'White' } board.push(white) fboard = { 'type' => 'path', 'path' => 'M 0 0 L 80 0 L 85 910 C 87 930 -7 930 -5 910 Z', 'stroke' => 'none', 'fill' => 'Black' } board.push(fboard) $numfrets.times do |t| i = [5,7,9,15,17,19,21].rindex {|a| a == t} if i circle = { 'type' => 'circle', 'cx' => 40, 'cy' => yy-y/2, 'r' => 5, 'fill' => 'Silver' } board.push circle elsif t == 12 board.push ( { 'type' => 'circle', 'cx' => 16, 'cy' => yy-y/2, 'r' => 5, 'fill' => 'Silver' }) board.push ( { 'type' => 'circle', 'cx' => 63, 'cy' => yy-y/2, 'r' => 5, 'fill' => 'Silver' }) end if t == 0 then w = 9 else w = 3 end fret = { 'type' => 'path', 'path' => 'M'+(-yy/184).to_s+' '+(yy).to_s+' H'+(80+yy/184).to_s, 'stroke-width' => w, 'stroke' => 'Gainsboro' } board.push fret $dists.push (yy-8) y /= STEP yy += y.round end tresh = { 'type' => 'path', 'path' => 'M 0 0 L 80 0 L 80 -10 L 0 -10 Z', 'stroke' => 'none', 'fill' => 'Black', 'fill-opacity' => 0.6 } #board.push(tresh) $dists.push (yy-8) 6.times do |h| x = ($boardmargin + h * $boardstep).to_s xx = (3+h*15) yx = (-68-h*44) l = { 'type' => 'path', 'path' => 'M'+x+' 0 L '+(xx+5).to_s+' '+yx.to_s, 'stroke-width' => 2.5-h/3.0, 'stroke' => 'Silver', } board.push(l) c = { 'type' => 'circle', 'cx' => xx.to_s, 'cy' => yx.to_s, 'r' => 8, 'stroke' => 'none', 'fill' => 'r(.8,.4)#666-#ddd', } board.push(c) end 6.times do |s| x = ($boardmargin + s * $boardstep).to_s xx = (s * 17 - 3).to_s string = { 'type' => 'path', 'path' => 'M'+x+' 0 L '+xx+' 1280', 'stroke-width' => 2.5-s/3.0, 'stroke' => 'Silver' } board.push string end return board end
handles(st=self.standard_tuning)
click to toggle source
# File lib/diatone.rb, line 231 def self.handles(st=self.standard_tuning) handles = [] 6.times do |h| x = ($boardmargin + h * $boardstep).to_s xx = (3+h*15) yx = (-68-h*44) t = { 'type' => 'text', 'x' => (xx-36).to_s, 'y' => (yx-12).to_s, 'text' => st[h], 'count' => h, 'fill' => '#666', 'font' => "bold 18px 'Georgia'", 'transform' => 'R -79', } handles.push(t) end return handles end
standard_tuning()
click to toggle source
# File lib/diatone.rb, line 227 def self.standard_tuning ['E2','A2','D3','G3','B3','E4'] end