class Mass::Pitch

Represents the pitch of a given note, and calculates its correct MIDI value, leaving the Note class more for calculating the proper duration and actually playing out the note.

Constants

REQUIRED

A collection of attributes which are required for this object to be considered a valid pitch.

@type [Array<Symbol>]

VALUES

A dictionary of MIDI note values that are substituted for a given String note value.

@type [Array<String>]

Attributes

id[R]
name[R]
octave[R]
value[R]

Public Class Methods

find(by_id = nil) click to toggle source

Find a Pitch by its given id.

@param [String] by_id @return [Pitch] when the id is valid

# File lib/mass/pitch.rb, line 58
def self.find(by_id = nil)
  return if by_id.nil?
  new id: by_id
end
new(id: '') click to toggle source

@param [String] id - Identifier string of this pitch.

# File lib/mass/pitch.rb, line 43
def initialize(id: '')
  @id = id.to_s
  @name = @id.gsub(/\d/, '').to_s
  @octave = @id.gsub(/#{name}/, '').to_i
  @value = begin
             VALUES[name]
           rescue
             nil
           end
end

Public Instance Methods

==(other) click to toggle source

Use the id parameter to define equivalence.

@return [Boolean] whether both pitches have the same ID.

# File lib/mass/pitch.rb, line 83
def ==(other)
  other.id == id
end
to_i() click to toggle source

The MIDI value of this pitch.

@return [Integer]

# File lib/mass/pitch.rb, line 76
def to_i
  value + octave_modifier
end
valid?() click to toggle source

Make sure the name and octave attributes have been correctly parsed out of the given id.

@return [Boolean] whether the object is valid

# File lib/mass/pitch.rb, line 67
def valid?
  required_params.all? do |param|
    !param.nil? && (param != '') && (param != 0)
  end
end

Private Instance Methods

octave_modifier() click to toggle source

The number by which the given scalar pitch gets modified to produce the correct MIDI note value for playback.

@private @return [Integer]

# File lib/mass/pitch.rb, line 100
def octave_modifier
  12 * octave
end
required_params() click to toggle source
# File lib/mass/pitch.rb, line 89
def required_params
  REQUIRED.map do |param_name|
    send param_name
  end
end