Class: HeadMusic::Instruments::StringingCourse

Inherits:
Object
  • Object
show all
Includes:
ValueEquality
Defined in:
lib/head_music/instruments/stringing_course.rb

Overview

A single course (string or set of strings) on a stringed instrument.

A “course” is a set of strings that are played together. On most guitars, each course has a single string. On a 12-string guitar or mandolin, courses have multiple strings tuned in unison or octaves.

Examples: - 6-string guitar: 6 courses, each with 1 string - 12-string guitar: 6 courses, each with 2 strings (octave or unison) - Mandolin: 4 courses, each with 2 strings in unison

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(standard_pitch:, course_semitones: []) ⇒ StringingCourse

Returns a new instance of StringingCourse.

Parameters:

  • standard_pitch (HeadMusic::Rudiment::Pitch, String)

    The pitch of the primary string

  • course_semitones (Array<Integer>) (defaults to: [])

    Semitone offsets for additional strings in the course



22
23
24
25
# File 'lib/head_music/instruments/stringing_course.rb', line 22

def initialize(standard_pitch:, course_semitones: [])
  @standard_pitch = HeadMusic::Rudiment::Pitch.get(standard_pitch)
  @course_semitones = Array(course_semitones)
end

Instance Attribute Details

#course_semitonesObject (readonly)

Returns the value of attribute course_semitones.



16
17
18
# File 'lib/head_music/instruments/stringing_course.rb', line 16

def course_semitones
  @course_semitones
end

#standard_pitchObject (readonly)

Returns the value of attribute standard_pitch.



16
17
18
# File 'lib/head_music/instruments/stringing_course.rb', line 16

def standard_pitch
  @standard_pitch
end

Instance Method Details

#==(other) ⇒ Object Originally defined in module ValueEquality

#additional_pitchesObject (private)



51
52
53
54
55
# File 'lib/head_music/instruments/stringing_course.rb', line 51

def additional_pitches
  course_semitones.map do |semitones|
    HeadMusic::Rudiment::Pitch.from_number(standard_pitch.to_i + semitones)
  end
end

#doubled?Boolean

Whether this course has multiple strings

Returns:

  • (Boolean)


41
42
43
# File 'lib/head_music/instruments/stringing_course.rb', line 41

def doubled?
  course_semitones.any?
end

#pitchesArray<HeadMusic::Rudiment::Pitch>

Returns all pitches in this course (primary + additional strings)

Returns:



29
30
31
# File 'lib/head_music/instruments/stringing_course.rb', line 29

def pitches
  [standard_pitch] + additional_pitches
end

#string_countInteger

Returns the number of physical strings in this course

Returns:

  • (Integer)


35
36
37
# File 'lib/head_music/instruments/stringing_course.rb', line 35

def string_count
  1 + course_semitones.length
end

#to_sObject



45
46
47
# File 'lib/head_music/instruments/stringing_course.rb', line 45

def to_s
  standard_pitch.to_s
end