-- NoIndex: true --[[ Lokasenna_GUI example - General demonstration - Tabs and layer sets - Subwindows - Accessing elements' parameters ]]-- function Msg(value) --returns nothing if debug_output then --check if flag is set true (at the start of this script) reaper.ShowConsoleMsg(tostring(value) ) end end local dm, _ = debug_mode local function Msg(str) reaper.ShowConsoleMsg(tostring(str).."\n") end local info = debug.getinfo(1,'S'); script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] -- The Core library must be loaded prior to anything else -------------------------------- --REATRAK LOCAL GUI LIBRARY start -------------------------------- --local lib_path = script_path --reaper.GetExtState("Lokasenna_GUI", "lib_path_v2") --if not lib_path or lib_path == "" then --reaper.MB("Couldn't load the Lokasenna_GUI library. Please run 'Script: Set Lokasenna_GUI v2 library path.lua' in your Action List.", "Whoops!", 0) --return --end loadfile(script_path .. "ReaTrak_Core.lua")() GUI.req(script_path .. "ReaTrak_Classes/Class - Label.lua")() GUI.req(script_path .. "ReaTrak_Classes/Class - Knob.lua")() GUI.req(script_path .. "ReaTrak_Classes/Class - Tabs.lua")() GUI.req(script_path .. "ReaTrak_Classes/Class - Slider.lua")() GUI.req(script_path .. "ReaTrak_Classes/Class - Button.lua")() GUI.req(script_path .. "ReaTrak_Classes/Class - Menubox.lua")() GUI.req(script_path .. "ReaTrak_Classes/Class - Textbox.lua")() GUI.req(script_path .. "ReaTrak_Classes/Class - Frame.lua")() GUI.req(script_path .. "ReaTrak_Classes/Class - Options.lua")() GUI.req(script_path .. "ReaTrak_Classes/Class - Window.lua")() -------------------------------- --REATRAK LOCAL GUI LIBRARY end -------------------------------- --[[ -------------------------------- --LOKASENNA GUI LIBRARY start -------------------------------- local lib_path = reaper.GetExtState("Lokasenna_GUI", "lib_path_v2") if not lib_path or lib_path == "" then reaper.MB("Couldn't load the Lokasenna_GUI library. Please run 'Script: Set Lokasenna_GUI v2 library path.lua' in your Action List.", "Whoops!", 0) return end loadfile(lib_path .. "Core.lua")() GUI.req("Classes/Class - Label.lua")() GUI.req("Classes/Class - Knob.lua")() GUI.req("Classes/Class - Tabs.lua")() GUI.req("Classes/Class - Slider.lua")() GUI.req("Classes/Class - Button.lua")() GUI.req("Classes/Class - Menubox.lua")() GUI.req("Classes/Class - Textbox.lua")() GUI.req("Classes/Class - Frame.lua")() GUI.req("Classes/Class - Options.lua")() GUI.req("Classes/Class - Window.lua")() -------------------------------- --LOKASENNA GUI LIBRARY end -------------------------------- --]] -- If any of the requested libraries weren't found, abort the script. if missing_lib then return 0 end ------------------------------------ -------- Functions ----------------- ------------------------------------ local function fade_lbl() -- Fade out the label if GUI.elms.my_lbl.z == 3 then GUI.elms.my_lbl:fade(1, 3, 6) -- Bring it back else GUI.elms.my_lbl:fade(1, 3, 6, -3) end end --[[ local function btn_click() -- Open the Window element GUI.elms.wnd_test:open() end --]] local function wnd_OK() -- Close the Window element GUI.elms.wnd_test:close() end -- Returns a list of every element on the specified z-layer and -- a second list of each element's values local function get_values_for_tab(tab_num) -- The '+ 2' here is just to translate from a tab number to its' -- associated z layer. More complicated scripts would have to -- actually access GUI.elms.tabs.z_sets[tab_num] and iterate over -- the table's contents (see the call to GUI.elms.tabs:update_sets -- below) local strs_v, strs_val = {}, {} for k, v in pairs(GUI.elms_list[tab_num + 2]) do strs_v[#strs_v + 1] = v local val = GUI.Val(v) if type(val) == "table" then local strs = {} for k, v in pairs(val) do local str = tostring(v) -- For conciseness, reduce boolean values to T/F if str == "true" then str = "T" elseif str == "false" then str = "F" end strs[#strs + 1] = str end val = table.concat(strs, ", ") end -- Limit the length of the returned string so it doesn't -- spill out past the edge of the window strs_val[#strs_val + 1] = string.len(tostring(val)) <= 35 and tostring(val) or string.sub(val, 1, 32) .. "..." end return strs_v, strs_val end ------------------------------------ -------- Window settings ----------- ------------------------------------ GUI.name = "ReaTrak Compact GUI" GUI.x, GUI.y, GUI.w, GUI.h = 0, 0, 882, 500 GUI.anchor, GUI.corner = "mouse", "C" --[[ Button z, x, y, w, h, caption, func[, ...] Checklist z, x, y, w, h, caption, opts[, dir, pad] Frame z, x, y, w, h[, shadow, fill, color, round] Knob z, x, y, w, caption, min, max, default[, inc, vals] Label z, x, y, caption[, shadow, font, color, bg] Menubox z, x, y, w, h, caption, opts Radio z, x, y, w, h, caption, opts[, dir, pad] Slider z, x, y, w, caption, min, max, defaults[, inc, dir] Tabs z, x, y, tab_w, tab_h, opts[, pad] Textbox z, x, y, w, h[, caption, pad] Window z, x, y, w, h, caption, z_set[, center] ]]-- -- Elements can be created in any order you want. I find it easiest to organize them -- by tab, or by what part of the script they're involved in. ------------------------------------ -------- General elements ---------- ------------------------------------ --GUI.New("tabs", "Tabs", 1, 0, 0, 64, 20, "Stuff", 16) GUI.New("tab_bg", "Frame", 2, 0, 0, 448, 20, false, true, "elm_bg", 0) --GUI.New("my_btn", "Button", 1, 168, 28, 96, 20, "Go!", btn_click) --GUI.New("btn_frm", "Frame", 1, 0, 56, GUI.w, 4, true, true) -- Telling the tabs which z layers to display -- See Classes/Tabs.lua for more detail --[[ GUI.elms.tabs:update_sets( -- Tab -- Layers { [1] = {3}, [2] = {4}, [3] = {5}, } ) --]] -- Notice that layers 1 and 2 aren't assigned to a tab; this leaves them visible -- all the time. --[[ ------------------------------------ -------- Tab 1 Elements ------------ ------------------------------------ GUI.New("my_lbl", "Label", 3, 256, 96, "Label!", true, 1) GUI.New("my_knob", "Knob", 3, 64, 112, 48, "Volume", 0, 11, 44, 0.25) GUI.New("my_mnu", "Menubox", 3, 256, 176, 64, 20, "Options:", "1,2,3,4,5,6.12435213613") GUI.New("my_btn2", "Button", 3, 256, 256, 64, 20, "Click me!", fade_lbl) GUI.New("my_txt", "Textbox", 3, 96, 224, 96, 20, "Text:", 4) GUI.New("my_frm", "Frame", 3, 16, 288, 192, 128, true, false, "elm_frame", 4) -- We have too many values to be legible if we draw them all; we'll disable them, and -- have the knob's caption update itself to show the value instead. GUI.elms.my_knob.vals = false function GUI.elms.my_knob:redraw() GUI.Knob.redraw(self) self.caption = self.retval .. "dB" end -- Make sure it shows the value right away GUI.elms.my_knob:redraw() GUI.Val("my_frm", "this is a really long string of text with no carriage returns so hopefully ".. "it will be wrapped correctly to fit inside this frame") GUI.elms.my_frm.bg = "elm_bg" --]] ------------------------------------ -------- Tab 2 Elements ------------ ------------------------------------ -- Button Colors = {r, g, b, transparency} GUI.colors["count_in"] = {255, 124, 192, 255} GUI.colors["intro_post_fill"] = {119, 17, 174, 255} GUI.colors["intro"] = {159, 22, 232, 255} GUI.colors["intro_fill"] = {183, 128, 237, 255} GUI.colors["verse_post_fill"] = {17, 39, 174, 255} GUI.colors["verse"] = {55, 118, 235, 255} GUI.colors["verse_fill"] = {113, 190, 241, 255} GUI.colors["verse_ending"] = {151, 208, 245, 255} GUI.colors["bridge_post_fill"] = {206, 105, 20, 255} GUI.colors["bridge"] = {234, 133, 48, 255} GUI.colors["bridge_fill"] = {239, 164, 100, 255} GUI.colors["pre_chorus_post_fill"] = {206, 179, 20, 255} GUI.colors["pre_chorus"] = {234, 208, 48, 255} GUI.colors["pre_chorus_fill"] = {244, 231, 151, 255} GUI.colors["chorus_post_fill"] = {11, 116, 39, 255} GUI.colors["chorus"] = {17, 174, 59, 255} GUI.colors["chorus_fill"] = {80, 237, 123, 255} GUI.colors["chorus_ending"] = {158, 254, 182, 255} GUI.colors["play_anywhere"] = {228, 26, 39, 250} GUI.colors["drum_riff"] = {115, 23, 17, 255} GUI.colors["hold"] = {191, 191, 191, 255} GUI.colors["shot"] = {127, 127, 127, 255} GUI.colors["rest"] = {0, 0, 0, 255} --Text Colors GUI.colors["btn_txt1"] = {255, 255, 255, 255} --white GUI.colors["btn_txt2"] = {155, 155, 155, 255} --gray GUI.colors["btn_txt3"] = {0, 0, 0, 255} --black --------------------------------------------------------------------- --Chord Scales Tab 2 (2,4) --------------------------------------------------------------------- --Chord Input --local number = GUI.Val("key_choice") CMajor = {"C", "Dm", "Em", "F", "G", "Am", "Bdim", "CMaj7", "Dm7", "Em7", "FMaj7", "G7", "Am7", "Bm7b5"} CsMajor = {"C#", "D#m", "Fm", "F#", "G#", "A#m", "Cdim", "C#Maj7", "D#m7", "Fm7", "F#Maj7", "G#7", "A#m7", "Cm7b5"} DbMajor = {"Db", " Ebm", " Fm", " Gb", "Ab", "Bbm", "Cdim", "DbMaj7", "Ebm7", "Fm7", "GbMaj7", "Ab7", " Bbm7", "Cm7b5"} DMajor = {"D", "Em", "F#m", "G", "A", "Bm", "C#dim", "DMaj7", "Em7", "F#m7", "GMaj7", "A7", "Bm7", "C#m7b5"} DsMajor = {"D#", "Fm", "Gm", "G#", "A#", "Cm", "Ddim", "D#Maj", "Fm7", "Gm7", "G#Maj7", "A#7", "Cm7", "Dm7b5"} EbMajor = {"Eb", "Fm", "Gm", "Ab", "Bb", "Cm", "Ddim", "EbMaj7", "Fm7", "Gm7", "AbMaj7", "Bb7", "Cm7", "Dm7b5"} EMajor = {"E", "F#m", "G#m", "A", "B", "C#m", "D#dim", "EMaj7", "F#m7", "G#m7", "AMaj7", "B7", "C#m7", "D#m7b5"} FMajor = {"F", "Gm", "Am", "Bb", "C", "Dm", "Edim", "FMaj7", "Gm7", "Am7", "BbMaj7", "C7", "Dm7", "Em7b5"} FsMajor = {"F#", "G#m", "A#m", "B", "C#", "D#m", "Fdim", "F#Maj7", "G#m7", "A#m7", "BMaj7", "C#7", "D#m7", "Fm7b5"} GbMajor = {"Gb", "Abm", "Bbm", "B", "Db", "Ebm", "Fdim", "GbMaj7", "Abm7", "Bbm7", "BMaj7", "Db7", "Ebm7", "Fm7b5"} GMajor = {"G", "Am", "Bm", "C", "D", "Em", "F#dim", "GMaj7", "Am7", "Bm7", "CMaj7", "D7", "Em7", "F#m7b5"} GsMajor = {"G#", "A#m", "Cm", "C#", "D#", "Fm", "Gdim", "G#Maj7", "A#m7", "Cm7", "C#Maj7", "D#7", "Fm7", "Gm7b5"} AbMajor = {"Ab", "Bbm", "Cm", "Db", "Eb", "Fm", "Gdim", "bMaj7", "Bbm7", "Cm7", "DbMaj7", "Eb7", "Fm7", "Gm7b5"} AMajor = {"A", "Bm", "C#m", "D", "E", "F#m", "G#dim", "AMaj7", "Bm7", "C#m7", "DMaj7", "E7", "F#m7", "G#m7b5"} AsMajor = {"A#", "Cm", "Dm", "D#", "F", "Gm", "Adim", "A#Maj7", "Cm7", "Dm7", "D#Maj7", "F7", "Gm7", "Am7b5"} BbMajor = {"Bb", "Cm", "Dm", "Eb", "F", "Gm", "Adim", "BbMaj7", "Cm7", "Dm7", "EbMaj7", "F7", "Gm7", "Am7b5"} BMajor = {"B", "C#m", "D#m", "E", "F#", "G#m", "A#dim", "BMaj7", "C#m7", "D#m7", "EMaj7", "F#7", "G#m7", "A#m7b5"} CMinor = {"Cm", "Ddim", "Eb", "Fm", "Gm", "Ab", "Bb", "Cm7", "Dm7b5", "EbMa7", "Fm7", "Gm7", "AbMaj7", "Bm7"} CsMinor = {"C#m", "D#m", "E", "F#m", "G#m", "A", "B", "C#m7", "D#m7b5", "EMaj7", "F#m7", "G#m7", "AMaj7", "B7"} DbMinor = {"Dbm", "Ebdim", "E", "Gbm", "Abm", "A", "B", "Dbm7", "Ebm7b5", "EMaj7", "Gbm7", "Abm7", "AMaj7", "B7"} DMinor = {"Dm", "Edim", "F", "Gm", "Am", "Bb", "C", "Dm7", "Em7b5", "FMaj7", "Gm7", "A7", "BbMaj7", "C7"} DsMinor = {"D#m", "Fdim", "F#", "G#m", "A#m", "B", "C#", "D#m7", "Fm7b5", "F#Maj7", "G#m7", "A#m7", "BMaj7", "C#7"} EbMinor = {"Ebm", "Fdim", "Gb", "Abm", "Bbm", "B", "Db", "Ebm7", "Fm7b5", "GbMaj7", "Abm7", "Bb7", "BMaj7", "Db7"} EMinor = {"Em", "F#dim", "G", "Am", "Bm", "C", "D", "Em7", "F#m7b5", "GMaj7", "Am7", "B7", "CMaj7", "D7"} FMinor = {"Fm", "F#dim", "Ab", "Bbm", "Cm", "Db", "Eb", "Fm7", "F#m7b5", "AbMaj7", "Bbm7", "C7", "DbMaj7", "Eb7"} FsMinor = {"F#m", "G#dim", "A", "Bm", "C#m", "D", "E", "F#m7", "G#m7b5", "AMaj7", "Bm7", "C#m7", "DMaj7", "E7"} GbMinor = {"Gbm", "Abdim", "A", "Bm", "Dbm", "D", "E", "Gbm7", "Abm7b5", "AMaj7", "Bm7", "Dbm7", "DMaj7", "E7"} GMinor = {"Gm", "Adim", "Bb", "Cm", "Dm", "Eb", "F", "Gm7", "Am7b5", "BbMaj7", "Cm7", "Dm7", "EbMaj7", "F7"} GsMinor = {"G#m", "A#dim", "B", "C#m", "D#m", "E", "F#", "G#m7", "A#m7b5", "BMaj7", "C#m7", "D#m7", "EMaj7", "F#7"} AbMinor = {"Abm", "Bbdim", "B", "Dbm", "Ebm", "E", "Gb", "Abm7", "Bbm7b5", "BMaj7", "Dbm7", "Ebm7", "EMaj7", "Gb7"} AMinor = {"Am", "Bdim", "C", "Dm", "Em", "F", "G", "Am7", "Bm7b5", "CMaj7", "Dm7", "E7", "FMaj7", "G7"} AsMinor = {"A#m", "Cdim", "C#", "D#m", "Fm", "F#", "G#", "A#m7", "Cm7b5", "C#Maj7", "D#m7", "Fm7", "F#Maj7", "G#7"} BbMinor = {"Bbm", "Cdim", "Db", "Ebm", "Fm", "Gb", "Ab", "Bbm7", "Cm7b5", "DbMaj7", "Ebm7", "Fm7", "GbMaj7", "Ab7"} BMinor = {"Bm", "C#dim", "D", "Em", "F#m", "G", "A", "Bm7", "C#m7b5", "DMaj7", "Em7", "F#7", "GMaj7", "A7"} CHarmonic_Major = {"C", "Ddim", "E", "Fm", "G", "Abdim", "Bdim", "CMaj7", "Dm7b5", "Em", "FmMaj7", "G7", "Abaug", "Bdim7"} CsHarmonic_Major = {"C#", "D#dim", "F", "F#m", " G#", "Adim", "Cdim", "C#Maj7", "D#m7b5", "Fm", "F#mMaj7", "G#7", "Aaug", "Cdim7"} DbHarmonic_Major = {"Db", "Ebdim", "F", "Gbm", "Ab", "Adim", "Cdim", "DbMaj7", "Ebm7b5", "Fm", "GbmMaj7", "Ab7", "Aaug", "Cdim7"} DHarmonic_Major = {"D", "Edim", "F#", "Gm", "A", "Bbdim", "Dbdim", "DMaj7", "Em7b5", "F#m", "GmMaj7", "A7", "Bbdim", "Dbdim7"} DsHarmonic_Major = {"D#", "Fdim", "G", "G#m", "A#", "Bdim", "Ddim", "D#Maj7", "Fm7b5", "Gm", "G#mMaj7", "A#7", "Baug", "Ddim7"} EbHarmonic_Major = {"Eb", "Fdim", "G", "Abm", "Bb", "Bdim", "Ddim", "EbMaj7", "Fm7b5", "Gm", "AbmMaj7", "Bb7", "Baug", "Ddim7"} EHarmonic_Major = {"E", "F#dim", "Ab", "Am", "B", "Cdim", "Ebdim", "EMaj7", "F#m7b5", "Abm", "AmMaj7", "B7", "Caug", "Ebdim7"} FHarmonic_Major = {"F", "Gdim", "A", " Bbm", " C", " Dbdim", "Edim", " FMaj7", "Gm7b5", "Am", "BbmMaj7", "C7", "Dbaug", "Edim7"} FsHarmonic_Major = {"F#", "G#dim", "A#", "Bm", "C#", "Ddim", "Fdim", "F#Maj7", "G#m7b5", "A#m", "BmMaj7", "C#7", "Daug", "Fdim7"} GbHarmonic_Major = {"Gb", "Abdim", "Bb", "Bm", "Db", "Ddim", "Fdim", "GbMaj7", "Abm7b5", "Bbm", "BmMaj7", "Db7", "Daug", "Fdim7"} GHarmonic_Major = {"G", "Adim", "B", "Cm", "D", "Ebdim", "F#dim", "GMaj7", "Am7b5", "Bm", "CmMaj7", "D7", "Ebaug", "F#dim7"} GsHarmonic_Major = {"G#", "A#dim", "C", "C#m", "D#", "Edim", "Gdim", "G#Maj7", "A#m7b5", "Cm", "C#mMaj7", "D#7", "Eaug", "Gdim7"} AbHarmonic_Major = {"Ab", "Bbdim", "C", "Dbm", "Eb", "Edim", "Gdim", "AbMaj7", "Bbm7b5", "Cm", "DbmMaj7", "Eb7", "Eaug", "Gdim7"} AHarmonic_Major = {"A", "Bdim", "C#", "Dm", "E", "Fdim", "Abdim", "AMaj7", "Bm7b5", "Dbm", "DmMaj7", "E7", "Faug", "Abdim7"} AsHarmonic_Major = {"A#", "Cdim", "D", "D#m", "F", "F#dim", "Adim", "A#Maj7", "Cm7b5", "Dm", "D#mMaj7", "F7", "F#aug", "Adim7"} BbHarmonic_Major = {"Bb", "Cdim", "D", "Ebm", "F", "Gbdim", "Adim", " BbMaj7", "Cm7b5", "Dm", "EbmMaj7", "F7", "Gbaug", "Adim7"} BHarmonic_Major = {"B", "C#dim", "Eb", "Em", "F#", "Gdim", "Bbdim", "BMaj7", "C#m7b5", "Ebm", "EmMaj7", "F#7", "Gaug", "Bbdim7"} CMelodic_Major = {"C", "Ddim", "Edim", "Fm", "Gm", "Abaug", "Bb", "C7", "Dm7b5", "Eaug", "FmMaj7", "Gm7", "AbMaj7#5", "Bb7"} CsMelodic_Major = { "C#", "D#dim", "Fdim", "F#m", "G#m", "Aaug", "B", "C#7", "D#m7b5", "Faug", "F#mMaj7", "G#m7", "AMaj7#5", "B7"} DbMelodic_Major = { "Db", "Ebdim", "Fdim", "Gbm", "Abm", "Aaug", "B", "Db7", "Ebm7b5", "Faug", "GbmMaj7", "Abm7", "AMaj7#5", "B7"} DMelodic_Major = { "D", "Edim", "Cbdim", "Gm", "Am", "Bbaug", "C", "D7", "Em7b5", "Gbaug", "GmMaj7", "Am7", "BbMaj7#5", "C7"} DsMelodic_Major = { "D#", "Fdim", "Gdim", "G#m", "A#m", "Baug", "C#", "D#7", "Fm7b5", "Gaug", "G#mMaj7", "A#m7", "BMaj7#5", "C#7"} EbMelodic_Major = { "Eb", "Fdim", "Gdim", "Abm", "Bbm", "Baug", "Db", "Eb7", "Fm7b5", "Gaug", "AbmMaj7", "Bbm7", "BMaj7#5", "Db7"} EMelodic_Major = { "E", "Gbdim", "Abdim", "Am", "Bm", "Caug", "D", "E7", "Gb,7b5", "Abaug", "AnMaj7", "Bm7", "CMaj7#5", "D7"} FMelodic_Major = { "F", "Gdim", "Adim", "Bbm", "Cm", "Dbaug", "Eb", "F7", "Gm7b5", "Aaug", "BbmMaj7", "Cm7", "DbMaj7#5", "Eb7"} FsMelodic_Major = { "F#", "G#dim", "A#dim", "Bm", "C#m", "Daug", "E", "F#7", "G#m7b5", "A#aug", "BmMaj7", "C#m7", "DMaj7#5", "E7"} GbMelodic_Major = { "Gb", "Abdim", "Bbdim", "Bm", "Dbm", "Daug", "E", "Gb7", "Abm7b5", "Bbaug", "BmMaj7", "Dbm7", "DMaj7#5", "E7"} GMelodic_Major = { "G", "Adim", "Bdim", "Cm", "Dm", "Eaug", "F", "G7", "Am7b5", "Baug", "Cmmaj7", "Dm7", "EbMaj7#5", "F7"} GsMelodic_Major = { "G#", "A#dim", "Cdim", "C#m", "D#m", "Eaug", "F#", "G#7", "A#m7b5", "Caug", "C#mMaj7", "D#m7", "EMaj7#5", "F#7"} AbMelodic_Major = { "Ab", "Bbdim", "Cdim", "Dbm", "Ebm", "Eaug", "Gb", "Ab7", "Bbm7b5", "Caug", "DbmMaj7", "Ebm7", "EMaj7#5", "Gb7"} AMelodic_Major = { "A", "Bdim", "Dbdim", "Dm", "Em", "Faug", "G", "A7", "Bm7b5", "Dbaug", "Dmmaj7", "Em7", "FMaj7#5", "G7"} AsMelodic_Major = { "A#", "Cdim", "D#min", "D#m", "Fm", "F#aug", "G#", "A#7", "Cm7b5", "Daug", "D#mMaj7", "Fm7", "F#Maj7#5", "G#7"} BbMelodic_Major = { "Bb", "Cdim", "Ddim", "Ebm", "Fm", "Gbaug", "Ab", "Bb7", "Cm7b5", "Daug", "EbmMaj7", "Fm7", "GbMaj7#5", "Ab7"} BMelodic_Major = { "B", "Dbdim", "Ebdim", "Em", "Gbm", "Gaug", "A", "B7", "Dbm7b5", "Ebaug", "EmMaj7", "Gbm7", "GMaj7#5", "A7"} CHarmonic_Minor = {"Cm", "Ddim", "Ebaug", "Fm", "G", "Ab", "Bdim", "CmMaj7", "Dm7b5", "EbMa7#5", "Fm7", "G7", "Abm", "Baug"} CsHarmonic_Minor = {"C#m", "D#dim", "Eaug", "F#m", "G#", "A", "Cdim", "C#mMaj7", "D#m7b5", "EMaj7#5", "F#m7", "G#7", "Am", "Caug"} DbHarmonic_Minor = {"Dbm", "Ebdim", "Eaug", "Gbm", "Ab", "A", "Cdim", "DbmMaj7", "Ebm7b5", "EMaj7#5", "Gbm7", "Ab7", "Am", "Caug"} DHarmonic_Minor = {"Dm", "Edim", "Faug", "Gm", "A", "Bb", "Dbdim", "DmMaj7", "Em7b5", "FMaj7#", "Gm7", "A7", "Bbm", "Dbaug"} DsHarmonic_Minor = {"D#m", "Fdim", "F#aug", "G#m", "A#", "B", "Ddim", "D#mMaj7", "Fm7b5", "F#Maj7#5", "G#m7", "A#7", "Bm", "Daug"} EbHarmonic_Minor = {"Ebm", "Fdim", "Gbaug", "Abm", "Bb", "B", "Ddim", "EbmMaj7", "Fm7b5", "GbMaj7#5", "Abm7", "Bb7", "Bm", "Daug"} EHarmonic_Minor = {"Em", "F#dim", "Gaug", "Am", "B", "C", "Ebdim", "EmMaj7", "F#m7b5", "GMaj7#5", "Am7", "B7", "Cm", "Ebdim7"} FHarmonic_Minor = {"Fm", "Gdim", "Abaug", "Bbm", "C", "C#", "Edim", "FmMaj7", "Gm7b5", "AbMaj7#5", "Bbm7", "C7", "C#m", "Eaug"} FsHarmonic_Minor = {"F#m", "G#dim", "Aaug", "Bm", "C#", "D", "Fdim", "F#mMaj7", "G#m7b5", "AMaj7#5", "Bm7", "C#7", "Dm", "Faug"} GbHarmonic_Minor = {"Gbm", "Abdim", "Aaug", "Bm", "Db", "D", "Fdim", "GbmMaj7", "Abm7b5", "AMaj7#5", "Bm7", "Db7", "Dm", "Faug"} GHarmonic_Minor = {"Gm", "Adim", "Bbaug", "Cm", "D", "Eb", "F#dim", "GmMaj7", "Am7b5", "BbMaj7#5", "Cm7", "D7", "Ebm", "F#aug"} GsHarmonic_Minor = {"G#m", "A#dim", "Baug", "C#m", "D#", "E", "Gdim", "G#mMaj7", "A#m7b5", "BMaj7#5", "C#m7", "D#7", "Em", "Gaug"} AbHarmonic_Minor = {"Abm", "Bbdim", "Baug", "Dbm", "Eb", "E", "Gdim", "AbmMaj7", "Bbm7b5", "BMaj7#5", "Dbm7", "Eb7", "Em", "Gaug"} AHarmonic_Minor = {"Am", "Bdim", "Caug", "Dm", "E", "F", "G#dim", "AmMaj7", "Bm7b5", "CMaj7#5", "Dm7", "E7", "Fm", "G#aug"} AsHarmonic_Minor = {"A#m", "Cdim", "C#aug", "D#m", "F", "F#", "Adim", "A#mMaj7", "Cm7b5", "C#Maj7#5", "D#m7", "F7", "F#m", "Aaug"} BbHarmonic_Minor = {"Bbm", "Cdim", "Dbaug", "Ebm", "F", "Gb", "Adim", "BbmMaj7", "Cm7b5", "DbMaj7#5", "Ebm7", "F7", "Gbm", "Aaug"} BHarmonic_Minor = {"Bm", "C#dim", "Daug", "Em", "F#", "G", "Bbdim", "BmMaj7", "C#m7b5", "DMaj7#5", "Em7", "F#7", "Gm", "Bbaug"} CMelodic_Minor = {"Cm", "Dm", "Ebaug", "F", "G", "Adim", "Bdim", "CmMaj7", "Dm7", "EbMaj7#5", "F7", "G7", "Am7b5", "Baug"} CsMelodic_Minor = { "C#m", "D#m", "Eaug", "F#", "G#", "A#dim", "Cdim", "C#nMaj7", "D#m7", "EMaj7#5", "F#7", "G#7", "A#mb5", "Caug"} DbMelodic_Minor = { "Dbm", "Em", "Eaug", "Gb", "Ab", "Bbdim", "Cdim", "DbmMaj7", "Ebm7", "EMaj7#5", "Gb7", "Ab7", "Bbm7b5", "Caug"} DMelodic_Minor = { "Dm", "Em", "Faug", "G", "A", "Bdim", "Dbdim", "DmMaj7", "Em7", "FMa7#5", "G7", "A7", "Bm7b5", "Daug"} DsMelodic_Minor = { "D#m", "Fm", "F#aug", "G#", "A#", "Cdim", "Ddim", "D#mMaj7", "Fm7", "F#Maj7#5", "G#7", "A#7", "Cm7b5", "Daug"} EbMelodic_Minor = { "Ebm", "Fm", "Gbaug", "Ab", "Bb", "Cdim", "Ddim", "EbmMaj7", "Fm7", "GbMaj7#5", "Ab7", "Bb7", "Cm7b5", "Daug"} EMelodic_Minor = { "Em", "Gbm", "Gaug", "A", "B", "Dbdim", "Ebdim", "EmMaj7", "Gbm7", "GMaj7#5", "A7", "B7", "Dbm7b5", "Ebaug"} FMelodic_Minor = { "Fm", "Gm", "Abaug", "Bb", "C", "Ddim", "Edim", "FmMaj7", "Gm7", "AbMaj7#5", "Bb7", "C7", "Dm7b5", "Eaug"} FsMelodic_Minor = { "F#m", "G#m", "Aaug", "B", "C#", "D#dim", "Fdim", "F#mMaj", "G#m7", "AMaj7#5", "B7", "C#7", "D#m7b5", "Faug"} GbMelodic_Minor = { "Gbm", "Abm", "Aaug", "B", "Db", "Ebdim", "Fdim", "GbmMaj7", "Abm7", "AMaj7#5", "B7", "Db7", "Ebm7b5", "Faug"} GMelodic_Minor = { "Gm", "Am", "Bbaug", "C", "D", "Edim", "Gbdim", "GmMaj7", "Am7", "BbMaj7#5", "C7", "D7", "Em7b5", "Gbaug"} GsMelodic_Minor = { "G#m", "A#m", "Baug", "C#", "D#", "Fdim", "Gdim", "G#mMaj7", "A#m7", "BMaj7#5", "C#7", "D#7", "Fm7b5", "Gaug"} AbMelodic_Minor = { "Abm", "Bbm", "Baug", "Db", "Eb", "Fdim", "Gdim", "AbmMaj7", "Bbm7", "BMaj7#5", "Db7", "Eb7", "Fm7b5", "Daug"} AMelodic_Minor = { "Am", "Bm", "Caug", "D", "R", "Gbdim", "Abdim", "AmMaj7", "Bm7", "CMaj7#5", "D7", "E7", "Gbm7b5", "Abaug"} AsMelodic_Minor = { "A#m", "Cm", "C#aug", "D#", "F", "Gdim", "Adim", "A#mMaj7", "Cm7", "C#Maj7#5", "D#7", "F7", "Gm7b5", "Aaug"} BbMelodic_Minor = { "Bbm", "Cm", "Dbaug", "Eb", "F", "Gdim", "Adim", "BbmMaj7", "Cm7", "DbMaj7#5", "Eb7", "F7", "Gm7b5", "Aaug"} BMelodic_Minor = { "Bm", "Dbm", "Daug", "E", "Gb", "Abdim", "Bbdim", "BmMaj7", "Dbm7", "DMaj7#5", "E7", "Gb7", "Abm7b5", "Bbaug"} CIonian = {"C", "Dm", "Em", "F", "G", "Am", "Bdim", "CMaj7", "Dm7", "Em7", "FMaj7", "G7", "Am7", "Bm7b5"} CsIonian = {"C#", "D#m", "Fm", "F#", "G#", "A#m", "Cdim", "C#Maj7", "D#7", "Fm7", "F#Maj7", "G#7", "A#m7", "Cm7b5"} DbIonian = {"Db", "Ebm", "Fm", "F#", "Ab", "Bbm", "Cdim", "DbMaj7", "Eb7", "Fm7", "F#Maj7", "Ab7", "Bbm7", "Cm7b5"} DIonian = {"D", "Em", "F#m", "G", "A", "Bm", "C#dim", "DMaj7", "Em7", "F#m7", "GMaj7", "A7", "Bm7", "C#m75m"} DsIonian = {"D#", "Fm", "Gm", "G#", "Bb", "Cm", "Ddim", "D#Maj7", "Fm7", "Gm7", "G#Maj7", "Bb7", "Cm7", "Dm7b5"} EbIonian = {"Eb", "Fm", "Gm", "G#", "Bb", "Cm", "Ddim", "EbMaj7", "Fm7", "Gm7", "AbMaj7", "Bb7", "Cm7", "Dm7b5"} EIonian = {"E", "F#m", "G#m", "A", "B", "C#m", "Ebdim", "EMaj7", "F#m7", "G#m7", "AMaj7", "B7", "C#7", "D#m7b5"} FIonian = {"F", "Gm", "Am", "Bb", "C", "Dm", "Edim", "FMaj7", "Gm7", "Am7", "BbMaj7", "C7", "Dm7", "Em7b5"} FsIonian = {"F#", "G#m", "A#m", "B", "C#", "D#m", "Fdim", "F#Maj7", "G#m7", "A#m7", "BMaj7", "C#7", "D#m7", "Fm7b5"} GbIonian = {"Gb", "Abm", "Bbm", "B", "Db", "Ebm", "Fdim", "GbMaj7", "Abm7", "Bbm7", "BMaj7", "Db7", "Ebm7", "Fm7b5"} GIonian = {"G", "A", "Bm", "C", "D", "Em", "F#dim", "GMaj7", "Am7", "Bm7", "CMaj7", "D7", "Em7", "F#m7b5"} GsIonian = {"G#", "A#m", "Cm", "C#", "Eb", "Fm", "Gdim", "G#Maj7", "Bbm7", "Cm7", "C#Maj7", "D#7", "Fm7", "Gm7b5"} AbIonian = {"Ab", "A#m", "Cm", "C#", "Eb", "Fm", "Gdim", "AbMaj7", "Bbm7", "Cm7", "C#Maj7", "D#7", "Fm7", "Gm7b5"} AIonian = {"A", "Bm", "C#m", "D", "E", "F#m", "G#dim", "AMaj7", "Bm7", "C#m7", "DMaj7", "E7", "F#m7", "G#m7b5"} AsIonian = {"A#", "Cm", "Dm", "D#", "F", "Gm", "Adim", "A#Maj7", "Cm7", "Dm7", "D#Maj7", "F7", "Gm7", "Am7b5"} BbIonian = {"Bb", "Cm", "Dm", "Eb", "F", "Gm", "Adim", "BbMaj7", "Cm7", "Dm7", "EbMaj7", "F7", "Gm7", "Am7b5"} BIonian = {"B", "C#m", "Ebm", "E", "F#", "G#m", "Bbdim", "BMaj7", "C#m7", "Ebm7", "EMaj7", "F#7", "G#m7", "Bbm7b5"} CDorian = {"Cm", "Dm", "Eb", "F", "Gm", "Adim", "Bb", "Cm7", "Dm7", "EbMaj7", "F7", "Gm7", "Am7b5", "BbMaj7"} CsDorian = {"C#m", "D#m", "E", "F#", "G#", "A#dim", "B", "C#m7", "D#m7", "EMaj7", "F#7", "G#m7", "A#m7b5", "BMaj7"} DbDorian = {"Dbm", "Ebm", "E", "Gb", "Abm", "Bbdim", "B", "Dbm7", "Ebm7", "EMaj7", "Gb7", "Abm7", "Bbm7b5", "BMaj7"} DDorian = {"Dm", "Em", "F", "G", "Am", "Bdim", "C", "Dm7", "Em7", "FMaj7", "G7", "Am7", "Bm7b5", "CMaj7"} DsDorian = {"D#m", "Fm", "F#", "G#", "Bbm", "Cdim", "C#", "D#m7", "Fm7", "F#Maj7", "G#7", "A#m7", "Cm7b5", "C#Maj7"} EbDorian = {"Ebm", "Fm", "Gb", "Ab", "Bbm", "Cdim", "Db", "Ebm7", "Fm7", "GbMaj7", "Ab7", "Bbm7", "Cm7b5", "DbMaj7"} EDorian = {"Em", "F#m", "G", "A", "Bm", "C#m", "D", "Em7", "F#m7", "GMaj7", "A7", "Bm7", "C#m7b5", "DMaj7"} FDorian = {"Fm", "Gm", "G#", "Bb", "Cm", "Ddim", "Eb", "Fm7", "Gm7", "G#Maj7", "Bb7", "Cm7", "Dm7b5", "EbMaj7"} FsDorian = {"F#m", "G#m", "A", "B", "C#m", "D#dim", "E", "F#m7", "G#m7", "AMaj7", "B7", "C#m7", "D#m7b5", "EMaj7"} GbDorian = {"Gbm", "Abm", "A", "B", "Dbm", "Ebdim", "E", "Gbm7", "Abm7", "AMaj7", "B7", "Dbm7", "Ebm7b5", "EMaj7"} GDorian = {"Gm", "Am", "Bb", "C", "Dm", "Edim", "F", "Gm7", "Am7", "BbMaj7", "C7", "Dm7", "Em7b5", "FMaj7"} GsDorian = {"G#m", "Bbm", "B", "C#", "Ebm", "Fdim", "F#", "G#m7", "Bbm7", "BMaj7", "C#7", "Ebm7", "Fm7b5", "F#Maj7"} AbDorian = {"Abm", "Bbm", "B", "C#", "Ebm", "Fdim", "F#", "Abm7", "Bbm7", "BMaj7", "C#7", "Ebm7", "Fm7b5", "F#Maj7"} ADorian = {"Am", "Bm", "C", "D", "Em", "F#dim", "G", "Am7", "Bm7", "CMaj7", "D7", "Em7", "F#m7b5", "Gmaj7"} AsDorian = {"A#m", "Cm", "C#", "Eb", "Fm", "Gdim", "G#", "Bbm7", "Cm7", "C#Maj7", "Eb7", "Fm7", "Gm7b5", "G#maj7"} BbDorian = {"Bbm", "Cm", "Db", "Eb", "Fm", "Gdim", "Ab", "Bbm7", "Cm7", "DbMaj7", "Eb7", "Fm7", "Gm7b5", "Abmaj7"} BDorian = {"Bm", "Dbm", "D", "E", "Gbm", "Abdim", "A", "Bm7", "Dbm7", "DMaj7", "E7", "Gbm7", "Abm7b5", "AMaj7"} CPhrygian = {"Cm", "Db", "Eb", "Fm", "Gdim", "Ab", "Bbm", "Cm7", "DbMaj7", "Eb7", "Fm7", "Gm7b5", "AbMaj7", "Bbm"} CsPhrygian = { "C#m", "D", "E", "F#m", "G#dim", "A", "Bm", "C#m7", "DMaj7", "E7", "F#m7", "G#m7b5", "AMaj7", "Bm7"} DbPhrygian = { "Dbm", "D", "E", "Gbm", "Abdim", "A", "Bm", "Dbm7", "DMaj7", "E7", "Gbm7", "Abm7b5", "AMaj7", "Bm7"} DPhrygian = { "Dm", "Eb", "F", "Gm", "Adim", "Bb", "Cm", "Dm7", "EbMaj7", "F7", "Gm7", "Am7b5", "BbMaj7", "Cm7"} DsPhrygian = { "D#m", "E", "F#", "G#m", "A#dim", "B", "C#m", "D#m7", "EMaj7", "F#7", "G#m7", "A#m7b5", "BMaj7", "C#m7"} EbPhrygian = { "Ebm", "E", "Gb", "Abm", "Bbdim", "B", "Dbm", "Ebm7", "EMaj7", "Gb7", "Abm7", "Bbm7b5", "BMaj7", "Dbm7"} EPhrygian = { "Em", "F", "G", "Am", "Bdim", "C", "Dm", "Em7", "FMaj7", "G7", "Am7", "Bm7b5", "CMaj7", "Dm7"} FPhrygian = { "Fm", "Gb", "Ab", "Bbm", "Cdim", "Db", "Ebm", "Fm7", "GbMaj7", "Ab7", "Bbm7", "Cm7b5", "DbMaj7", "Ebm7"} FsPhrygian = { "F#m", "G", "A", "Bm", "C#dim", "D", "Em", "F#m7", "GMaj7", "A7", "Bm7", "C#m7b5", "DMaj7", "Em7"} GbPhrygian = { "Gbm", "G", "A", "Bm", "Dbdim", "D", "Em", "Gbm7", "GMaj7", "A7", "Bm7", "Dbm7b5", "DMaj7", "Em7"} GPhrygian = { "Gm", "Ab", "Bb", "Cm", "Ddim", "Eb", "Fm", "Gm7", "AbMaj7", "Bb7", "Cm7", "Dm7b5", "EbMaj7", "Fm7"} GsPhrygian = { "G#m", "A", "B", "C#m", "D#dim", "E", "F#m", "G#m7", "AMaj7", "B7", "C#m7", "D#m7b5", "EMaj7", "F#m7"} AbPhrygian = { "Abm", "A", "B", "Dbm", "Ebdim", "E", "Gbm", "Abm7", "AMaj", "B7", "Dbm7", "Ebm7b5", "EMaj7", "Gbm7"} APhrygian = { "Am", "Bb", "C", "Dm", "Edim", "F", "Gm", "Am7", "BbMaj7", "C7", "Dm7", "Em7b5", "FMaj7", "Gm7"} AsPhrygian = { "A#m", "B", "C#", "D#m", "Fdim", "F#", "G#m", "A#m7", "BMaj7", "C#7", "D#m7", "Fm7b5", "F#Maj7", "G#m7"} BbPhrygian = { "Bbm", "B", "Db", "Ebm", "Fdim", "Gb", "Abm", "Bbm7", "BMaj7", "Db7", "Ebm7", "Fm7b5", "GbMaj7", "Abm7"} BPhrygian = { "Bm", "C", "D", "Em", "Gbdim", "G", "Am", "Bm7", "CMaj7", "D7", "Em7", "Gbm7b5", "GMaj7", "Am7"} CLydian = {"C", "D", "Em", "Gbdim", "G", "Am", "Bm", "CMaj7", "D7", "Em7", "Gbm7b5", "GMaj", "7Am7", "Bm7"} CsLydian = { "C#", "D#", "Fm", "Gdim", "G#", "A#m", "Cm", "C#Maj7", "D#7", "Fm7", "Gm7b5", "G#Maj7", "A#m7", "Cm7"} DbLydian = { "Db", "Eb", "Fm", "Gdim", "Ab", "Bbm", "Cm", "DbMaj7", "Eb7", "Fm7", "Gm7b5", "AbMaj7", "Bbm7", "Cm7"} DLydian = { "D", "E", "Gbm", "Abdim", "A", "Bm", "Dbm", "DMaj7", "E7", "Gbm7", "Abm7b5", "AMaj7", "Bm7", "Dbm7"} DsLydian = { "D#", "F", "Gm", "Adim", "A#", "Cm", "Dm", "D#Maj7", "F7", "Gm7", "Am7b5", "A#Maj7", "Cm7", "Dm7"} EbLydian = { "Eb", "F", "Gm", "Adim", "Bb", "Cm", "Dm", "EbMaj7", "F7", "Gm7", "Am7b5", "BbMaj7", "Cm7", "Dm7"} ELydian = { "E", "Gb", "Abm", "Bbdim", "B", "Dbm", "Ebm", "EMaj7", "Gb7", "Abm7", "Bbm7b5", "BMaj7", "Dbm7", "Ebm7"} FLydian = { "F", "G", "Am", "Bdim", "C", "Dm", "Em", "FMaj7", "G7", "Am7", "Bm7b5", "CMaj7", "Dm7", "Em7"} FsLydian = { "F#", "G#", "A#m", "Cdim", "C#", "D#m", "Fm", "F#Maj7", "G#7", "A#m7", "Cm7b5", "C#Maj7", "D#m7", "Fm7"} GbLydian = { "Gb", "Ab", "Bbm", "Cdim", "Db", "Ebm", "Fm", "GbMaj7", "Ab7", "Bbm7", "Cm7b5", "DbMaj7", "Ebm7", "Fm7"} GLydian = { "G", "A", "Bm", "Dbdim", "D", "Em", "Gbm", "GMaj7", "A7", "Bm7", "Dbm7b5", "DMaj7", "Em7", "Gbm7"} GsLydian = { "G#", "A#", "Cm", "Ddim", "D#", "Fm", "Gm", "G#Maj7", "A#7", "Cm7", "Dm7b5", "D#Maj7", "Fm7", "Gm7"} AbLydian = { "Ab", "Bb", "Cm", "Ddim", "Eb", "Fm", "Gm", "AbMaj7", "Bb7", "Cm7", "Dm7b5", "EbMaj7", "Fm7", "Gm7"} ALydian = { "A", "B", "Dbm", "Ebdim", "E", "Gbm", "Abm", "AMaj7", "B7", "Dbm7", "Ebm7b5", "EMaj7", "Gbm7", "Abm7"} AsLydian = { "A#", "C", "Dm", "Edim", "F", "Gm", "Am", "A#Maj7", "C7", "Dm7", "Em7b5", "FMaj7", "Gm7", "Am7"} BbLydian = { "Bb", "C", "Dm", "Edim", "F", "Gm", "Am", "Bbmaj7", "C7", "Dm7", "Em7b5", "FMaj7", "Gm7", "Am7"} BLydian = { "B", "Db", "Ebm", "Fdim", "Gb", "Abm", "Bbm", "BMaj7", "Db7", "Ebm7", "Fm7b5", "GbMaj7", "Abm7", "Bbm7"} CMixolydian = {"C", "Dm", "Edim", "F", "Gm", "Am", "Bb", "C7", "Dm7", "Em7b5", "FMaj7", "Gm7", "Am7", "BbMaj7"} CsMixolydian = { "C#", "D#m", "Fdim", "F#", "G#m", "A#m", "B", "C#7", "D#m7", "Fm7b5", "F#Maj7", "G#m7", "A#m7", "BMaj7"} DbMixolydian = { "Db", "Ebm", "Fdim", "Gb", "Abm", "Bbm", "B", "Db7", "Ebm7", "Fm7b5", "GbMaj7", "Abm7", "Bbm7", "BMaj7"} DMixolydian = { "D", "Em", "Gbdim", "G", "Am", "Bm", "C", "D7", "Em7", "Gbm7b5", "GMaj7", "Am7", "Bm7", "CMaj7"} DsMixolydian = { "D#", "Fm", "Gdim", "G#", "A#m", "Cm", "C#", "D#7", "Fm7", "Gm7b5", "G#Maj7", "A#m7", "Cm7", "C#Maj7"} EbMixolydian = { "Eb", "Fm", "Gdim", "Ab", "Bbm", "Cm", "Db", "Eb7", "Fm7", "Gm7b5", "AbMaj7", "Bbm7", "Cm7", "DbMaj7"} EMixolydian = { "E", "Gbm", "Abdim", "A", "Bm", "Dbm", "D", "E7", "Gbm7", "Abm7b5", "AMaj7", "Bm7", "Dbm7", "DMaj7"} FMixolydian = { "F", "Gm", "Adim", "Bb", "Cm", "Dm", "Eb", "F7", "Gm7", "Am7b5", "BbMaj7", "Cm7", "Dm7", "EbMaj7"} FsMixolydian = { "F#", "G#m", "A#dim", "B", "C#m", "D#m", "E", "F#7", "G#m7", "A#m7b5", "BMaj7", "C#m7", "D#m7", "EMaj7"} GbMixolydian = { "Gb", "Abm", "Bbdim", "B", "Dbm", "Ebm", "E", "Gb7", "Abm7", "Bbm7b5", "BMaj7", "Dbm7", "Ebm7", "EMaj7"} GMixolydian = { "G", "Am", "Bdim", "C", "Dm", "Em", "F", "G7", "Am7", "Bm7b5", "CMaj7", "Dm7", "Em7", "FMaj7"} GsMixolydian = { "G#", "A#m", "Cdim", "C#", "D#m", "Fm", "F#", "G#7", "A#m7", "Cm7b5", "C#Maj7", "D#m7", "F#m", "F#Maj7"} AbMixolydian = { "Ab", "Bbm", "Cdim", "Db", "Ebm", "Fm", "Gb", "Ab7", "Bbm7", "Cm7b5", "DbMaj7", "Ebm7", "Fm7", "GbMaj7"} AMixolydian = { "A", "Bm", "Dbdim", "D", "Em", "Gbm", "G", "A7", "Bm7", "Dbm7b5", "DMaj7", "Em7", "Gbm7", "GMaj7"} AsMixolydian = { "A#", "Cm", "Ddim", "D#", "Fm", "Gm", "G#", "A#7", "Cm7", "Dm7b5", "D#maj7", "Fm7", "Gm7", "G#Maj7"} BbMixolydian = { "Bb", "Cm", "Ddim", "Eb", "Fm", "Gm", "Ab", "Bb7", "Cm7", "Dm7b5", "EbMaj7", "Fm7", "Gm7", "Abmaj7"} BMixolydian = { "B", "Dbm", "Ebdim", "E", "Gbm", "Abm", "A", "B7", "Dbm7", "Ebm7b5", "EMaj7", "Gbm7", "Abm7", "AMaj7"} CAeolian = {"Cm", "Ddim", "Eb", "Fm", "Gm", "Ab", "Bb", "Cm7", "Dm7b5", "EbMaj7", "Fm7", "Gm7", "AbMaj7", "Bb7"} CsAeolian = { "C#m", "D#dim", "E", "F#m", "G#m", "A", "B", "C#m7", "D#m7b5", "EMaj7", "F#m7", "G#m7", "AMaj7", "B7"} DbAeolian = { "Dbm", "Ebdim", "E", "Gbm", "Abm", "A", "B", "Dbm7", "Ebm7b5", "EMaj7", "Gbm7", "Abm7", "AMaj7", "B7"} DAeolian = { "Dm", "Edim", "F", "Gm", "Am", "Bb", "C", "Dm7", "Em7b5", "FMaj7", "Gm7", "Am7", "BbMaj7", "C7"} DsAeolian = { "D#m", "Fdim", "F#", "G#m", "A#M", "B", "C#", "D#m7", "Fm7b5", "F#Maj7", "G#m7", "A#m7", "BMaj7", "C#7"} EbAeolian = { "Ebm", "Fdim", "Gb", "Abm", "Bbm", "B", "Db", "Ebm7", "Fm7b5", "GbMaj7", "Abm7", "Bbm7", "BMaj7", "Db7"} EAeolian = { "Em", "Gbdim", "G", "Am", "Bm", "C", "D", "Em7", "Gbm7b5", "GMaj7", "Am7", "Bm7", "CMaj7", "D7"} FAeolian = { "Fm", "Gdim", "Ab", "Bbm", "Cm", "Db", "Eb", "Fm7", "Gm7b5", "AbMaj7", "Bbm7", "Cm7", "Dbmaj7", "Eb7"} FsAeolian = { "F#m", "G#dim", "A", "Bm", "C#m", "D", "E", "F#m7", "G#m7b5", "AMaj7", "Bm7", "C#m7", "DMaj7", "E7"} GbAeolian = { "Gbm", "Abdim", "A", "Bm", "Dbm", "D", "E", "Gbm7", "Abm7b5", "Amaj7", "Bm7", "Dbm7", "DMaj7", "E7"} GAeolian = { "Gm", "Adim", "Bb", "Cm", "Dm", "Eb", "F", "Gm7", "Am7b5", "BbMaj7", "Cm7", "Dm7", "EbMaj7", "F7"} GsAeolian = { "G#m", "A#dim", "B", "C#m", "D#m", "E", "F#", "G#m7", "A#m7b5", "BMaj7", "C#m7", "D#m7", "EMaj7", "F#7"} AbAeolian = { "Abm", "Bbdim", "B", "Dbm", "Ebm", "E", "Gb", "Abm7", "Bbm7b5", "BMaj7", "Dbm7", "Ebm7", "EMaj7", "Gb7"} AAeolian = { "Am", "Bdim", "C", "Dm", "Em", "F", "G", "Am7", "Bm7b5", "CMaj7", "Dm7", "Em8", "FMaj7", "G7"} AsAeolian = { "A#m", "Cdim", "C#", "D#m", "Fm", "F#", "G#", "A#m7", "Cm7b5", "C#Maj7", "D#m7", "Fm7", "F#maj7", "G#7"} BbAeolian = { "Bbm", "Cdim", "Db", "Ebm", "Fm", "Gb", "Ab", "Bbm7", "Cm7b5", "Dbmaj7", "Ebm7", "Fm7", "Gbmaj7", "Ab7"} BAeolian = { "Bm", "Dbdim", "D", "Em", "Gbm", "G", "A", "Bm7", "Dbm7b5", "DMaj7", "Em7", "Gbm7", "GMaj7", "A7"} CLocrian = {"Cdim", "C#", "Ebm", "Fm", "F#", "Ab", "Bdim", "Cm7b5", "DbMaj7", "Ebm7", "Fm7", "F#Maj7", "Ab7", "Bbm7"} CsLocrian = { "C#dim", "D", "Em", "F#m", "G", "A", "Bm", "C#m7b5", "DMaj7", "Em7", "F#m7", "GMaj7", "A7", "Bm7"} DbLocrian = { "Dbdim", "D", "Em", "Gbm", "G", "A", "Bm", "Dbm7b5", "DMaj7", "Em7", "Gbm7", "GMaj7", "A7", "Bm7"} DLocrian = { "Ddim", "Eb", "Fm", "Gm", "Ab", "Bb", "Cm", "Dm7b5", "EbMaj7", "Fm7", "Gm7", "AbMaj7", "Bb7", "Cm7"} DsLocrian = { "D#dim", "E", "F#m", "G#m", "A", "B", "C#m", "D#m7b5", "EMaj", "F#m7", "G#m7", "AMaj7", "B7", "C#m7"} EbLocrian = { "Ebdim", "E", "Gbm", "Abm", "A", "B", "Dbm", "Ebm7b5", "EMaj7", "Gbm7", "Abm7", "AMaj7", "B7", "Dbm7"} ELocrian = { "Edim", "F", "Gm", "Am", "bb", "C", "Dm", "Em7b5", "FMaj7", "Gm7", "Am7", "Bbmaj7", "C7", "Dm7"} FLocrian = { "Fdim", "Gb", "Abm", "Bbm", "B", "Db", "Ebm", "Fm7b5", "GbMaj7", "Abm7", "Bbm7", "BMaj7", "Db7", "Ebm7"} FsLocrian = { "F#dim", "G", "Am", "Bm", "C", "D", "Em", "F#m7b5", "GMaj7", "Am7", "Bm7", "CMaj7", "D7", "Em7"} GbLocrian = { "Gbdim", "G", "Am", "Bm", "C", "D", "Em", "Gbm7b5", "GMaj7", "Am7", "Bm7", "CMaj7", "D7", "Em7"} GLocrian = { "Gdim", "Ab", "Bbm", "Cm", "Db", "Eb", "Fm", "Gm7b5", "Abmaj7", "Bbm7", "Cm7", "Dbmaj7", "Eb7", "Fm7"} GsLocrian = { "G#dim", "A", "Bm", "C#m", "D", "E", "F#m", "G#m7b5", "AMaj7", "Bm7", "C#m7", "DMaj7", "E7", "F#m7"} AbLocrian = { "Abdim", "A", "Bm", "Dbm", "D", "E", "Gbm", "Abm7b5", "AMaj7", "Bm7", "Dbm7", "DMaj7", "E7", "Gbm7"} ALocrian = { "Adim", "Bb", "Cm", "Dm", "Eb", "F", "Gm", "Am7b5", "BbMaj7", "Cm7", "Dm7", "Ebmaj7", "F7", "Gm7"} AsLocrian = { "A#dim", "B", "C#m", "D#m", "E", "F#", "G#m", "A#m7b5", "BMaj7", "C#m7", "D#m7", "EMaj7", "F#7", "G#m7"} BbLocrian = { "Bbdim", "B", "Dbm", "Ebm", "E", "Gb", "Abm", "Bbm7b5", "BMaj7", "Dbm7", "Ebm7", "EMaj7", "Gb7", "Abm7"} BLocrian = { "Bdim", "C", "Dm", "Em", "F", "G", "Am", "Bm7b5", "CMaj7", "Dm7", "Em7", "FMaj7", "G7", "Am7"} --chord = minor_c --chord4 = major_chords_c[6] --Msg("Major Chord C =") --Msg(major_chords_c[6]) --local note_names = { [1] = "C", [2] = "Dm", [3] = "Em", [4] = "F", [5] = "G", [6] = "Am", [7] = "Bdim", [8] = "CMaj7", [9] = "Dm7", [10] = "Em7", [11] = "FMaj7", [12] = "G7", [13] = "Am7", [14] = "Bm7b5"} --local note_names = { [1] = "C", [2] = "Dm", [3] = "Em", [4] = "F", [5] = "G", [6] = "Am", [7] = "Bdim", [8] = "CMaj7", [9] = "Dm7", [10] = "Em7", [11] = "FMaj7", [12] = "G7", [13] = "Am7", [14] = "Bm7b5"} --local selected_note = note_names[number] --local selected_note = major_chords[inkey] --Msg(selected_note) local function key_chord_input() retval, num_markers, num_regionsOut = reaper.CountProjectMarkers(0) desired_region_id = num_regionsOut time = reaper.GetCursorPosition() markeridx, regionidx = reaper.GetLastMarkerAndCurRegion(0, time) retval, isrgn, pos, rgnend, name, markrgnindexnumber, color = reaper.EnumProjectMarkers3(0, regionidx) if time == pos then goto finish end if time < rgnend then reaper.SetProjectMarker3( 0, markrgnindexnumber, 1, pos, time, name, color ) reaper.AddProjectMarker2(0, 1, time, rgnend, name, desired_region_id, color) goto finish end ::finish:: time = reaper.GetCursorPosition() markrgnindexnumber, rgnendOut = reaper.GetLastMarkerAndCurRegion(0, time) retval, isrgnOut, posOut, rgnendOut, nameOut, markrgnindexnumberOut = reaper.EnumProjectMarkers(rgnendOut) clear_name_flag = 0 --this flag is needed in the SetProjectMarker4 function to enable the region name to be cleared --root_name = GUI.elms.root_choice.optarray[ GUI.Val("root_choice") ] --newName = (root_name .. chord_type) --newName = ("C" .. chord_type) --Msg(newName) --- if newName == "" then clear_name_flag = 1 end --if removing the -L leaves an empty name string pass the 1 flag to clear name reaper.SetProjectMarker4(0, markrgnindexnumberOut, true, posOut, rgnendOut, keychordName, 0, clear_name_flag) --chord_type = "" commandID74 = reaper.NamedCommandLookup("_RSce47da3c9b1238de71cc94a1cb99732b9abd5e41") reaper.Main_OnCommand(commandID74, 0) -- Script: ReaTrak Go to start of next region.lua commandID75 = reaper.NamedCommandLookup("_RS0b4230c08f384a4318c16aac4e2404c9fef86887") reaper.Main_OnCommand(commandID75, 0) -- Script: ReaTrak Snap all regions to grid.eel end function btn_click_chord1() keychordName = chord[1] key_chord_input () end function btn_click_chord2() keychordName = chord[2] key_chord_input () end function btn_click_chord3() keychordName = chord[3] key_chord_input () end function btn_click_chord4() keychordName = chord[4] key_chord_input () end function btn_click_chord5() keychordName = chord[5] key_chord_input () end function btn_click_chord6() keychordName = chord[6] key_chord_input () end function btn_click_chord7() keychordName = chord[7] key_chord_input () end function btn_click_chord8() keychordName = chord[8] key_chord_input () end function btn_click_chord9() keychordName = chord[9] key_chord_input () end function btn_click_chord10() keychordName = chord[10] key_chord_input () end function btn_click_chord11() keychordName = chord[11] key_chord_input () end function btn_click_chord12() keychordName = chord[12] key_chord_input () end function btn_click_chord13() keychordName = chord[13] key_chord_input () end function btn_click_chord14() keychordName = chord[14] key_chord_input () end --GUI.New("my_frm9", "Frame", 4, 32, 255, 340, 20, true, true, "elm_bg", 4) --function update_buttons() --end GUI.New("key_choice", "Radio", 3, 200, 40, 610, 110, "Select Key", "C,C♯,Db,D,D♯,Eb,E,F,F♯,Gb,G,G♯,Ab,A,A♯,Bb,B", "h", 15) --GUI.elms.my_frm9.text = " Choose Your Key" --GUI.elms.my_frm9.col_txt = "white" --GUI.New("scale_choice", "Radio", 4, 20, 100, 140, 330, "Select Scale", "Major,Minor,Harmonic Major,Harmonic Minor,Melodic Major,Melodic Minor,Ionian,Dorian,Phrygian,Lydian,Mixolydian,Aeolian,Locrian", "v", 4) GUI.New("scale_choice", "Menubox", 3, 55, 40, 130, 20, "Scale", "Major,Minor,Harmonic Major,Harmonic Minor,Melodic Major,Melodic Minor,Ionian,Dorian,Phrygian,Lydian,Mixolydian,Aeolian,Locrian") --GUI.New("scale_choice2", "Menubox", 4, 120, 200, 64, 20, "Select Scale", "Major,Minor,Harmonic Major,Harmonic Minor,Melodic Major,Melodic Minor,Ionian,Dorian,Phrygian,Lydian,Mixolydian,Aeolian,Locrian") --if GUI.elms.key_choice.optarray then GUI.elms.lb_key_chord = nil end scale = GUI.elms.scale_choice.optarray[ GUI.Val("scale_choice") ] --inkey = GUI.elms.key_choice.optarray[ GUI.Val("key_choice") ] --if scale == nil then scale = "Major" end --if inkey == nil then inkey = "C" end --chord1 = "C" --GUI.elm_updated = false --Msg("Scale") -- Msg(scale) --if scale == "Minor" then scale_minor() end --scale = GUI.elms.scale_choice.optarray[ GUI.Val("scale_choice") ] --inkey = GUI.elms.key_choice.optarray[ GUI.Val("key_choice") ] --local tblAlphabet = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}; --Msg(tblAlphabet[4]) -- Radio call funtion on click function GUI.elms.key_choice:onmouseup() -- Run the original method GUI.Radio.onmouseup(self) -- And then your function update_chord_buttons() end function GUI.elms.scale_choice:onmouseup() -- Run the original method GUI.Menubox.onmouseup(self) -- And then your function update_chord_buttons() end --Update Chord Buttons to new Key/Scale function update_chord_buttons () --Delete old buttons before updating GUI.elms.lb_chords_on:ondelete() GUI.elms.lb_key_chord:ondelete() GUI.elms.key_chord1:ondelete() GUI.elms.key_chord2:ondelete() GUI.elms.key_chord3:ondelete() GUI.elms.key_chord4:ondelete() GUI.elms.key_chord5:ondelete() GUI.elms.key_chord6:ondelete() GUI.elms.key_chord7:ondelete() GUI.elms.key_chord8:ondelete() GUI.elms.key_chord9:ondelete() GUI.elms.key_chord10:ondelete() GUI.elms.key_chord11:ondelete() GUI.elms.key_chord12:ondelete() GUI.elms.key_chord13:ondelete() GUI.elms.key_chord14:ondelete() --Use Legal characters from Radio s=# and remove underscore key_numbers = GUI.Val("key_choice") key_names = { [1] = "C", [2] = "Cs", [3] = "Db", [4] = "D", [5] = "Ds", [6] = "Eb", [7] = "E", [8] = "F", [9] = "Fs", [10] = "Gb", [11] = "G", [12] = "Gs", [13] = "Ab", [14] = "A", [15] = "As", [16] = "Bb", [17] = "B"} selected_key = key_names[key_numbers] scale_numbers = GUI.Val("scale_choice") scale_names = { [1] = "Major", [2] = "Minor", [3] = "Harmonic_Major", [4] = "Harmonic_Minor", [5] = "Melodic_Major", [6] = "Melodic_Minor", [7] = "Ionian", [8] = "Dorian", [9] = "Phrygian", [10] = "Lydian", [11] = "Mixolydian", [12] = "Aeolian", [13] = "Locrian"} selected_scale = scale_names[scale_numbers] scale = GUI.elms.scale_choice.optarray[ GUI.Val("scale_choice") ] inkey = GUI.elms.key_choice.optarray[ GUI.Val("key_choice") ] chord_val = tostring(selected_key..selected_scale) chord = _G[chord_val] --newname = chord_val newname = selected_key:gsub("s", "♯") newname2 = selected_scale:gsub("_", " ") GUI.New("lb_chords_on", "Label", 3, 20+x9, 0+y9, "Chords on", true, 1) GUI.New("lb_key_chord", "Label", 3, 155+x9, 0+y9, newname, true, 1) GUI.New("lb_key_scale", "Label", 3, 195+x9, 0+y9, newname2, true, 1) GUI.New("key_chord1", "Button", 3, 16+x9, 55+y9, 70, 20, chord[1], btn_click_chord1) GUI.New("key_chord2", "Button", 3, 96+x9, 55+y9, 70, 20, chord[2], btn_click_chord2) GUI.New("key_chord3", "Button", 3, 176+x9, 55+y9, 70, 20, chord[3], btn_click_chord3) GUI.New("key_chord4", "Button", 3, 256+x9, 55+y9, 70, 20, chord[4], btn_click_chord4) GUI.New("key_chord5", "Button", 3, 336+x9, 55+y9, 70, 20, chord[5], btn_click_chord5) GUI.New("key_chord6", "Button", 3, 416+x9, 55+y9, 70, 20, chord[6], btn_click_chord6) GUI.New("key_chord7", "Button", 3, 496+x9, 55+y9, 70, 20, chord[7], btn_click_chord7) GUI.New("key_chord8", "Button", 3, 16+x9, 80+y9, 70, 20, chord[8], btn_click_chord8) GUI.New("key_chord9", "Button", 3, 96+x9, 80+y9, 70, 20, chord[9], btn_click_chord9) GUI.New("key_chord10", "Button", 3, 176+x9, 80+y9, 70, 20, chord[10], btn_click_chord10) GUI.New("key_chord11", "Button", 3, 256+x9, 80+y9, 70, 20, chord[11], btn_click_chord11) GUI.New("key_chord12", "Button", 3, 336+x9, 80+y9, 70, 20, chord[12], btn_click_chord12) GUI.New("key_chord13", "Button", 3, 416+x9, 80+y9, 70, 20, chord[13], btn_click_chord13) GUI.New("key_chord14", "Button", 3, 496+x9, 80+y9, 70, 20, chord[14], btn_click_chord14) end --chordname1 = GUI.Val("key_choice") --button_1.func = new_chord_function key_numbers = GUI.Val("key_choice") key_names = { [1] = "C", [2] = "Cs", [3] = "Db", [4] = "D", [5] = "Ds", [6] = "Eb", [7] = "E", [8] = "F", [9] = "Fs", [10] = "Gb", [11] = "G", [12] = "Gs", [13] = "Ab", [14] = "A", [15] = "As", [16] = "Bb", [17] = "B"} selected_key = key_names[key_numbers] scale_numbers = GUI.Val("scale_choice") scale_names = { [1] = "Major", [2] = "Minor", [3] = "Harmonic_Major", [4] = "Harmonic_Minor", [5] = "Melodic_Major", [6] = "Melodic_Minor", [7] = "Ionian", [8] = "Dorian", [9] = "Phrygian", [10] = "Lydian", [11] = "Mixolydian", [12] = "Aeolian", [13] = "Locrian"} selected_scale = scale_names[scale_numbers] scale = GUI.elms.scale_choice.optarray[ GUI.Val("scale_choice") ] inkey = GUI.elms.key_choice.optarray[ GUI.Val("key_choice") ] chord_val = tostring(selected_key..selected_scale) chord = _G[chord_val] --newname = chord_val newname = selected_key:gsub("s", "♯") newname2 = selected_scale:gsub("_", " ") -- Button Position Adjustment add e.g x = -10 or x = 0 or x = 10 x9 = 200 y9 = 160 GUI.New("lb_chords_on", "Label", 3, 20+x9, 0+y9, "Chord on", true, 1) GUI.New("lb_key_chord", "Label", 3, 155+x9, 0+y9, newname, true, 1) GUI.New("lb_key_scale", "Label", 3, 195+x9, 0+y9, newname2, true, 1) GUI.New("key_chord1", "Button", 3, 16+x9, 55+y9, 70, 20, chord[1], btn_click_chord1) GUI.New("key_chord2", "Button", 3, 96+x9, 55+y9, 70, 20, chord[2], btn_click_chord2) GUI.New("key_chord3", "Button", 3, 176+x9, 55+y9, 70, 20, chord[3], btn_click_chord3) GUI.New("key_chord4", "Button", 3, 256+x9, 55+y9, 70, 20, chord[4], btn_click_chord4) GUI.New("key_chord5", "Button", 3, 336+x9, 55+y9, 70, 20, chord[5], btn_click_chord5) GUI.New("key_chord6", "Button", 3, 416+x9, 55+y9, 70, 20, chord[6], btn_click_chord6) GUI.New("key_chord7", "Button", 3, 496+x9, 55+y9, 70, 20, chord[7], btn_click_chord7) GUI.New("key_chord8", "Button", 3, 16+x9, 80+y9, 70, 20, chord[8], btn_click_chord8) GUI.New("key_chord9", "Button", 3, 96+x9, 80+y9, 70, 20, chord[9], btn_click_chord9) GUI.New("key_chord10", "Button", 3, 176+x9, 80+y9, 70, 20, chord[10], btn_click_chord10) GUI.New("key_chord11", "Button", 3, 256+x9, 80+y9, 70, 20, chord[11], btn_click_chord11) GUI.New("key_chord12", "Button", 3, 336+x9, 80+y9, 70, 20, chord[12], btn_click_chord12) GUI.New("key_chord13", "Button", 3, 416+x9, 80+y9, 70, 20, chord[13], btn_click_chord13) GUI.New("key_chord14", "Button", 3, 496+x9, 80+y9, 70, 20, chord[14], btn_click_chord14) ------------------------------------ -------- Tab 3 Elements ------------ ------------------------------------ ---Sections function btn_click_sect_help() commandID1 = reaper.NamedCommandLookup("_RSbe31a3de2526d47fa8357af06379275cceb291c2") reaper.Main_OnCommand(commandID1, 0) -- Script: ReaTrak sections help.lua end function btn_click_count_in() commandID1 = reaper.NamedCommandLookup("_b2ce30f0f372ec4995a64701ccb9169a") reaper.Main_OnCommand(commandID1, 0) -- Custom: ReaTrak Set to Count-In end function btn_click_intro_post_fill() commandID2 = reaper.NamedCommandLookup("_f7c5b3a543e08d43804cf4dbf3c1cef0") reaper.Main_OnCommand(commandID2, 0) -- Custom: ReaTrak Set to Intro Post Fill end function btn_click_intro() commandID3 = reaper.NamedCommandLookup("_b6b4a8efc7c17e4293bd5b72e6617705") reaper.Main_OnCommand(commandID3, 0) -- Custom: ReaTrak Set to Intro end function btn_click_intro_fill() commandID4 = reaper.NamedCommandLookup("_90d9c3359514c547af6790ca8994a692") reaper.Main_OnCommand(commandID4, 0) -- Custom: ReaTrak Set to Intro Fill end function btn_click_verse_post_fill() commandID5 = reaper.NamedCommandLookup("_9a584ba9b330d343a95c2aa93fa6117b") reaper.Main_OnCommand(commandID5, 0) -- Custom: ReaTrak Set to Verse Post Fill end function btn_click_verse() commandID6 = reaper.NamedCommandLookup("_ee462747fde1024f9cbab032dc78f12a") reaper.Main_OnCommand(commandID6, 0) -- Custom: ReaTrak Set to Verse end function btn_click_verse_fill() commandID7 = reaper.NamedCommandLookup("_705d2ad890997c47910db95a51711f24") reaper.Main_OnCommand(commandID7, 0) -- Custom: ReaTrak Set to Verse Fill end function btn_click_verse_ending() commandID8 = reaper.NamedCommandLookup("_a8a68b8ec61b344493682802d9ac44a4") reaper.Main_OnCommand(commandID8, 0) -- Custom: ReaTrak Set to Ending Verse end function btn_click_set_drum_riff_btn1() commandID171 = reaper.NamedCommandLookup("_5e1fe04adc6fe64d92f8e19d2fb2f59f") reaper.Main_OnCommand(commandID171, 0) -- Custom: ReaTrak Set to Drum Riff end ---Sections Row 2 function btn_click_bridge_post_fill() commandID9 = reaper.NamedCommandLookup("_34073107cc237b4f98d4c3dffd500c90") reaper.Main_OnCommand(commandID9, 0) -- Custom: ReaTrak Set to Bridge Post Fill end function btn_click_bridge() commandID10 = reaper.NamedCommandLookup("_41fcba1bbfc22647825c27de49981278") reaper.Main_OnCommand(commandID10, 0) -- Custom: ReaTrak Set to Bridge end function btn_click_bridge_fill() commandID11 = reaper.NamedCommandLookup("_0760f57fdfe45641ba1da32b9e6155aa") reaper.Main_OnCommand(commandID11, 0) -- Custom: ReaTrak Set to Bridge Fill end function btn_click_pre_chorus_post_fill() commandID12 = reaper.NamedCommandLookup("_715ac062b062dc4ba22ddc50252f1e76") reaper.Main_OnCommand(commandID12, 0) -- Custom: ReaTrak Set to Pre Chorus Post Fill end function btn_click_pre_chorus() commandID13 = reaper.NamedCommandLookup("_cbf39ae594389349ba38f9a5b1175059") reaper.Main_OnCommand(commandID13, 0) -- Custom: ReaTrak Set to Pre Chorus end function btn_click_pre_chorus_fill() commandID14 = reaper.NamedCommandLookup("_3fe2d48d4d0eba4eae0ddd0731d3410f") reaper.Main_OnCommand(commandID14, 0) -- Custom: ReaTrak Set to Pre Chorus Fill end function btn_click_chorus_post_fill() commandID15 = reaper.NamedCommandLookup("_9f3494ace8dc654ca2f8731d56fba4c4") reaper.Main_OnCommand(commandID15, 0) -- Custom: ReaTrak Set to Chorus Post Fill end function btn_click_chorus() commandID16 = reaper.NamedCommandLookup("_11153a391144ba4c959ddd4915885bfd") reaper.Main_OnCommand(commandID16, 0) -- Custom: ReaTrak Set to Chorus end function btn_click_chorus_fill() commandID17 = reaper.NamedCommandLookup("_226c876dff5f82488ad78626dfce652b") reaper.Main_OnCommand(commandID17, 0) -- Custom: ReaTrak Set to Chorus Fill end function btn_click_chorus_ending() commandID18 = reaper.NamedCommandLookup("_f2f3a75e68c966459bdf4fa0460389a8") reaper.Main_OnCommand(commandID18, 0) -- Custom: ReaTrak Set to Ending Chorus end ---Sections Row 3 function btn_click_rest() commandID22 = reaper.NamedCommandLookup("_c7b48c7e54f8e94f9f3437b58f81d549") reaper.Main_OnCommand(commandID22, 0) -- Custom: ReaTrak Set to Rest end function btn_click_shot() commandID23 = reaper.NamedCommandLookup("_929e978567d96b439647f7437c867c86") reaper.Main_OnCommand(commandID23, 0) -- Custom: ReaTrak Set to Shot end function btn_click_hold() commandID24 = reaper.NamedCommandLookup("_36088becd3ad3948b6d69148121ae590") reaper.Main_OnCommand(commandID24, 0) -- Custom: ReaTrak Set to Hold end -- Button Position Adjustment add e.g x = -10 or x = 0 or x = 10 x1 = -5 y1 = 210 --GUI.New("lb_Sect", "Label", 3, 20+x1, 20+y1, "ReaTrak Sections", true, 1) --GUI.New("sect_help_btn", "Button", 3, 225+x1, 32+y1, 40, 17, "HELP", btn_click_sect_help) --GUI.elms.sect_help_btn.col_txt = "btn_txt1" --GUI.elms.sect_help_btn.col_fill = "green" --GUI.elms.sect_help_btn.font = ("version") --GUI.New("lb_Sect_info", "Label", 3, 285+x1, 32+y1, "set the chord region to the song section", true, 3) --Label name, z, x, y, caption[, shadow, font, color, bg] --os_type = reaper.GetOS() --poz = 656 font_type = "i" font_size = 50 --if os_type ~= "Win32" and os_type ~= "Win64" then poz = 670 font_type = "r" font_size = 56 end --GUI.New("lb_reatrack", "Label", 3, poz+x1, 10+y1, "REATRAK", true, 1, "verse_fill", "wnd_bg" ) --GUI.elms.lb_reatrack.col_txt = "verse_fill" --GUI.elms.lb_reatrack.font = {"Impact", font_size, font_type} --GUI.elms.lb_reatrack.font = {"LeagueGothic-CondensedItalic", font_size, font_type} --GUI.New("lb_studio", "Label", 3, 734+x1, 17+y1, "Studio", true, 1, "white", "wnd_bg" ) --GUI.elms.lb_studio.col_txt = "verse_fill" --GUI.elms.lb_studio.font = {"Arial", 40, "bi"} GUI.New("count_in_btn", "Button", 3, 16+x1, 65+y1, 70, 20, "Count-In", btn_click_count_in) GUI.elms.count_in_btn.col_txt = "btn_txt3" GUI.elms.count_in_btn.col_fill = "count_in" GUI.New("intro_post_fill_btn", "Button", 3, 90+x1, 65+y1, 95, 20, "Intro Post Fill", btn_click_intro_post_fill) GUI.elms.intro_post_fill_btn.col_txt = "btn_txt1" GUI.elms.intro_post_fill_btn.col_fill = "intro_post_fill" GUI.New("intro_btn", "Button", 3, 190+x1, 65+y1, 60, 20, "Intro", btn_click_intro) GUI.elms.intro_btn.col_txt = "btn_txt1" GUI.elms.intro_btn.col_fill = "intro" GUI.New("intro_fill_btn", "Button", 3, 255+x1, 65+y1, 60, 20, "Intro Fill", btn_click_intro_fill) GUI.elms.intro_fill_btn.col_txt = "btn_txt3" GUI.elms.intro_fill_btn.col_fill = "intro_fill" GUI.New("verse_post_fill_btn", "Button", 3, 320+x1, 65+y1, 95, 20, "Verse Post Fill", btn_click_verse_post_fill) GUI.elms.verse_post_fill_btn.col_txt = "btn_txt1" GUI.elms.verse_post_fill_btn.col_fill = "verse_post_fill" GUI.New("verse_btn", "Button", 3, 420+x1, 65+y1, 65, 20, "Verse", btn_click_verse) GUI.elms.verse_btn.col_txt = "btn_txt1" GUI.elms.verse_btn.col_fill = "verse" GUI.New("verse_fill_btn", "Button", 3, 490+x1, 65+y1, 70, 20, "Verse Fill", btn_click_verse_fill) GUI.elms.verse_fill_btn.col_txt = "btn_txt3" GUI.elms.verse_fill_btn.col_fill = "verse_fill" GUI.New("verse_ending_btn", "Button", 3, 565+x1, 65+y1, 90, 20, "Verse Ending ", btn_click_verse_ending) GUI.elms.verse_ending_btn.col_txt = "btn_txt3" GUI.elms.verse_ending_btn.col_fill = "verse_ending" GUI.New("set_drum_riff_btn1", "Button", 3, 660+x1, 65+y1, 75, 20, "Drum Riff", btn_click_set_drum_riff_btn1) GUI.elms.set_drum_riff_btn1.col_txt = "btn_txt1" GUI.elms.set_drum_riff_btn1.col_fill = "drum_riff" -- Sections Row 2 GUI.New("bridge_post_fill_btn", "Button", 3, 16+x1, 95+y1, 95, 20, "Bridge Post Fill", btn_click_bridge_post_fill) GUI.elms.bridge_post_fill_btn.col_txt = "btn_txt1" GUI.elms.bridge_post_fill_btn.col_fill = "bridge_post_fill" GUI.New("bridge_btn", "Button", 3, 115+x1, 95+y1, 60, 20, "Bridge", btn_click_bridge) GUI.elms.bridge_btn.col_txt = "btn_txt3" GUI.elms.bridge_btn.col_fill = "bridge" GUI.New("bridge_fill_btn", "Button", 3, 180+x1, 95+y1, 70, 20, "Bridge Fill", btn_click_bridge_fill) GUI.elms.bridge_fill_btn.col_txt = "btn_txt3" GUI.elms.bridge_fill_btn.col_fill = "bridge_fill" GUI.New("pre_chorus_post_fill_btn", "Button", 3, 255+x1, 95+y1, 115, 20, "Pre Chorus Post Fill", btn_click_pre_chorus_post_fill) GUI.elms.pre_chorus_post_fill_btn.col_txt = "btn_txt3" GUI.elms.pre_chorus_post_fill_btn.col_fill = "pre_chorus_post_fill" GUI.New("pre_chorus_btn", "Button", 3, 375+x1, 95+y1, 75, 20, "Pre Chorus", btn_click_pre_chorus) GUI.elms.pre_chorus_btn.col_txt = "btn_txt3" GUI.elms.pre_chorus_btn.col_fill = "pre_chorus" GUI.New("pre_chorus_fill_btn", "Button", 3, 455+x1, 95+y1, 95, 20, "Pre Chorus Fill", btn_click_pre_chorus_fill) GUI.elms.pre_chorus_fill_btn.col_txt = "btn_txt3" GUI.elms.pre_chorus_fill_btn.col_fill = "pre_chorus_fill" GUI.New("chorus_post_fill_btn", "Button", 3, 555+x1, 95+y1, 95, 20, "Chorus Post Fill", btn_click_chorus_post_fill) GUI.elms.chorus_post_fill_btn.col_txt = "btn_txt1" GUI.elms.chorus_post_fill_btn.col_fill = "chorus_post_fill" GUI.New("chorus_btn", "Button", 3, 655+x1, 95+y1, 55, 20, "Chorus", btn_click_chorus) GUI.elms.chorus_btn.col_txt = "btn_txt1" GUI.elms.chorus_btn.col_fill = "chorus" GUI.New("chorus_fill_btn", "Button", 3, 715+x1, 95+y1, 70, 20, "Chorus Fill", btn_click_chorus_fill) GUI.elms.chorus_fill_btn.col_txt = "btn_txt3" GUI.elms.chorus_fill_btn.col_fill = "chorus_fill" GUI.New("chorus_ending_btn", "Button", 3, 790+x1, 95+y1, 90, 20, "Chorus Ending ", btn_click_chorus_ending) GUI.elms.chorus_ending_btn.col_txt = "btn_txt3" GUI.elms.chorus_ending_btn.col_fill = "chorus_ending" -- Sections Row 2 GUI.New("rest_btn", "Button", 3, 375+x1, 125+y1, 40, 20, "Rest", btn_click_rest) GUI.elms.rest_btn.col_txt = "btn_txt1" GUI.elms.rest_btn.col_fill = "rest" GUI.New("shot_btn", "Button", 3, 420+x1, 125+y1, 40, 20, "Shot", btn_click_shot) GUI.elms.shot_btn.col_txt = "btn_txt1" GUI.elms.shot_btn.col_fill = "shot" GUI.New("hold_btn", "Button", 3, 465+x1, 125+y1, 40, 20, "Hold", btn_click_hold) GUI.elms.hold_btn.col_txt = "btn_txt3" GUI.elms.hold_btn.col_fill = "hold" GUI.New("btn_frm", "Frame", 3, 0, 156, GUI.w, 4, true, true) ------------------------------------ -------- Subwindow and ------------- -------- its elements ------------- ------------------------------------ GUI.New("wnd_test", "Window", 10, 0, 0, 312, 244, "Dialog Box", {9, 10}) GUI.New("lbl_elms", "Label", 9, 16, 16, "", false, 4) GUI.New("lbl_vals", "Label", 9, 96, 16, "", false, 4, nil, elm_bg) GUI.New("btn_close", "Button", 9, 0, 184, 48, 24, "OK", wnd_OK) -- We want these elements out of the way until the window is opened GUI.elms_hide[9] = true GUI.elms_hide[10] = true -- :onopen is a hook provided by the Window class. This function will be run -- every time the window opens. function GUI.elms.wnd_test:onopen() -- :adjustelm places the element's specified x,y coordinates relative to -- the Window. i.e. creating an element at 0,0 and adjusting it will put -- the element in the Window's top-left corner. self:adjustelm(GUI.elms.btn_close) -- Buttons look nice when they're centered. GUI.elms.btn_close.x, _ = GUI.center(GUI.elms.btn_close, self) self:adjustelm(GUI.elms.lbl_elms) self:adjustelm(GUI.elms.lbl_vals) -- Set the Window's title local tab_num = GUI.Val("tabs") self.caption = "Element values for Tab " .. tab_num -- This Window provides a readout of the values for every element -- on the current tab. local strs_v, strs_val = get_values_for_tab(tab_num) GUI.Val("lbl_elms", table.concat(strs_v, "\n")) GUI.Val("lbl_vals", table.concat(strs_val, "\n")) end local function chord_add_root_note() time = reaper.GetCursorPosition() markrgnindexnumber, rgnendOut = reaper.GetLastMarkerAndCurRegion(0, time) retval, isrgnOut, posOut, rgnendOut, nameOut, markrgnindexnumberOut = reaper.EnumProjectMarkers(rgnendOut) clear_name_flag = 0 --this flag is needed in the SetProjectMarker4 function to enable the region name to be cleared --set to 0 the name is not cleared and when set to 1 the name is cleared regardless of newName value --root_name = GUI.elms.root_choice.optarray[ GUI.Val("root_choice") ] root_numbers = GUI.Val("root_choice") root_names = { [1] = "C", [2] = "C#", [3] = "Db", [4] = "D", [5] = "D#", [6] = "Eb", [7] = "E", [8] = "F", [9] = "F#", [10] = "Gb", [11] = "G", [12] = "G#", [13] = "Ab", [14] = "A", [15] = "A#", [16] = "Bb", [17] = "B"} root_name = root_names[root_numbers] newName = (nameOut .. "/" .. root_name) --newName = ("C" .. chord_type) --Msg(newName) --- if newName == "" then clear_name_flag = 1 end --if removing the -L leaves an empty name string pass the 1 flag to clear name reaper.SetProjectMarker4(0, markrgnindexnumberOut, true, posOut, rgnendOut, newName, 0, clear_name_flag) chord_type = "" end -- Chords Next Previous Add Split All Tabs (1) Functions local function btn_click_chord_add_root_note() chord_type = "" chord_add_root_note() end local function btn_click_chord_pre() commandID100 = reaper.NamedCommandLookup("_RSa269108c0ba744d947b179c93a57c34399b55a43") reaper.Main_OnCommand(commandID100, 0) -- Script: ReaTrak Go to start of previous region.lua end local function btn_click_bar_pre() reaper.Main_OnCommand(41043, 0) -- Move edit cursor back one measure time = reaper.GetCursorPosition() grid_pos = reaper.SnapToGrid(0, time) reaper.SetEditCurPos2(0, grid_pos, false, false) end local function btn_click_beat_pre() reaper.Main_OnCommand(41045, 0) -- Move edit cursor back one beat time = reaper.GetCursorPosition() grid_pos = reaper.SnapToGrid(0, time) reaper.SetEditCurPos2(0, grid_pos, false, false) end local function btn_click_chord_next() commandID102 = reaper.NamedCommandLookup("_RSce47da3c9b1238de71cc94a1cb99732b9abd5e41") reaper.Main_OnCommand(commandID102, 0) -- Script: ReaTrak Go to start of next region.lua end local function btn_click_bar_next() --reaper.Main_OnCommand(41040, 0) -- Move edit cursor to start of next measure reaper.Main_OnCommand(41042, 0) -- Move edit cursor forward one measure time = reaper.GetCursorPosition() grid_pos = reaper.SnapToGrid(0, time) reaper.SetEditCurPos2(0, grid_pos, false, false) end local function btn_click_beat_next() reaper.Main_OnCommand(41044, 0) -- Move edit cursor forward one beat time = reaper.GetCursorPosition() grid_pos = reaper.SnapToGrid(0, time) reaper.SetEditCurPos2(0, grid_pos, false, false) end local function btn_click_play_stop() reaper.Main_OnCommand(40044, 0) -- Transport: Play/stop end local function btn_click_new_region() commandID103 = reaper.NamedCommandLookup("_RScacdeb459aacbafc0dffd42686df0541849b9267") reaper.Main_OnCommand(commandID103, 0) -- Script: ReaTrak insert measures region.lua end local function btn_click_remove_chord_region() commandID104 = reaper.NamedCommandLookup("_RS6c1d47c18a8623f9bec4db6a38f5f3244340130b") reaper.Main_OnCommand(commandID104, 0) -- Script: ReaTrak merge region under cursor and the previous one.eel commandID102 = reaper.NamedCommandLookup("_RSce47da3c9b1238de71cc94a1cb99732b9abd5e41") reaper.Main_OnCommand(commandID102, 0) -- Script: ReaTrak Go to start of next region.lua end --[[ local function btn_click_chord_new_selection() commandID104 = reaper.NamedCommandLookup("_bd132e9bcaddef4b964432e63a02034b") reaper.Main_OnCommand(commandID104, 0) -- Custom: ReaTrak insert chord region in time selection end --]] local function btn_click_edit_chord() reaper.Main_OnCommand(40616, 0) -- Markers: Edit region near cursor end local function btn_click_chord_split() commandID105 = reaper.NamedCommandLookup("_RS8fa94cd55cd82c3d9b0a066f7f5ceec2009c7180") reaper.Main_OnCommand(commandID105, 0) -- Script: ReaTrak Split region under cursor.eel end local function btn_click_chord_sharp_flat() commandID106 = reaper.NamedCommandLookup("_RS1004c26d8d7356510044c4e72d5a01625106f68a") reaper.Main_OnCommand(commandID106, 0) -- Script: ReaTrak flat sharp change.lua end -- Chords Next Previous Add Split All Tabs (layer 1), Tabs 2,3 only (layer 2) -- Button Position Adjustment add e.g x = -10 or x = 0 or x = 10 x6 = -35 y6 = -250 GUI.New("chord_add_root_note_btn", "Button", 3, 50+x6, 620+y6, 115, 20, "Add Root to Chord /", btn_click_chord_add_root_note) GUI.elms.chord_add_root_note_btn.col_txt = "yellow" GUI.elms.chord_add_root_note_btn.col_fill = "shot" GUI.New("chord_pre_btn", "Button", 3, 170+x6, 620+y6, 115, 20, "< Previous Chord", btn_click_chord_pre) GUI.elms.chord_pre_btn.col_txt = "yellow" GUI.elms.chord_pre_btn.col_fill = "shot" GUI.New("bar_pre_btn", "Button", 3, 170+x6, 645+y6, 50, 20, "< Bar", btn_click_bar_pre) GUI.elms.bar_pre_btn.col_txt = "yellow" GUI.elms.bar_pre_btn.col_fill = "shot" GUI.New("beat_pre_btn", "Button", 3, 290+x6, 645+y6, 45, 20, "< Beat", btn_click_beat_pre) GUI.elms.beat_pre_btn.col_txt = "yellow" GUI.elms.beat_pre_btn.col_fill = "shot" GUI.New("chord_next_btn", "Button", 3, 290+x6, 620+y6, 95, 20, "Next Chord >", btn_click_chord_next) GUI.elms.chord_next_btn.col_txt = "yellow" GUI.elms.chord_next_btn.col_fill = "shot" GUI.New("bar_next_btn", "Button", 3, 235+x6, 645+y6, 50, 20, "Bar >", btn_click_bar_next) GUI.elms.bar_next_btn.col_txt = "yellow" GUI.elms.bar_next_btn.col_fill = "shot" GUI.New("beat_next_btn", "Button", 3, 340+x6, 645+y6, 45, 20, "Beat >", btn_click_beat_next) GUI.elms.beat_next_btn.col_txt = "yellow" GUI.elms.beat_next_btn.col_fill = "shot" GUI.New("play_stop_btn", "Button", 3, 410+x6, 645+y6, 45, 20, "■ >", btn_click_play_stop) -- alt 254 GUI.elms.play_stop_btn.col_txt = "yellow" GUI.elms.play_stop_btn.col_fill = "shot" GUI.New("new_region_btn", "Button", 3, 390+x6, 620+y6, 125, 20, "New Region at Cursor", btn_click_new_region) GUI.elms.new_region_btn.col_txt = "yellow" GUI.elms.new_region_btn.col_fill = "shot" GUI.New("remove_chord_region_btn", "Button", 3, 520+x6, 620+y6, 135, 20, "Remove Chord Region", btn_click_remove_chord_region) GUI.elms.remove_chord_region_btn.col_txt = "yellow" GUI.elms.remove_chord_region_btn.col_fill = "shot" --[[ GUI.New("chord_new_selection_btn", "Button", 6, 520+x6, 620+y6, 135, 20, "New Chord in Selection", btn_click_chord_new_selection) GUI.elms.chord_new_selection_btn.col_txt = "yellow" GUI.elms.chord_new_selection_btn.col_fill = "shot" --]] GUI.New("edit_chord2_btn", "Button", 3, 660+x6, 620+y6, 70, 20, "Edit Chord", btn_click_edit_chord) GUI.elms.edit_chord2_btn.col_txt = "yellow" GUI.elms.edit_chord2_btn.col_fill = "shot" GUI.New("chord_split_btn", "Button", 3, 735+x6, 620+y6, 125, 20, "Split Chord at Cursor", btn_click_chord_split) GUI.elms.chord_split_btn.col_txt = "yellow" GUI.elms.chord_split_btn.col_fill = "shot" GUI.New("chord_sharp_flat_btn", "Button", 3, 865+x6, 620+y6, 40, 20, "♯ / b", btn_click_chord_sharp_flat) GUI.elms.chord_sharp_flat_btn.col_txt = "yellow" GUI.elms.chord_sharp_flat_btn.col_fill = "shot" GUI.New("my_frm2", "Frame", 3, 500+x6, 650+y6, 410, 40, false, false, "elm_bg", 4) GUI.elms.my_frm2.text = "Alt Drag Chord Region to move or Drag ends to increase/decrease Length, Alt click to Del" GUI.elms.my_frm2.col_txt = "white" GUI.New("my_frm", "Frame", 2, 500+x6, 710+y6, 340, 35, true, true, "elm_bg", 4) GUI.New("root_choice", "Radio", 2, 42+x6, 684+y6, 410, 64, "Chord Root", "C,C♯,Db,D,D♯,Eb,E,F,F♯,Gb,G,G♯,Ab,A,A♯,Bb,B", "h", 4) --Msg("root_choice") GUI.elms.my_frm.text = " Choose the Root of the Chord then the Chord type or add the Root Note for / Slash Chords" GUI.elms.my_frm.col_txt = "white" ------------------------------------ -------- Main functions ------------ ------------------------------------ -- This will be run on every update loop of the GUI script; anything you would put -- inside a reaper.defer() loop should go here. (The function name doesn't matter) local function Main() -- Prevent the user from resizing the window if GUI.resized then -- If the window's size has been changed, reopen it -- at the current position with the size we specified local __,x,y,w,h = gfx.dock(-1,0,0,0,0) gfx.quit() gfx.init(GUI.name, GUI.w, GUI.h, 0, x, y) GUI.redraw_z[0] = true end end -- Open the script window and initialize a few things GUI.Init() -- Tell the GUI library to run Main on each update loop -- Individual elements are updated first, then GUI.func is run, then the GUI is redrawn GUI.func = Main -- How often (in seconds) to run GUI.func. 0 = every loop. GUI.freq = 0 -- Start the main loop GUI.Main()