New Tool (2.8): Ezgroovesettingsformidi

The below given code allows you to change the groove values through automation using a meta device.
The requirement is that you need a DSP meta device with four parameter sliders (I have picked an instrument automate device) and then rename the device to either ‘global groove’ or ‘groove device’. (chars in the devicename will be lowercase forced so case doesn’t matter).
Embed that code and you make a lot of folks happy. But do take care that the groove_monitor() function is called appropriately → app_new_document_observable when a new song is created or another is loaded and renoise.song().tracks_observable when the track- or group track count is modified.

  
groove_master_device = nil  
groove_device_number = -1  
groove_master_track = nil  
  
--------------------------------------------------------------------------------  
-- Main functions  
--------------------------------------------------------------------------------  
  
-- This example function is called from the GUI below.  
-- It will return a random string. The GUI function displays   
-- that string in a dialog.  
local function monitor_groove()  
 local song = renoise.song()  
  
 groove_master_track = song.sequencer_track_count + 1  
 for x = 1, #song.tracks[groove_master_track].devices do  
 local device_name = string.lower(song.tracks[groove_master_track].devices[x].display_name)  
 if device_name == 'global groove' or device_name == 'groove device' then  
 groove_device_number = x  
 break  
 end  
 end  
  
 if groove_device_number ~= -1 then  
 groove_master_device = song.tracks[groove_master_track].devices[groove_device_number]  
 if not groove_master_device.parameters[1].value_observable:has_notifier(set_groove_slider_1) then  
 groove_master_device.parameters[1].value_observable:add_notifier(set_groove_slider_1)  
 end  
 if not groove_master_device.parameters[2].value_observable:has_notifier(set_groove_slider_2) then  
 groove_master_device.parameters[2].value_observable:add_notifier(set_groove_slider_2)  
 end  
 if not groove_master_device.parameters[3].value_observable:has_notifier(set_groove_slider_3) then  
 groove_master_device.parameters[2].value_observable:add_notifier(set_groove_slider_3)  
 end  
 if not groove_master_device.parameters[4].value_observable:has_notifier(set_groove_slider_4) then  
 groove_master_device.parameters[4].value_observable:add_notifier(set_groove_slider_4)  
 end  
 end  
  
end  
  
  
function set_groove_slider_1 ()  
 set_groove_slider(1)  
end  
function set_groove_slider_2 ()  
 set_groove_slider(2)  
end  
function set_groove_slider_3 ()  
 set_groove_slider(3)  
  
end  
function set_groove_slider_4 ()  
 set_groove_slider(4)  
  
end  
  
function set_groove_slider(parameter)  
 local song = renoise.song()  
 if groove_master_device.is_active then  
 if not song.transport.groove_enabled then  
 song.transport.groove_enabled = true  
 end  
 print('groove_parameter:',groove_master_device.parameters[parameter].value)  
 local song_groove = song.transport.groove_amounts  
  
 song_groove[parameter] = groove_master_device.parameters[parameter].value  
 song.transport.groove_amounts = song_groove  
 end   
end  
  
  

One more remark, the device has to be placed on the master track, but i guess that seems pretty clear from the code, but just in case adding it to the mention.

1 Like