View Single Post
Old 07-13-2018, 01:33 AM   #3
MusoBob
Human being with feelings
 
MusoBob's Avatar
 
Join Date: Sep 2014
Posts: 2,643
Default

This works:


Code:
local function notes2nums(input)
  local map = {A = 9, ["A#"] = 10, B = 11, C = 0, ["C#"] = 1, D = 2, ["D#"] = 3, E = 4, F = 5, ["F#"] = 6, G = 7, ["G#"] = 8}
  local base, prev
  return (input:gsub("([^,]+)", function(note)
        local num = map[note]
        base = base or num
        num = num - base
        if prev and num < prev then num = num + 12 end
        prev = num
        return tostring(num)
      end))
end
Msg(notes2nums("D,F#,A"))
Msg(notes2nums("C,E,G,A#,D,F,A"))
Msg(notes2nums("G#,B,D#,F#,B"))
MusoBob is offline   Reply With Quote