Module: Fretboards::Pitch

Defined in:
lib/fretboards/pitch.rb

Constant Summary collapse

TABLE =
{
  "c" => 0,
  "cis" => 1,
  "des" => 1,
  "d" => 2,
  "dis" => 3,
  "ees" => 3,
  "e" => 4,
  "f" => 5,
  "fis" => 6,
  "ges" => 6,
  "g" => 7,
  "gis" => 8,
  "aes" => 8,
  "a" => 9,
  "beses" => 9,
  "ais" => 10,
  "bes" => 10,
  "b" => 11
}

Class Method Summary collapse

Class Method Details

.from_diff(diff) ⇒ Object



40
41
42
43
44
45
46
47
48
49
# File 'lib/fretboards/pitch.rb', line 40

def self.from_diff(diff)
  diff += 12
  octave_direction = diff > 0 ? 1 : -1
  abs_diff = diff.abs
  octave_shift = diff / 12
  shift = diff % 12
  s_pitch = TABLE.find { |k, v| v == shift }.first
  suffix = (octave_direction > 0 ? "'" : ',') * octave_shift
  s_pitch + suffix
end

.to_diff(name) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/fretboards/pitch.rb', line 25

def self.to_diff(name)
  pitch, alt, octave = name.scan(/([a-g](es|is){0,2})([',]*)/)[0]
  base = TABLE[pitch]
  octave_shift = if octave.nil?
    -12
  elsif octave.start_with?(",")
    -12 * (octave.length + 1)
  else
    12 * (octave.length - 1)
  end
  # pp octave_shift
  diff = base + octave_shift
  diff
end