Welcome! Log In Create A New Profile

Advanced
Automatic Midifeedback loop
June 19, 2016 02:21PM
Seems like DIY consoles and self illuminated midi keypads is the new black...

Here is one approach....

------- start v3.2.x  bug warning  - delete when fixed ---------
local function warning()
  local version = gma.show.getvar('VERSION') 
  if version:find('^3.2.') then
    local funcName = debug.getinfo(1).source
    local txt = [[ 
      V%s may not properly terminate infinite loops.
      To terminate this plugin, use OffOffEverythingOff,
      or activate its cleanup-procedure manually via cmdline: 
      Lua "%s_cleanup()"
    ]]
    return gma.gui.confirm('WARNING!!',txt:format(version, funcName))
  else 
    return true
  end
end
------- end v3.2.x  bug warning  - delete when fixed  ---------

---------------------------------------------------------------
------------- MidiFeedbackLoop by GLAD - 2016 -----------------
---------------------------------------------------------------
-------- sends Midi note-velocity combinations based ----------
----------- on Lua accessible executor information: -----------
---- empty / non-empty / sequence (off) / sequence (on) -------
---------------------------------------------------------------

local gma = gma
local pairs, tonumber = pairs, tonumber

local midifeedback = {}
do local _ENV = midifeedback

  local velocity = {0,5,1,3} -- velocity(color)codes for empty, non-empty, sequence (off), sequence (on)
    
  getHandle = gma.show.getobj.handle
  getClass = gma.show.getobj.class
  getAmount = gma.show.getobj.amount
  getChild = gma.show.getobj.child
  getProperty = gma.show.property.get
  
  doCommandline = gma.cmd
  gotoSleep = gma.sleep
   
  getMidiRemoteSetup = function ()
  
    local midiRemotes = getHandle('Remote "MidiRemotes"')
    local found = {}   
     
    for i=0, getAmount(midiRemotes)-1 do
    
      local remoteLine = getChild(midiRemotes,i)
      local type, button = getProperty(remoteLine, 'Type'), getProperty(remoteLine, 'Button')
      
      if type == 'Exec' and button == 'Button 1' then
      
        local executor, page = getProperty(remoteLine, 'Executor'), getProperty(remoteLine, 'Page')
        if tonumber(page) then
          executor = page..'.'..executor
        end 
        
        local note, channel = getProperty(remoteLine, 'Note'), getProperty(remoteLine, 'Channel')
        if tonumber(channel) then
          note = channel..'.'..note
        end
        
        found[executor] = note
      end
    end
    return found 
  end
  
  class2velocity = { CMD_ROOT = velocity[1], CMD_EXEC = velocity[2], CMD_SEQUENCE = velocity[3], CMD_CUE = velocity[4] }  

  midiSyntax, execToken, cueToken = 'MidiNote %s %i', 'Executor %s', 'Executor %s Cue'  

  start = function()
    
    enabled = not warning or warning() 
    exec2midiNote = getMidiRemoteSetup()  
    cache = {}
    gma.echo('MidiFeedbackLoop started')
    
    while enabled do 
      for exec, note in pairs(exec2midiNote) do
        local handle = getHandle(cueToken:format(exec)) or getHandle(execToken:format(exec))
        local class = getClass(handle or 1)    
        if class ~= cache[exec] then   
          cache[exec] = class 
          local velocity = class2velocity[class]
          doCommandline(midiSyntax:format(note, velocity))
        end
      end
      gotoSleep(0.5)
    end
    
  end

  stop = function()
    enabled = false
    gma.echo('MidiFeedbackLoop terminated')
  end

end 

return midifeedback.start, midifeedback.stop



Edited 2 time(s). Last edit at 06/20/2016 09:16AM by glad.
Subject Author Views Posted
Automatic Midifeedback loop glad 10741 June 19, 2016 02:21PM
Automatic Midifeedback loop (commented code) glad 3937 June 19, 2016 02:29PM
Re: Automatic Midifeedback loop (commented code) bentoylight 1921 June 20, 2016 04:30PM
Re: Automatic Midifeedback loop (commented code) anlighting 1754 June 20, 2016 10:57PM
Re: Automatic Midifeedback loop (commented code) paladin 1719 June 21, 2016 03:04PM
Re: Automatic Midifeedback loop (commented code) glad 1775 June 21, 2016 06:34PM
Re: Automatic Midifeedback loop (commented code) paladin 1895 June 22, 2016 04:34PM
Re: Automatic Midifeedback loop (commented code) glad 1747 June 21, 2016 07:14PM
Re: Automatic Midifeedback loop (commented code) bentoylight 1636 June 21, 2016 12:47AM
Re: Automatic Midifeedback loop (commented code) glad 1693 June 21, 2016 06:58PM
Re: Automatic Midifeedback loop (commented code) bentoylight 1467 June 21, 2016 09:29PM
Re: Automatic Midifeedback loop piotdenancy 1703 June 22, 2016 04:49PM
Re: Automatic Midifeedback loop nunoalmeida 1528 July 06, 2016 07:57PM
Re: Automatic Midifeedback loop Aerostat 1296 August 07, 2016 09:47PM
Re: Automatic Midifeedback loop Ryan Kanarek 1268 August 08, 2016 05:05AM
Re: Automatic Midifeedback loop Aerostat 1261 August 08, 2016 04:18PM
Re: Automatic Midifeedback loop Attachments tbegal 2086 October 27, 2016 12:47AM
Re: Automatic Midifeedback loop glad 1539 October 27, 2016 12:50AM
Re: Automatic Midifeedback loop qr123de 1523 October 27, 2016 12:52PM
Re: Automatic Midifeedback loop discodisco 1207 March 12, 2017 02:17PM
Re: Automatic Midifeedback loop glad 1195 March 12, 2017 09:06PM
Re: Automatic Midifeedback loop LuckyRockable 1023 April 12, 2017 05:57AM
Re: Automatic Midifeedback loop glad 1175 April 12, 2017 09:24AM
Re: Automatic Midifeedback loop LuckyRockable 1238 April 12, 2017 01:37PM
Re: Automatic Midifeedback loop Prako 1102 December 10, 2017 02:03PM
Re: Automatic Midifeedback loop glad 933 December 10, 2017 10:24PM
Re: Automatic Midifeedback loop Prako 872 December 11, 2017 12:07AM
Re: Automatic Midifeedback loop Cama_DH 886 December 27, 2017 02:30PM
Re: Automatic Midifeedback loop glad 1056 December 27, 2017 02:50PM
Re: Automatic Midifeedback loop holahola 844 January 14, 2018 12:57AM
Re: Automatic Midifeedback loop glad 895 January 14, 2018 02:27AM
Re: Automatic Midifeedback loop holahola 834 January 16, 2018 01:10AM
Re: Automatic Midifeedback loop glad 905 January 16, 2018 08:11AM
Re: Automatic Midifeedback loop holahola 1067 January 19, 2018 12:18PM
Re: Automatic Midifeedback loop MTRobin 876 June 13, 2018 11:34PM
Re: Automatic Midifeedback loop glad 848 June 14, 2018 11:28PM
Re: Automatic Midifeedback loop MTRobin 810 June 22, 2018 07:51PM
Re: Automatic Midifeedback loop glad 827 June 22, 2018 11:34PM
Re: Automatic Midifeedback loop MTRobin 759 June 23, 2018 02:09AM
Re: Automatic Midifeedback loop glad 830 June 23, 2018 02:50AM
Re: Automatic Midifeedback loop MTRobin 734 June 25, 2018 10:33PM
Re: Automatic Midifeedback loop glad 998 June 26, 2018 12:46AM
Re: Automatic Midifeedback loop vierass 867 November 09, 2018 07:24AM
Re: Automatic Midifeedback loop GMAprogrammer 712 January 25, 2019 10:55PM
Re: Automatic Midifeedback loop Tatsuya 895 March 13, 2019 08:08AM
Re: Automatic Midifeedback loop patchbae 591 August 10, 2019 11:14PM
Re: Automatic Midifeedback loop glad 610 August 11, 2019 10:58AM
Re: Automatic Midifeedback loop glad 723 August 11, 2019 02:39PM
Re: Automatic Midifeedback loop paras.sjhalani 616 August 12, 2019 02:00PM
Re: Automatic Midifeedback loop glad 779 August 12, 2019 04:12PM
Re: Automatic Midifeedback loop Sturmey 654 September 03, 2019 07:57PM
Re: Automatic Midifeedback loop glad 664 September 03, 2019 08:22PM
Re: Automatic Midifeedback loop GR8 M8 485 December 15, 2019 04:56AM
Re: Automatic Midifeedback loop glad 536 December 15, 2019 02:09PM
Re: Automatic Midifeedback loop GR8 M8 515 December 16, 2019 01:47AM
Re: Automatic Midifeedback loop nigerninja 501 February 21, 2020 11:40PM
Re: Automatic Midifeedback loop glad 564 February 22, 2020 12:53AM
Re: Automatic Midifeedback loop nigerninja 485 February 24, 2020 04:30PM
Re: Automatic Midifeedback loop sergioborgo 576 March 14, 2020 02:07PM
Re: Automatic Midifeedback loop gralf 1017 May 29, 2020 07:35PM
Re: Automatic Midifeedback loop daan44444 740 June 10, 2020 01:31PM
Re: Automatic Midifeedback loop Moses Fuchs 158 August 12, 2022 02:29PM



Sorry, only registered users may post in this forum.

Click here to login