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