Class: Chordy::Chord
- Inherits:
-
Object
- Object
- Chordy::Chord
- Defined in:
- lib/chordy/chord.rb
Constant Summary collapse
- CHORD_FLAGS =
%w(mute harmonic bend pull hammer_down slide_down slide_up dont_play vibrato)
Class Method Summary collapse
- .all_flags ⇒ Object
- .end_of_strings(tuning, end_delimiter) ⇒ Object
-
.get_num_high_strings(length) ⇒ Object
gets number of high strings in a tuning by approximation.
- .print_half_length_string_at(string_pos, tuning, half_length_delimiter, chord_space) ⇒ Object
- .short_chords ⇒ Object
- .start_of_strings(tuning, start_delimiter, low_to_high) ⇒ Object
Instance Method Summary collapse
- #add_flag(flag) ⇒ Object
- #flags ⇒ Object
- #get_index_to_print(i, low_to_high) ⇒ Object
- #has_flag(flag) ⇒ Object
-
#initialize(chord, strings) ⇒ Chord
constructor
A new instance of Chord.
- #pad_or_trim(length, pad_low) ⇒ Object
- #play(chord_type) ⇒ Object
-
#print_flag ⇒ Object
for printing flags on diff line.
- #print_string_at(i, chord_space, low_to_high = false) ⇒ Object
- #print_string_with_flag_at(i, printed_string, chord_space) ⇒ Object
- #reverse_strings! ⇒ Object
- #strings ⇒ Object
Constructor Details
#initialize(chord, strings) ⇒ Chord
Returns a new instance of Chord.
73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/chordy/chord.rb', line 73 def initialize chord, strings @strings = [-1] * strings pad_low = false if chord.instance_of? String or chord.instance_of? Symbol short_chords = Chord.short_chords if short_chords.key? chord chord_strings = play short_chords[chord] @type = short_chords[chord] else chord_strings = play chord.to_sym @type = chord.to_sym end pad_low = true elsif chord.instance_of? Array chord_strings = chord.to_a end @strings = chord_strings pad_or_trim strings, pad_low @flags = 0 end |
Class Method Details
.all_flags ⇒ Object
6 7 8 |
# File 'lib/chordy/chord.rb', line 6 def self.all_flags CHORD_FLAGS.to_a end |
.end_of_strings(tuning, end_delimiter) ⇒ Object
32 33 34 35 |
# File 'lib/chordy/chord.rb', line 32 def self.end_of_strings tuning, end_delimiter num_strings = tuning.length ([ end_delimiter ] * num_strings) + [ "" ] end |
.get_num_high_strings(length) ⇒ Object
gets number of high strings in a tuning by approximation
11 12 13 |
# File 'lib/chordy/chord.rb', line 11 def self.get_num_high_strings length (length / 3.0).ceil end |
.print_half_length_string_at(string_pos, tuning, half_length_delimiter, chord_space) ⇒ Object
37 38 39 40 41 42 43 |
# File 'lib/chordy/chord.rb', line 37 def self.print_half_length_string_at string_pos, tuning, half_length_delimiter, chord_space if string_pos == tuning.length "".rjust(2) else half_length_delimiter.rjust(2, chord_space) end end |
.short_chords ⇒ Object
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 |
# File 'lib/chordy/chord.rb', line 45 def self.short_chords { :M => :major, :m => :minor, :_7 => :dominant_7, :_7_5 => :dominant_7_5, :_9 => :diminished_9, :M6 => :major_6, :M7 => :major_7, :M9 => :major_9, :m5 => :diminished_5, :m6 => :minor_6, :m7 => :minor_7, :m7_5 => :half_diminished_7, :mM7 => :minor_major_7, :aug5 => :augmented_5, :aug7 => :augmented_7, :aug7_5 => :augmented_major_7, :dim => :diminished_7, :dim7 => :diminished_7, :dim5 => :diminished_5, :dim9 => :diminished_9, :sus => :suspended_4, :sus4 => :suspended_4, :sus7 => :suspended_7, } end |
.start_of_strings(tuning, start_delimiter, low_to_high) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/chordy/chord.rb', line 15 def self.start_of_strings tuning, start_delimiter, low_to_high num_strings = tuning.length num_high_strings = get_num_high_strings num_strings strings_in_downcase = tuning.map { |s| s.downcase } high_strings = strings_in_downcase.last(num_high_strings) low_strings = strings_in_downcase.first(num_strings - num_high_strings).map { |s| s.capitalize } strings_range = low_strings + high_strings if !low_to_high strings_range = strings_range.reverse end strings_to_print = strings_range.map { |s| s.rjust(2) + start_delimiter.rjust(2) } strings_to_print + [ " " * 4 ] end |
Instance Method Details
#add_flag(flag) ⇒ Object
142 143 144 145 |
# File 'lib/chordy/chord.rb', line 142 def add_flag flag @flags = @flags | flag self end |
#flags ⇒ Object
134 135 136 |
# File 'lib/chordy/chord.rb', line 134 def flags @flags end |
#get_index_to_print(i, low_to_high) ⇒ Object
147 148 149 150 151 152 153 |
# File 'lib/chordy/chord.rb', line 147 def get_index_to_print i, low_to_high if low_to_high i else @strings.length - i - 1 end end |
#has_flag(flag) ⇒ Object
138 139 140 |
# File 'lib/chordy/chord.rb', line 138 def has_flag flag (@flags & flag) == flag end |
#pad_or_trim(length, pad_low) ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/chordy/chord.rb', line 95 def pad_or_trim length, pad_low if @strings.length > length @strings = @strings.last length elsif @strings.length < length diff = length - @strings.length if pad_low first = @strings.first min = @strings.min # play as bar chord = ((first == min) and (min > 0) and (first > 0)) ? first : -1 @strings = ([] * diff) + @strings else @strings = @strings + [-1] * diff end self end end |
#play(chord_type) ⇒ Object
115 116 117 118 119 120 121 122 123 |
# File 'lib/chordy/chord.rb', line 115 def play chord_type method_for_chord_type = "play_" + chord_type.to_s chord = eval(method_for_chord_type) if chord.length > @strings.length chord = chord.last @strings.length end chord end |
#print_flag ⇒ Object
for printing flags on diff line
198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/chordy/chord.rb', line 198 def print_flag to_print = "" if has_flag MUTE to_print = "M" elsif has_flag HARMONIC to_print = "H" end to_print.rjust(3).ljust(4) end |
#print_string_at(i, chord_space, low_to_high = false) ⇒ Object
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/chordy/chord.rb', line 155 def print_string_at i, chord_space, low_to_high=false to_print = chord_space index_to_print = get_index_to_print i, low_to_high string = @strings[index_to_print] if string != -1 to_print = string.to_s end to_print = to_print.rjust(3, chord_space) if @flags != 0 to_print = print_string_with_flag_at index_to_print, to_print, chord_space end to_print.ljust(4, chord_space) end |
#print_string_with_flag_at(i, printed_string, chord_space) ⇒ Object
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
# File 'lib/chordy/chord.rb', line 172 def print_string_with_flag_at i, printed_string, chord_space to_print = printed_string string = @strings[i] if string != -1 if has_flag DONT_PLAY to_print = "x".rjust(3, chord_space) elsif has_flag BEND to_print = to_print + "b" elsif has_flag HAMMER_DOWN to_print = to_print + "h" elsif has_flag PULL to_print = to_print + "p" elsif has_flag SLIDE_UP to_print = to_print + "/" elsif has_flag SLIDE_DOWN to_print = to_print + "\\" elsif has_flag VIBRATO to_print = to_print + "~" end end to_print end |
#reverse_strings! ⇒ Object
125 126 127 128 |
# File 'lib/chordy/chord.rb', line 125 def reverse_strings! @strings = @strings.reverse self end |
#strings ⇒ Object
130 131 132 |
# File 'lib/chordy/chord.rb', line 130 def strings @strings end |