Sha256: 6bbb82db18fbda25c7965082f420a6921fd41c2b8a36e73f33e67cb683e55fac

Contents?: true

Size: 1.24 KB

Versions: 1

Compression:

Stored size: 1.24 KB

Contents

module Coltrane
  # It describes a guitar string
  class GuitarString
    attr_reader :pitch

    def initialize(pitch)
      @pitch = Pitch.new(pitch)
    end

    def fret_by_pitch(pitch)
      pitch = Pitch.new(pitch) if pitch.class != Pitch
      fret = pitch.number - @pitch.number
      fret if fret >= 0
    end

    def pitch_by_fret(fret)
      Pitch.new(pitch.number + fret)
    end

    def guitar_notes_for_note(note)
      pitches_for_note(note).map do |pitch|
        GuitarNote.new(fret: fret_by_pitch(pitch),
                       guitar_string_index: index)
      end
    end

    def guitar_notes_for_note_in_region(note, region)
      pitches_for_note(note).each_with_object([]) do |pitch, memo|
        fret = fret_by_pitch(pitch)
        if region.include?(fret) || fret == 0
          memo << GuitarNote.new(fret: fret, guitar_string_index: index)
        end
      end
    end

    def index
      Guitar.strings.index { |string| string.pitch.number == self.pitch.number }
    end

    def pitches_for_note(note)
      pitches.each_with_object([]) do |pitch, memo|
        memo << pitch if pitch.note.name == note.name
      end
    end

    def pitches
      Guitar.frets.times.map do |fret|
        pitch_by_fret(fret)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
coltrane-0.0.2 lib/coltrane/guitar_string.rb