class MusicalScore::Attribute::Key
Attributes
fifths[R]
mode[R]
Public Class Methods
create_by_hash(doc)
click to toggle source
# File lib/musical_score/attribute/key.rb, line 63 def self.create_by_hash(doc) fifths = doc["fifths"][0].to_i mode = doc["mode"][0].to_sym return MusicalScore::Attribute::Key.new(fifths, mode) end
create_by_xml(xml_doc)
click to toggle source
# File lib/musical_score/attribute/key.rb, line 56 def self.create_by_xml(xml_doc) fifths = xml_doc.elements["fifths"].text.to_i mode = xml_doc.elements["mode"].text.to_sym return MusicalScore::Attribute::Key.new(fifths, mode) end
new(fifths, mode)
click to toggle source
# File lib/musical_score/attribute/key.rb, line 15 def initialize(fifths, mode) @fifths = fifths @mode = mode.to_sym end
Public Instance Methods
export_xml()
click to toggle source
# File lib/musical_score/attribute/key.rb, line 69 def export_xml key_element = REXML::Element.new('key') fifths_element = REXML::Element.new('fifths').add_text(@fifths.to_s) mode_element = REXML::Element.new('mode').add_text(@mode.to_s) key_element.add_element(fifths_element) key_element.add_element(mode_element) return key_element end
tonic_key_and_altered_pitches()
click to toggle source
# File lib/musical_score/attribute/key.rb, line 23 def tonic_key_and_altered_pitches if @fifths >= 0 pitch_number = @@circle_of_fifths[@fifths] major_pitch = MusicalScore::Note::Pitch.new_note_sharp(pitch_number) minor_number = (pitch_number + RELATED_KEY_SLIDE_NUMBER) % NUMBER_OF_NOTES minor_pitch = MusicalScore::Note::Pitch.new_note_sharp(minor_number) altered_pitches = Array.new @fifths.times do |i| count = (i + SHARP_START_INDEX) % NUMBER_OF_NOTES altered_pitches.push(MusicalScore::Note::Pitch.new_note_sharp(@@circle_of_fifths[count])) end return { :major_pitch => major_pitch, :minor_pitch => minor_pitch, :altered_pitches => altered_pitches } else reversed = @@circle_of_fifths.reverse fif = @fifths.abs pitch_number = reversed[fif-1] major_pitch = MusicalScore::Note::Pitch.new_note_flat(pitch_number) minor_number = (pitch_number + RELATED_KEY_SLIDE_NUMBER) % NUMBER_OF_NOTES minor_pitch = MusicalScore::Note::Pitch.new_note_flat(minor_number) altered_pitches = Array.new fif.times do |i| count = (i + FLAT_START_INDEX) % NUMBER_OF_NOTES altered_pitches.push(MusicalScore::Note::Pitch.new_note_flat(reversed[count])) end return { :major_pitch => major_pitch, :minor_pitch => minor_pitch, :altered_pitches => altered_pitches } end end