class HeadMusic::ReferencePitch

A reference pitch has a pitch and a frequency With no arguments, it assumes that A4 = 440.0 Hz

Constants

DEFAULT_FREQUENCY
DEFAULT_PITCH_NAME
DEFAULT_REFERENCE_PITCH_NAME
NAMED_REFERENCE_PITCHES

Attributes

frequency[R]
pitch[R]

Public Class Methods

get(name) click to toggle source
# File lib/head_music/reference_pitch.rb, line 79
def self.get(name)
  return name if name.is_a?(self)
  get_by_name(name)
end
new(name = DEFAULT_REFERENCE_PITCH_NAME) click to toggle source
# File lib/head_music/reference_pitch.rb, line 84
def initialize(name = DEFAULT_REFERENCE_PITCH_NAME)
  record = named_reference_pitch_record_for_name(name)
  @pitch = HeadMusic::Pitch.get(record.fetch(:pitch, DEFAULT_PITCH_NAME))
  @frequency = record.fetch(:frequency, DEFAULT_FREQUENCY)
  initialize_keys_from_record(record)
end

Public Instance Methods

description() click to toggle source
# File lib/head_music/reference_pitch.rb, line 91
def description
  [
    pitch.letter_name,
    format(
      '%<with_digits>g',
      with_digits: format('%.2<frequency>f', frequency: frequency)
    ),
  ].join('=')
end
to_s() click to toggle source
# File lib/head_music/reference_pitch.rb, line 101
def to_s
  description
end

Private Instance Methods

initialize_keys_from_record(record) click to toggle source
# File lib/head_music/reference_pitch.rb, line 127
def initialize_keys_from_record(record)
  @key = record[:key]
  @alias_keys = [record[:alias_keys]].flatten.compact
end
name_and_alias_translations_for_keys(name_keys) click to toggle source
# File lib/head_music/reference_pitch.rb, line 138
def name_and_alias_translations_for_keys(name_keys)
  name_keys.map do |name_key|
    I18n.config.available_locales.map do |locale_code|
      I18n.translate(name_key, scope: :reference_pitches, locale: locale_code)
    end.flatten.uniq.compact
  end.flatten.uniq.compact
end
name_keys_from_record(record) click to toggle source
# File lib/head_music/reference_pitch.rb, line 114
def name_keys_from_record(record)
  names_from_record(record).map { |name| HeadMusic::Utilities::HashKey.for(name) }
end
named_reference_pitch_record_for_name(name) click to toggle source
# File lib/head_music/reference_pitch.rb, line 107
def named_reference_pitch_record_for_name(name)
  key = HeadMusic::Utilities::HashKey.for(normalized_name_string(name))
  NAMED_REFERENCE_PITCHES.detect do |record|
    name_keys_from_record(record).include?(key)
  end || named_reference_pitch_record_for_name(DEFAULT_REFERENCE_PITCH_NAME)
end
names_from_record(record) click to toggle source
# File lib/head_music/reference_pitch.rb, line 118
def names_from_record(record)
  name_keys = ([record[:key]] + [record[:alias_keys]]).flatten.compact.uniq
  normalized_translations_for_keys(name_keys)
end
normalized_name_string(name) click to toggle source
# File lib/head_music/reference_pitch.rb, line 123
def normalized_name_string(name)
  name.gsub(' pitch', '').gsub(' tone', '').gsub(' tuning', '')
end
normalized_translations_for_keys(name_keys) click to toggle source
# File lib/head_music/reference_pitch.rb, line 132
def normalized_translations_for_keys(name_keys)
  name_and_alias_translations_for_keys(name_keys).map do |name|
    normalized_name_string(name)
  end
end