fretboard 1.0.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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