class HeadMusic::RhythmicUnit

A rhythmic unit is a rudiment of duration consisting of doublings and divisions of a whole note.

Constants

BRITISH_DIVISION_NAMES
BRITISH_MULTIPLE_NAMES
FRACTIONS
MULTIPLES

Attributes

denominator[R]
numerator[R]

Public Class Methods

for_denominator_value(denominator) click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 19
def self.for_denominator_value(denominator)
  get(FRACTIONS[Math.log2(denominator).to_i])
end
get(name) click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 25
def self.get(name)
  get_by_name(name)
end

Private Class Methods

new(canonical_name) click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 29
def initialize(canonical_name)
  self.name = canonical_name
  @numerator = 2**numerator_exponent
  @denominator = 2**denominator_exponent
end

Public Instance Methods

british_name() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 60
def british_name
  if multiple?
    BRITISH_MULTIPLE_NAMES[MULTIPLES.index(name)]
  elsif fraction?
    BRITISH_DIVISION_NAMES[FRACTIONS.index(name)]
  elsif BRITISH_MULTIPLE_NAMES.include?(name) || BRITISH_DIVISION_NAMES.include?(name)
    name
  end
end
flags() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 52
def flags
  FRACTIONS.include?(name) ? [FRACTIONS.index(name) - 2, 0].max : 0
end
notehead() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 43
def notehead
  return :maxima if relative_value == 8
  return :longa if relative_value == 4
  return :breve if relative_value == 2
  return :open if [0.5, 1].include? relative_value

  :closed
end
relative_value() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 35
def relative_value
  @numerator.to_f / @denominator
end
stemmed?() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 56
def stemmed?
  relative_value < 1
end
ticks() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 39
def ticks
  HeadMusic::Rhythm::PPQN * 4 * relative_value
end

Private Instance Methods

british_fractions_keys() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 102
def british_fractions_keys
  BRITISH_DIVISION_NAMES.map { |fraction| fraction.gsub(/\W+/, '_') }
end
british_multiples_keys() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 90
def british_multiples_keys
  BRITISH_MULTIPLE_NAMES.map { |multiple| multiple.gsub(/\W+/, '_') }
end
denominator_exponent() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 94
def denominator_exponent
  fractions_keys.index(name.gsub(/\W+/, '_')) || british_fractions_keys.index(name.gsub(/\W+/, '_')) || 0
end
fraction?() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 78
def fraction?
  FRACTIONS.include?(name)
end
fractions_keys() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 98
def fractions_keys
  FRACTIONS.map { |fraction| fraction.gsub(/\W+/, '_') }
end
multiple?() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 74
def multiple?
  MULTIPLES.include?(name)
end
multiples_keys() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 86
def multiples_keys
  MULTIPLES.map { |multiple| multiple.gsub(/\W+/, '_') }
end
numerator_exponent() click to toggle source
# File lib/head_music/rhythmic_unit.rb, line 82
def numerator_exponent
  multiples_keys.index(name.gsub(/\W+/, '_')) || british_multiples_keys.index(name.gsub(/\W+/, '_')) || 0
end