Sha256: a63a6e419bd188b03b556fca506b817591fc2227c4f41a117a235f4d869b29a3

Contents?: true

Size: 767 Bytes

Versions: 12

Compression:

Stored size: 767 Bytes

Contents

class Numeric

  #
  # +pchtom+: pitch class to MIDI note converter
  #
  # interprets its receiver as a pitch class and returns its corresponing MIDI note
  #
  #:nodoc:
  MIDI_MIDDLE_C = 60
  PITCH_MIDDLE_C = 8.0
  CHROMATIC_NOTES_PER_OCTAVE = 12.0

  def pchtom
    p_octave = self.to_i
    p_note = (self - p_octave) * 100
    ref = self < 0.0 ? -CHROMATIC_NOTES_PER_OCTAVE : CHROMATIC_NOTES_PER_OCTAVE

    p_octave += (p_note / CHROMATIC_NOTES_PER_OCTAVE).to_i # cater for octave wrapping
    p_note   = (p_note % ref);                             # reduce note in a 0-11 space (keeping track of sign)

    m_octave = ((p_octave - PITCH_MIDDLE_C)*CHROMATIC_NOTES_PER_OCTAVE) + MIDI_MIDDLE_C; # find the appropriate midi octave

    m_octave + p_note
  end

end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
ruby-mext-0.9.0 lib/mext/numeric/pchtom.rb
ruby-mext-0.8.0 lib/mext/numeric/pchtom.rb
ruby-mext-0.7.0 lib/mext/numeric/pchtom.rb
ruby-mext-0.6.0 lib/mext/numeric/pchtom.rb
ruby-mext-0.5.0 lib/mext/numeric/pchtom.rb
ruby-mext-0.4.1 lib/mext/numeric/pchtom.rb
ruby-mext-0.4.0 lib/mext/numeric/pchtom.rb
ruby-mext-0.3.2 lib/mext/numeric/pchtom.rb
ruby-mext-0.3.1 lib/mext/numeric/pchtom.rb
ruby-mext-0.3.0 lib/mext/numeric/pchtom.rb
ruby-mext-0.2.1 lib/mext/numeric/pchtom.rb
ruby-mext-0.2.0 lib/mext/numeric/pchtom.rb