class HeadMusic::Register
The register is a numeric octave identifier used in scientific pitch notation.
A pitch is a spelling plus a register. For example, C4 is middle C and C5 is the C one octave higher. The number changes between the letter names B and C regardless of sharps and flats, so as an extreme example, Cb5 is actually a semitone below B#4.
Constants
- DEFAULT
Attributes
number[R]
Public Class Methods
default()
click to toggle source
# File lib/head_music/register.rb, line 33 def self.default @registers[DEFAULT] ||= new(DEFAULT) end
from_name(string)
click to toggle source
# File lib/head_music/register.rb, line 25 def self.from_name(string) return unless string.to_s.match?(HeadMusic::Spelling::MATCHER) _letter, _sign, register_string = string.to_s.match(HeadMusic::Spelling::MATCHER).captures @registers ||= {} @registers[register_string.to_i] ||= new(register_string.to_i) if register_string end
from_number(identifier)
click to toggle source
# File lib/head_music/register.rb, line 17 def self.from_number(identifier) return nil unless identifier.to_s == identifier.to_i.to_s return nil unless (-2..12).cover?(identifier.to_i) @registers ||= {} @registers[identifier.to_i] ||= new(identifier.to_i) end
get(identifier)
click to toggle source
# File lib/head_music/register.rb, line 13 def self.get(identifier) from_number(identifier) || from_name(identifier) || default end
Private Class Methods
new(number)
click to toggle source
# File lib/head_music/register.rb, line 41 def initialize(number) @number = number end
Public Instance Methods
+(other)
click to toggle source
# File lib/head_music/register.rb, line 49 def +(other) self.class.get(to_i + other.to_i) end
-(other)
click to toggle source
# File lib/head_music/register.rb, line 53 def -(other) self.class.get(to_i - other.to_i) end
<=>(other)
click to toggle source
# File lib/head_music/register.rb, line 45 def <=>(other) to_i <=> other.to_i end
helmholtz_case()
click to toggle source
# File lib/head_music/register.rb, line 57 def helmholtz_case return :upper if number < 3 :lower end
helmholtz_marks()
click to toggle source
# File lib/head_music/register.rb, line 63 def helmholtz_marks return ',' * (2 - number) if number < 2 return "'" * (number - 3) if number > 3 '' end