fretboard 1.0.0 → 1.4.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Fretboard
2
4
  class Notes
3
5
  # Fretboard::Notes.all(:both)
@@ -7,52 +9,49 @@ module Fretboard
7
9
  BASIS_NOTES = {
8
10
  1 => 'C',
9
11
  2 => [
10
- 'C sharp',
11
- 'D flat'
12
+ 'C#',
13
+ 'Db'
12
14
  ],
13
15
  3 => 'D',
14
16
  4 => [
15
- 'D sharp',
16
- 'E flat'
17
+ 'D#',
18
+ 'Eb'
17
19
  ],
18
20
  5 => 'E',
19
21
  6 => 'F',
20
22
  7 => [
21
- 'F sharp',
22
- 'G flat'
23
+ 'F#',
24
+ 'Gb'
23
25
  ],
24
26
  8 => 'G',
25
27
  9 => [
26
- 'G sharp',
27
- 'A flat'
28
+ 'G#',
29
+ 'Ab'
28
30
  ],
29
31
  10 => 'A',
30
32
  11 => [
31
- 'A sharp',
32
- 'B flat'
33
+ 'A#',
34
+ 'Bb'
33
35
  ],
34
36
  12 => 'B'
35
37
  }.freeze
36
38
 
37
- def self.all(sharp_or_flat = :sharp, formated: false)
39
+ def self.all(sharp_or_flat = :sharp)
38
40
  BASIS_NOTES.map do |_key, value|
39
41
  result = value
40
42
 
41
43
  if value.is_a?(Array)
42
- result = if sharp_or_flat == :both
44
+ result = case sharp_or_flat
45
+ when :both
43
46
  value.join('/')
44
- elsif sharp_or_flat == :sharp
47
+ when :sharp
45
48
  value.first
46
49
  else
47
50
  value.last
48
51
  end
49
52
  end
50
53
 
51
- if formated
52
- Fretboard::Note.formated(result)
53
- else
54
- result
55
- end
54
+ result
56
55
  end
57
56
  end
58
57
 
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext'
4
+ require 'optparse'
5
+
6
+ require 'fretboard/builder'
7
+ require 'fretboard/console'
8
+ require 'fretboard/note'
9
+ require 'fretboard/tunings'
10
+
11
+ module Fretboard
12
+ class Parser
13
+ attr_reader :args
14
+
15
+ def self.parse(args)
16
+ new(args).parse
17
+ end
18
+
19
+ def initialize(args)
20
+ @args = args
21
+ end
22
+
23
+ def parse
24
+ parser.parse!(args)
25
+ rescue StandardError => e
26
+ Fretboard::Console.danger("Ambiguously completable string is encountered\n#{e}")
27
+ end
28
+
29
+ private
30
+
31
+ def parser
32
+ OptionParser.new do |opts|
33
+ opts.banner = 'Usage: fretboard [options]'
34
+
35
+ opts.on('-v', '--version', 'The current version of the gem') do
36
+ Fretboard::Console.log(Fretboard::VERSION)
37
+ exit
38
+ end
39
+
40
+ opts.on('-h', '--help', 'Prints this help') do
41
+ Fretboard::Console.log(opts.to_s)
42
+ exit
43
+ end
44
+
45
+ opts.on('--draw-tuning CODE', 'Build a guitar tuning') do |code|
46
+ fretboard = Fretboard::Builder.new(code.to_sym)
47
+ fretboard.build
48
+ fretboard.draw
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,753 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Fretboard
4
+ class Tunings
5
+ # Fretboard::Tunings.get(:standart)
6
+ # Fretboard::Tunings.exists?(:standart)
7
+
8
+ TUNINGS = {
9
+ STANDART: {
10
+ STRINGS: {
11
+ 1 => {
12
+ NOTE: 'E'
13
+ },
14
+ 2 => {
15
+ NOTE: 'B'
16
+ },
17
+ 3 => {
18
+ NOTE: 'G'
19
+ },
20
+ 4 => {
21
+ NOTE: 'D'
22
+ },
23
+ 5 => {
24
+ NOTE: 'A'
25
+ },
26
+ 6 => {
27
+ NOTE: 'E'
28
+ }
29
+ }
30
+ },
31
+
32
+ TUNING_A: {
33
+ STRINGS: {
34
+ 1 => {
35
+ NOTE: 'A'
36
+ },
37
+ 2 => {
38
+ NOTE: 'E'
39
+ },
40
+ 3 => {
41
+ NOTE: 'C'
42
+ },
43
+ 4 => {
44
+ NOTE: 'G'
45
+ },
46
+ 5 => {
47
+ NOTE: 'D'
48
+ },
49
+ 6 => {
50
+ NOTE: 'A'
51
+ }
52
+ }
53
+ },
54
+
55
+ OPEN_A: {
56
+ STRINGS: {
57
+ 1 => {
58
+ NOTE: 'E'
59
+ },
60
+ 2 => {
61
+ NOTE: 'A'
62
+ },
63
+ 3 => {
64
+ NOTE: 'E'
65
+ },
66
+ 4 => {
67
+ NOTE: [
68
+ 'C#',
69
+ 'Db'
70
+ ]
71
+ },
72
+ 5 => {
73
+ NOTE: 'A'
74
+ },
75
+ 6 => {
76
+ NOTE: 'E'
77
+ }
78
+ }
79
+ },
80
+
81
+ DROP_A: {
82
+ STRINGS: {
83
+ 1 => {
84
+ NOTE: 'B'
85
+ },
86
+ 2 => {
87
+ NOTE: [
88
+ 'F#',
89
+ 'Gb'
90
+ ]
91
+ },
92
+ 3 => {
93
+ NOTE: 'D'
94
+ },
95
+ 4 => {
96
+ NOTE: 'A'
97
+ },
98
+ 5 => {
99
+ NOTE: 'E'
100
+ },
101
+ 6 => {
102
+ NOTE: 'A'
103
+ }
104
+ }
105
+ },
106
+
107
+ DROP_A_SHARP: {
108
+ STRINGS: {
109
+ 1 => {
110
+ NOTE: 'C'
111
+ },
112
+ 2 => {
113
+ NOTE: 'G'
114
+ },
115
+ 3 => {
116
+ NOTE: [
117
+ 'D#',
118
+ 'Eb'
119
+ ]
120
+ },
121
+ 4 => {
122
+ NOTE: [
123
+ 'A#',
124
+ 'Bb'
125
+ ]
126
+ },
127
+ 5 => {
128
+ NOTE: 'F'
129
+ },
130
+ 6 => {
131
+ NOTE: [
132
+ 'A#',
133
+ 'Bb'
134
+ ]
135
+ }
136
+ }
137
+ },
138
+
139
+ DROP_A_FLAT: {
140
+ STRINGS: {
141
+ 1 => {
142
+ NOTE: [
143
+ 'A#',
144
+ 'Bb'
145
+ ]
146
+ },
147
+ 2 => {
148
+ NOTE: 'F'
149
+ },
150
+ 3 => {
151
+ NOTE: [
152
+ 'C#',
153
+ 'Db'
154
+ ]
155
+ },
156
+ 4 => {
157
+ NOTE: [
158
+ 'G#',
159
+ 'Ab'
160
+ ]
161
+ },
162
+ 5 => {
163
+ NOTE: [
164
+ 'D#',
165
+ 'Eb'
166
+ ]
167
+ },
168
+ 6 => {
169
+ NOTE: [
170
+ 'G#',
171
+ 'Ab'
172
+ ]
173
+ }
174
+ }
175
+ },
176
+
177
+ TUNING_B: {
178
+ STRINGS: {
179
+ 1 => {
180
+ NOTE: 'B'
181
+ },
182
+ 2 => {
183
+ NOTE: [
184
+ 'F#',
185
+ 'Gb'
186
+ ]
187
+ },
188
+ 3 => {
189
+ NOTE: 'D'
190
+ },
191
+ 4 => {
192
+ NOTE: 'A'
193
+ },
194
+ 5 => {
195
+ NOTE: 'E'
196
+ },
197
+ 6 => {
198
+ NOTE: 'B'
199
+ }
200
+ }
201
+ },
202
+
203
+ OPEN_B: {
204
+ STRINGS: {
205
+ 1 => {
206
+ NOTE: [
207
+ 'D#',
208
+ 'Eb'
209
+ ]
210
+ },
211
+ 2 => {
212
+ NOTE: 'B'
213
+ },
214
+ 3 => {
215
+ NOTE: [
216
+ 'F#',
217
+ 'Gb'
218
+ ]
219
+ },
220
+ 4 => {
221
+ NOTE: 'B'
222
+ },
223
+ 5 => {
224
+ NOTE: [
225
+ 'F#',
226
+ 'Gb'
227
+ ]
228
+ },
229
+ 6 => {
230
+ NOTE: 'B'
231
+ }
232
+ }
233
+ },
234
+
235
+ DROP_B: {
236
+ STRINGS: {
237
+ 1 => {
238
+ NOTE: [
239
+ 'C#',
240
+ 'Db'
241
+ ]
242
+ },
243
+ 2 => {
244
+ NOTE: [
245
+ 'G#',
246
+ 'Ab'
247
+ ]
248
+ },
249
+ 3 => {
250
+ NOTE: 'E'
251
+ },
252
+ 4 => {
253
+ NOTE: 'B'
254
+ },
255
+ 5 => {
256
+ NOTE: [
257
+ 'F#',
258
+ 'Gb'
259
+ ]
260
+ },
261
+ 6 => {
262
+ NOTE: 'B'
263
+ }
264
+ }
265
+ },
266
+
267
+ DROP_B_FLAT: {
268
+ STRINGS: {
269
+ 1 => {
270
+ NOTE: 'C'
271
+ },
272
+ 2 => {
273
+ NOTE: 'G'
274
+ },
275
+ 3 => {
276
+ NOTE: [
277
+ 'D#',
278
+ 'Eb'
279
+ ]
280
+ },
281
+ 4 => {
282
+ NOTE: [
283
+ 'A#',
284
+ 'Bb'
285
+ ]
286
+ },
287
+ 5 => {
288
+ NOTE: 'F'
289
+ },
290
+ 6 => {
291
+ NOTE: [
292
+ 'A#',
293
+ 'Bb'
294
+ ]
295
+ }
296
+ }
297
+ },
298
+
299
+ TUNING_C: {
300
+ STRINGS: {
301
+ 1 => {
302
+ NOTE: 'C'
303
+ },
304
+ 2 => {
305
+ NOTE: 'G'
306
+ },
307
+ 3 => {
308
+ NOTE: [
309
+ 'D#',
310
+ 'Eb'
311
+ ]
312
+ },
313
+ 4 => {
314
+ NOTE: [
315
+ 'A#',
316
+ 'Bb'
317
+ ]
318
+ },
319
+ 5 => {
320
+ NOTE: 'F'
321
+ },
322
+ 6 => {
323
+ NOTE: 'C'
324
+ }
325
+ }
326
+ },
327
+
328
+ OPEN_C: {
329
+ STRINGS: {
330
+ 1 => {
331
+ NOTE: 'E'
332
+ },
333
+ 2 => {
334
+ NOTE: 'C'
335
+ },
336
+ 3 => {
337
+ NOTE: 'G'
338
+ },
339
+ 4 => {
340
+ NOTE: 'C'
341
+ },
342
+ 5 => {
343
+ NOTE: 'G'
344
+ },
345
+ 6 => {
346
+ NOTE: 'C'
347
+ }
348
+ }
349
+ },
350
+
351
+ DROP_C: {
352
+ STRINGS: {
353
+ 1 => {
354
+ NOTE: 'D'
355
+ },
356
+ 2 => {
357
+ NOTE: 'A'
358
+ },
359
+ 3 => {
360
+ NOTE: 'F'
361
+ },
362
+ 4 => {
363
+ NOTE: 'C'
364
+ },
365
+ 5 => {
366
+ NOTE: 'G'
367
+ },
368
+ 6 => {
369
+ NOTE: 'C'
370
+ }
371
+ }
372
+ },
373
+
374
+ TUNING_D: {
375
+ STRINGS: {
376
+ 1 => {
377
+ NOTE: 'D'
378
+ },
379
+ 2 => {
380
+ NOTE: 'A'
381
+ },
382
+ 3 => {
383
+ NOTE: 'F'
384
+ },
385
+ 4 => {
386
+ NOTE: 'C'
387
+ },
388
+ 5 => {
389
+ NOTE: 'G'
390
+ },
391
+ 6 => {
392
+ NOTE: 'D'
393
+ }
394
+ }
395
+ },
396
+
397
+ OPEN_D: {
398
+ STRINGS: {
399
+ 1 => {
400
+ NOTE: 'D'
401
+ },
402
+ 2 => {
403
+ NOTE: 'A'
404
+ },
405
+ 3 => {
406
+ NOTE: [
407
+ 'F#',
408
+ 'Gb'
409
+ ]
410
+ },
411
+ 4 => {
412
+ NOTE: 'D'
413
+ },
414
+ 5 => {
415
+ NOTE: 'A'
416
+ },
417
+ 6 => {
418
+ NOTE: 'D'
419
+ }
420
+ }
421
+ },
422
+
423
+ OPEN_D_MINOR: {
424
+ STRINGS: {
425
+ 1 => {
426
+ NOTE: 'D'
427
+ },
428
+ 2 => {
429
+ NOTE: 'A'
430
+ },
431
+ 3 => {
432
+ NOTE: 'F'
433
+ },
434
+ 4 => {
435
+ NOTE: 'D'
436
+ },
437
+ 5 => {
438
+ NOTE: 'A'
439
+ },
440
+ 6 => {
441
+ NOTE: 'D'
442
+ }
443
+ }
444
+ },
445
+
446
+ DROP_D: {
447
+ STRINGS: {
448
+ 1 => {
449
+ NOTE: 'E'
450
+ },
451
+ 2 => {
452
+ NOTE: 'B'
453
+ },
454
+ 3 => {
455
+ NOTE: 'G'
456
+ },
457
+ 4 => {
458
+ NOTE: 'D'
459
+ },
460
+ 5 => {
461
+ NOTE: 'A'
462
+ },
463
+ 6 => {
464
+ NOTE: 'D'
465
+ }
466
+ }
467
+ },
468
+
469
+ DOUBLE_DROP_D: {
470
+ STRINGS: {
471
+ 1 => {
472
+ NOTE: 'D'
473
+ },
474
+ 2 => {
475
+ NOTE: 'B'
476
+ },
477
+ 3 => {
478
+ NOTE: 'G'
479
+ },
480
+ 4 => {
481
+ NOTE: 'D'
482
+ },
483
+ 5 => {
484
+ NOTE: 'A'
485
+ },
486
+ 6 => {
487
+ NOTE: 'D'
488
+ }
489
+ }
490
+ },
491
+
492
+ MODAL_D: {
493
+ STRINGS: {
494
+ 1 => {
495
+ NOTE: 'D'
496
+ },
497
+ 2 => {
498
+ NOTE: 'A'
499
+ },
500
+ 3 => {
501
+ NOTE: 'G'
502
+ },
503
+ 4 => {
504
+ NOTE: 'D'
505
+ },
506
+ 5 => {
507
+ NOTE: 'A'
508
+ },
509
+ 6 => {
510
+ NOTE: 'D'
511
+ }
512
+ }
513
+ },
514
+
515
+ OPEN_E: {
516
+ STRINGS: {
517
+ 1 => {
518
+ NOTE: 'E'
519
+ },
520
+ 2 => {
521
+ NOTE: 'B'
522
+ },
523
+ 3 => {
524
+ NOTE: [
525
+ 'G#',
526
+ 'Ab'
527
+ ]
528
+ },
529
+ 4 => {
530
+ NOTE: 'E'
531
+ },
532
+ 5 => {
533
+ NOTE: 'B'
534
+ },
535
+ 6 => {
536
+ NOTE: 'E'
537
+ }
538
+ }
539
+ },
540
+
541
+ TUNING_F: {
542
+ STRINGS: {
543
+ 1 => {
544
+ NOTE: 'F'
545
+ },
546
+ 2 => {
547
+ NOTE: 'C'
548
+ },
549
+ 3 => {
550
+ NOTE: [
551
+ 'G#',
552
+ 'Ab'
553
+ ]
554
+ },
555
+ 4 => {
556
+ NOTE: [
557
+ 'D#',
558
+ 'Eb'
559
+ ]
560
+ },
561
+ 5 => {
562
+ NOTE: [
563
+ 'A#',
564
+ 'Bb'
565
+ ]
566
+ },
567
+ 6 => {
568
+ NOTE: 'F'
569
+ }
570
+ }
571
+ },
572
+
573
+ TUNING_G: {
574
+ STRINGS: {
575
+ 1 => {
576
+ NOTE: 'G'
577
+ },
578
+ 2 => {
579
+ NOTE: 'D'
580
+ },
581
+ 3 => {
582
+ NOTE: [
583
+ 'A#',
584
+ 'Bb'
585
+ ]
586
+ },
587
+ 4 => {
588
+ NOTE: 'F'
589
+ },
590
+ 5 => {
591
+ NOTE: 'C'
592
+ },
593
+ 6 => {
594
+ NOTE: 'G'
595
+ }
596
+ }
597
+ },
598
+
599
+ OPEN_F: {
600
+ STRINGS: {
601
+ 1 => {
602
+ NOTE: 'F'
603
+ },
604
+ 2 => {
605
+ NOTE: 'C'
606
+ },
607
+ 3 => {
608
+ NOTE: 'F'
609
+ },
610
+ 4 => {
611
+ NOTE: 'C'
612
+ },
613
+ 5 => {
614
+ NOTE: 'A'
615
+ },
616
+ 6 => {
617
+ NOTE: 'F'
618
+ }
619
+ }
620
+ },
621
+
622
+ OPEN_G: {
623
+ STRINGS: {
624
+ 1 => {
625
+ NOTE: 'D'
626
+ },
627
+ 2 => {
628
+ NOTE: 'B'
629
+ },
630
+ 3 => {
631
+ NOTE: 'G'
632
+ },
633
+ 4 => {
634
+ NOTE: 'D'
635
+ },
636
+ 5 => {
637
+ NOTE: 'G'
638
+ },
639
+ 6 => {
640
+ NOTE: 'D'
641
+ }
642
+ }
643
+ },
644
+
645
+ OPEN_G_MINOR: {
646
+ STRINGS: {
647
+ 1 => {
648
+ NOTE: 'D'
649
+ },
650
+ 2 => {
651
+ NOTE: [
652
+ 'A#',
653
+ 'Bb'
654
+ ]
655
+ },
656
+ 3 => {
657
+ NOTE: 'G'
658
+ },
659
+ 4 => {
660
+ NOTE: 'D'
661
+ },
662
+ 5 => {
663
+ NOTE: 'G'
664
+ },
665
+ 6 => {
666
+ NOTE: 'D'
667
+ }
668
+ }
669
+ },
670
+
671
+ DROP_G_SHARP: {
672
+ STRINGS: {
673
+ 1 => {
674
+ NOTE: [
675
+ 'A#',
676
+ 'Bb'
677
+ ]
678
+ },
679
+ 2 => {
680
+ NOTE: 'F'
681
+ },
682
+ 3 => {
683
+ NOTE: [
684
+ 'C#',
685
+ 'Db'
686
+ ]
687
+ },
688
+ 4 => {
689
+ NOTE: [
690
+ 'G#',
691
+ 'Ab'
692
+ ]
693
+ },
694
+ 5 => {
695
+ NOTE: [
696
+ 'D#',
697
+ 'Eb'
698
+ ]
699
+ },
700
+ 6 => {
701
+ NOTE: [
702
+ 'G#',
703
+ 'Ab'
704
+ ]
705
+ }
706
+ }
707
+ },
708
+
709
+ MODAL_G: {
710
+ STRINGS: {
711
+ 1 => {
712
+ NOTE: 'D'
713
+ },
714
+ 2 => {
715
+ NOTE: 'C'
716
+ },
717
+ 3 => {
718
+ NOTE: 'G'
719
+ },
720
+ 4 => {
721
+ NOTE: 'D'
722
+ },
723
+ 5 => {
724
+ NOTE: 'G'
725
+ },
726
+ 6 => {
727
+ NOTE: 'D'
728
+ }
729
+ }
730
+ }
731
+ }.freeze
732
+
733
+ def self.get(tuning_name)
734
+ new(tuning_name).get
735
+ end
736
+
737
+ def self.exists?(tuning_name)
738
+ new(tuning_name).exists?
739
+ end
740
+
741
+ def initialize(tuning_name)
742
+ @tuning_name = tuning_name.upcase.to_sym
743
+ end
744
+
745
+ def get
746
+ TUNINGS[@tuning_name]
747
+ end
748
+
749
+ def exists?
750
+ TUNINGS.key?(@tuning_name)
751
+ end
752
+ end
753
+ end