class MusicalScore::Note::Pitch
Attributes
alter[RW]
octave[RW]
step[RW]
Public Class Methods
create_by_hash(doc)
click to toggle source
# File lib/musical_score/note/pitch.rb, line 104 def self.create_by_hash(doc) step = doc["step"][0].to_sym octave = doc["octave"][0].to_i alter = doc.has_key?("alter") ? doc["alter"][0].to_i : 0 return MusicalScore::Note::Pitch.new(step, alter, octave) end
create_by_xml(xml_doc)
click to toggle source
# File lib/musical_score/note/pitch.rb, line 96 def self.create_by_xml(xml_doc) step = xml_doc.elements["step"].text.to_sym octave = xml_doc.elements["octave"].text.to_i alter = xml_doc.elements["alter"] ? xml_doc.elements["alter"].text.to_i : 0 return MusicalScore::Note::Pitch.new(step, alter, octave) end
new(step, alter = 0, octave = 0)
click to toggle source
# File lib/musical_score/note/pitch.rb, line 29 def initialize(step, alter = 0, octave = 0) @step = step.to_sym @alter = alter @octave = octave end
new_note_flat(note_number)
click to toggle source
# File lib/musical_score/note/pitch.rb, line 68 def self.new_note_flat(note_number) step_key_num = note_number % NUMBER_OF_NOTES octave = note_number / NUMBER_OF_NOTES # calculate step and alter candidate_keys = @@key.keys.select{ |item| step_key_num <= @@key[item] } key = candidate_keys.min_by{ |item| @@key[item] } return MusicalScore::Note::Pitch.new(key, step_key_num-@@key[key], octave) end
new_note_sharp(note_number)
click to toggle source
# File lib/musical_score/note/pitch.rb, line 51 def self.new_note_sharp(note_number) step_key_num = note_number % NUMBER_OF_NOTES octave = note_number / NUMBER_OF_NOTES # calculate step and alter candidate_keys = @@key.keys.select{ |item| step_key_num >= @@key[item] } key = candidate_keys.max_by{ |item| @@key[item] } return MusicalScore::Note::Pitch.new(key, step_key_num-@@key[key], octave) end
Public Instance Methods
<=>(other)
click to toggle source
Pitch
is comparable
@example
a = MusicalScore::Note::Pitch.new(:C, 0, 3) b = MusicalScore::Note::Pitch.new(:D, 0 ,3) a < b # => true
# File lib/musical_score/note/pitch.rb, line 41 def <=> (other) self.note_number <=> other.note_number end
export_xml()
click to toggle source
# File lib/musical_score/note/pitch.rb, line 111 def export_xml pitch_element = REXML::Element.new('pitch') step_element = REXML::Element.new('step').add_text(@step.to_s) octave_element = REXML::Element.new('octave').add_text(@octave.to_s) pitch_element.add_element(step_element) if (@alter != 0) alter_element = REXML::Element.new('alter').add_text(@alter.to_s) pitch_element.add_element(alter_element) end pitch_element.add_element(octave_element) return pitch_element end
note_number()
click to toggle source
# File lib/musical_score/note/pitch.rb, line 78 def note_number result = (NUMBER_OF_NOTES * octave) + @@key[step] + alter return result end
to_s(is_note_str = false)
click to toggle source
# File lib/musical_score/note/pitch.rb, line 86 def to_s(is_note_str = false) if is_note_str result = "%s%s%d" % [@step.to_s, alter_to_s, @octave] return result else return self.to_s end end
Private Instance Methods
alter_to_s()
click to toggle source
# File lib/musical_score/note/pitch.rb, line 128 def alter_to_s num = @alter.abs if (num == 0) return "" elsif (@alter < 0) result = '' num.times do |i| result += 'b' end return result else result = '' num.times do |i| result += '#' end return result end end