Class: Coltrane::Renderers::TextRenderer::RepresentationGuitarNoteSetDrawer

Inherits:
BaseDrawer
  • Object
show all
Defined in:
lib/coltrane/renderers/text_renderer/representation_guitar_note_set_drawer.rb

Instance Attribute Summary

Attributes inherited from BaseDrawer

#flavor, #layout, #model, #options, #per_row

Instance Method Summary collapse

Methods inherited from BaseDrawer

#initialize

Constructor Details

This class inherits a constructor from Coltrane::Renderers::TextRenderer::BaseDrawer

Instance Method Details

#fretsObject



11
12
13
# File 'lib/coltrane/renderers/text_renderer/representation_guitar_note_set_drawer.rb', line 11

def frets
  guitar.frets
end

#guitarObject



7
8
9
# File 'lib/coltrane/renderers/text_renderer/representation_guitar_note_set_drawer.rb', line 7

def guitar
  @guitar ||= guitar_notes.guitar
end

#place_empty(str_i) ⇒ Object



53
54
55
# File 'lib/coltrane/renderers/text_renderer/representation_guitar_note_set_drawer.rb', line 53

def place_empty(str_i)
  Paint['--', HSL.new(180 + str_i * 3, 50, 30).html]
end

#place_mark(note) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/coltrane/renderers/text_renderer/representation_guitar_note_set_drawer.rb', line 57

def place_mark(note)
  mark = case flavor
         when :notes     then note.pretty_name.ljust(2, ' ')
         when :intervals then (guitar_notes.root - note).name.ljust(2, '-')
         when :degrees   then guitar_notes.notes.degree(note).to_s.rjust(2, '0')
         when :marks     then '  ' # '◼◼'
         else raise WrongFlavorError
         end

  base_hue = (180 + note.integer * 10) % 360 # + 260
  Paint[
    mark,
    HSL.new(0, 0, 100).html,
    HSL.new(base_hue, 100, 30).html
  ]
end

#renderObject



15
16
17
# File 'lib/coltrane/renderers/text_renderer/representation_guitar_note_set_drawer.rb', line 15

def render
  [render_notes, render_special_frets].join("\n" * 2)
end

#render_notesObject



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
# File 'lib/coltrane/renderers/text_renderer/representation_guitar_note_set_drawer.rb', line 19

def render_notes
  guitar_notes.strings.map.with_index.map do |string, str_i|
    Array.new(frets + 2) do |i|
      if i.zero?
        Paint[
          string[:pitch].pitch_class.name,
          HSL.new(140 + str_i * 20, 50, 50).html
        ]
      else
        (i - 1)
        .yield_self { |fret|
          (string[:pitch] + fret)
          .yield_self { |pitch|
            if guitar_notes.notes.include?(pitch.pitch_class)
              place_mark(pitch.pitch_class)
            else
              place_empty(str_i)
            end
          }
          .yield_self { |mark| mark + (fret.zero? ? (' |') : '') }
        }
      end
    end.join(' ')
  end.join("\n")
end

#render_special_fretsObject



45
46
47
48
49
50
51
# File 'lib/coltrane/renderers/text_renderer/representation_guitar_note_set_drawer.rb', line 45

def render_special_frets
  '  ' +
    Array.new(frets + 2) do |fret|
      m = guitar.special_frets.include?(fret) ? fret.to_s.rjust(2, 0.to_s) : '  '
      "#{m}#{'  ' if fret.zero?}"
    end.join(' ')
end