Snippets (Ledger)

Thought I`d try and improve the re-usability of my code, so just a thread for dumping some functions that might be useful to people. If not at least I might be able to find them as my Lua folders have become a bit of a mess :slight_smile:

NOTE: may need to add error checks but should work out of the box if used as advertised:

-------------------------------------  
--function to keep the dsp devices from 2 tracks in sync. It first checks for changes between the `template track`  
--and the `target track`. If changes are found the target track devices are trashed then re-copied from the template track.  
--function takes 2 int parameters for the two track indexes: template_track_index and target_track_index  
-------------------------------------
Click to view contents
-------------------------------------
--function to keep the dsp devices from 2 tracks in sync. It first checks for changes between the `template track`
--and the `target track`. If changes are found the target track devices are trashed then re-copied from the template track.
--function takes 2 int parameters for the two track indexes: template_track_index and target_track_index
-------------------------------------
local function sync_track_devices(template_track_index , target_track_index)
 
  --loadable devices start at 2, (renoise mixer device is index 1)
  local FIRST_DEVICE_INDEX = 2
  --song object
  local song = renoise.song()
  --track objects
  local template_track = song:track(template_track_index)
  local target_track = song:track(target_track_index)
 
  --flag to set whether devices need refreshing/ reordering/ reoloading
  local refresh_devices = false
 
  --first do checks
  --------------------------------------
  --1) make sure number of devices in each send chain matches up, set flag if not
  if #template_track.devices ~= #target_track.devices then
    refresh_devices = true
  end
 
  --2) Check the order, that device types/names match up (skip this loop if flag already triggered to true)
  if refresh_devices == false then
    --loop devices
    for i = FIRST_DEVICE_INDEX, #template_track.devices do
      --make sure presets are already matched
      if template_track:device(i).name ~= target_track:device(i).name then
        refresh_devices = true
        break
      end
    end
  end
 
  --3) match all active/bypassed states, done by default rather than triggering final loop
  if refresh_devices == false then
    for i = FIRST_DEVICE_INDEX,#template_track.devices do
 if target_track:device(i).is_active ~= template_track:device(i).is_active then
 target_track:device(i).is_active = template_track:device(i).is_active
 end
    end
  end
 
  --return if flag not tripped, else reload/ copy template track devices to target track
  if refresh_devices == false then
    return
  else
    --loop backwards through target devices and delete them
    for i = #target_track.devices,FIRST_DEVICE_INDEX,-1 do
      target_track:delete_device_at(i)
    end
    --copy fx from template track to target track
    for i = FIRST_DEVICE_INDEX,(#template_track.devices) do
      --copy device
      target_track:insert_device_at(template_track:device(i).device_path, i)
      --copy preset data
      target_track:device(i).active_preset_data = template_track:device(i).active_preset_data
      --copy enabled state
      target_track:device(i).is_active = template_track:device(i).is_active
    end
  end
end--sync_track_devices()

forum formatting tip

EDIT:

Found out to add multi-line code you use three ‘grave accents’ at the beginning and end:

```
multiline code goes here

```

For anyone interested how to hide content aswell as done above with the ‘click for code’ label, you use the [details] formatting:

[details=click for code]

content goes here

[/details]


function to write a renoise pattern[].line from a string representation.  
(arg 1: the target renoise pattern_track_line object, arg2: line in string form) i.e.  
(arg 1: renoise.song():pattern(1):track(2):line(9), arg2: C-40020....0000 | D#40030....0000 | G-400......0000 | ---..etc.)  
passed string must be a complete line of 269 chars  

Click to view contents
-------------------------------------------------------------------------------
  --function to write a renoise pattern line from a string representation.
  --(arg 1: the target renoise pattern_track_line object, arg2: line in string form) i.e.
  --(arg 1: renoise.song():pattern(1):track(2):line(9), arg2: C-40020....0000 | D#40030....0000 | G-400......0000 | ---..etc.) 
  --passed string must be a complete line of 269 chars
  -------------------------------------------------------------------------------
  local function write_line_string_to_pattern_line(target_line_ob,cur_line_string)  
  --------------------------------------------------
    local cur_col = target_line_ob:note_column(1)
    local sub = string.sub
    
    cur_col.note_string = sub(cur_line_string,1,3) -- using string.sub `chop` the saved line up and add chopped parts into pattern (sub is a local declared earlier)
    cur_col.instrument_string = sub(cur_line_string,4,5)
    cur_col.volume_string = sub(cur_line_string,6,7)
    cur_col.panning_string = sub(cur_line_string,8,9)
    cur_col.delay_string = sub(cur_line_string,10,11)
    cur_col.effect_amount_string = sub(cur_line_string,12,13)
    cur_col.effect_amount_string = sub(cur_line_string,14,15)
    
    --update --current note_col
    cur_col = target_line_ob:note_column(2)
       
    cur_col.note_string = sub(cur_line_string,19,21)
    cur_col.instrument_string = sub(cur_line_string,22,23)
    cur_col.volume_string = sub(cur_line_string,24,25)
    cur_col.panning_string = sub(cur_line_string,26,27)
    cur_col.delay_string = sub(cur_line_string,28,29)
    cur_col.effect_amount_string = sub(cur_line_string,30,31)
    cur_col.effect_amount_string = sub(cur_line_string,32,33)
    
    --update --current note_col
    cur_col = target_line_ob:note_column(3)
    
    cur_col.note_string = sub(cur_line_string,37,39)
    cur_col.instrument_string = sub(cur_line_string,40,41)
    cur_col.volume_string = sub(cur_line_string,42,43)
    cur_col.panning_string = sub(cur_line_string,44,45)
    cur_col.delay_string = sub(cur_line_string,46,47)
    cur_col.effect_amount_string = sub(cur_line_string,48,49)
    cur_col.effect_amount_string = sub(cur_line_string,50,51)
    
    --update --current note_col
    cur_col = target_line_ob:note_column(4)
    
    cur_col.note_string = sub(cur_line_string,55,57)
    cur_col.instrument_string = sub(cur_line_string,58,59)
    cur_col.volume_string = sub(cur_line_string,60,61)
    cur_col.panning_string = sub(cur_line_string,62,63)
    cur_col.delay_string = sub(cur_line_string,64,65)
    cur_col.effect_amount_string = sub(cur_line_string,66,67)
    cur_col.effect_amount_string = sub(cur_line_string,68,69)
    
    --update --current note_col
    cur_col = target_line_ob:note_column(5)
    
    cur_col.note_string = sub(cur_line_string,73,75)
    cur_col.instrument_string = sub(cur_line_string,76,77)
    cur_col.volume_string = sub(cur_line_string,78,79)
    cur_col.panning_string = sub(cur_line_string,80,81)
    cur_col.delay_string = sub(cur_line_string,82,83)
    cur_col.effect_amount_string = sub(cur_line_string,84,85)
    cur_col.effect_amount_string = sub(cur_line_string,86,87)
    
    --update --current note_col
    cur_col = target_line_ob:note_column(6)
    
    cur_col.note_string = sub(cur_line_string,91,93)
    cur_col.instrument_string = sub(cur_line_string,94,95)
    cur_col.volume_string = sub(cur_line_string,96,97)
    cur_col.panning_string = sub(cur_line_string,98,99)
    cur_col.delay_string = sub(cur_line_string,100,101)
    cur_col.effect_amount_string = sub(cur_line_string,102,103)
    cur_col.effect_amount_string = sub(cur_line_string,104,105)
    
    --update --current note_col
    cur_col = target_line_ob:note_column(7)
    
    cur_col.note_string = sub(cur_line_string,109,111)
    cur_col.instrument_string = sub(cur_line_string,112,113)
    cur_col.volume_string = sub(cur_line_string,114,115)
    cur_col.panning_string = sub(cur_line_string,116,117)
    cur_col.delay_string = sub(cur_line_string,118,119)
    cur_col.effect_amount_string = sub(cur_line_string,120,121)
    cur_col.effect_amount_string = sub(cur_line_string,122,123)
    
    --update --current note_col
    cur_col = target_line_ob:note_column(8)
    
    cur_col.note_string = sub(cur_line_string,127,129)
    cur_col.instrument_string = sub(cur_line_string,130,131)
    cur_col.volume_string = sub(cur_line_string,132,133)
    cur_col.panning_string = sub(cur_line_string,134,135)
    cur_col.delay_string = sub(cur_line_string,136,137)
    cur_col.effect_amount_string = sub(cur_line_string,138,139)
    cur_col.effect_amount_string = sub(cur_line_string,140,141)
    
    --update --current note_col
    cur_col = target_line_ob:note_column(9)
    
    cur_col.note_string = sub(cur_line_string,145,147)
    cur_col.instrument_string = sub(cur_line_string,148,149)
    cur_col.volume_string = sub(cur_line_string,150,151)
    cur_col.panning_string = sub(cur_line_string,152,153)
    cur_col.delay_string = sub(cur_line_string,154,155)
    cur_col.effect_amount_string = sub(cur_line_string,156,157)
    cur_col.effect_amount_string = sub(cur_line_string,158,159)
    
    --update --current note_col
    cur_col = target_line_ob:note_column(10)
    
    cur_col.note_string = sub(cur_line_string,163,165)
    cur_col.instrument_string = sub(cur_line_string,166,167)
    cur_col.volume_string = sub(cur_line_string,168,169)
    cur_col.panning_string = sub(cur_line_string,170,171)
    cur_col.delay_string = sub(cur_line_string,172,173)
    cur_col.effect_amount_string = sub(cur_line_string,174,175)
    cur_col.effect_amount_string = sub(cur_line_string,176,177)
    
    --update --current note_col
    cur_col = target_line_ob:note_column(11)
    
    cur_col.note_string = sub(cur_line_string,181,183)
    cur_col.instrument_string = sub(cur_line_string,184,185)
    cur_col.volume_string = sub(cur_line_string,186,187)
    cur_col.panning_string = sub(cur_line_string,188,189)
    cur_col.delay_string = sub(cur_line_string,190,191)
    cur_col.effect_amount_string = sub(cur_line_string,192,193)
    cur_col.effect_amount_string = sub(cur_line_string,194,195)
    
    --update --current note_col
    cur_col = target_line_ob:note_column(12)
    
    cur_col.note_string = sub(cur_line_string,199,201)
    cur_col.instrument_string = sub(cur_line_string,202,203)
    cur_col.volume_string = sub(cur_line_string,204,205)
    cur_col.panning_string = sub(cur_line_string,206,207)
    cur_col.delay_string = sub(cur_line_string,208,209)
    cur_col.effect_amount_string = sub(cur_line_string,210,211)
    cur_col.effect_amount_string = sub(cur_line_string,212,213)
  
    --EFFECT COLUMNS
    --update --current effect_col
    cur_col = target_line_ob:effect_column(1)
    
    cur_col.number_string = sub(cur_line_string,217,218)
    cur_col.amount_string = sub(cur_line_string,219,220)
    
    --update --current effect_col
    cur_col = target_line_ob:effect_column(2)
    
    cur_col.number_string = sub(cur_line_string,224,225)
    cur_col.amount_string = sub(cur_line_string,226,227)
    
    --update --current effect_col
    cur_col = target_line_ob:effect_column(3)
    
    cur_col.number_string = sub(cur_line_string,231,232)
    cur_col.amount_string = sub(cur_line_string,233,234)
    
    --update --current effect_col
    cur_col = target_line_ob:effect_column(4)
    
    cur_col.number_string = sub(cur_line_string,238,239)
    cur_col.amount_string = sub(cur_line_string,240,241)
    
    --update --current effect_col
    cur_col = target_line_ob:effect_column(5)
    
    cur_col.number_string = sub(cur_line_string,245,246)
    cur_col.amount_string = sub(cur_line_string,247,248)
    
    --update --current effect_col
    cur_col = target_line_ob:effect_column(6)
    
    cur_col.number_string = sub(cur_line_string,252,253)
    cur_col.amount_string = sub(cur_line_string,254,255)
    
    --update --current effect_col
    cur_col = target_line_ob:effect_column(7)
    
    cur_col.number_string = sub(cur_line_string,259,260)
    cur_col.amount_string = sub(cur_line_string,261,262)
    
    --update --current effect_col
    cur_col = target_line_ob:effect_column(8)
    
    cur_col.number_string = sub(cur_line_string,266,267)
    cur_col.amount_string = sub(cur_line_string,268,269)
  end

Can be used to ‘grab’ an effect device parameter that the user moves/changes in renoise:

Concept used in grab function in:

Sample code with printouts. Adds notifiers to all the parameters of the selected device in renoise. When a parameter is moved info is printed to the teminal and all notifiers that were added are removed.

Needs ‘correct device’ checks added etc.

Click to view contents
--API values
local song = renoise.song()
local device = song.selected_device

--table to hold functions.  We user this to keep track of
--the notifier functions created for later notifier removal.  (i.e. holds the pointers to the individual functions)
local notifier_tab = {}

--notifier function(s).
--This is the function added to each individual parameter of the selected device
--As the functions are added in a loop, num will equal the incrementer "i" which equals the devices parameter index.
--------------------------
local function printy(num)
--------------------------
  --test print
  print("Captured Parameter: "..num.."\n")
  
  --do stuff relevant to your captured parameter here.  i.e. set a global to point to it:
  --my_global_captured_param = device:parameter(num)
  
  --loop to delete all notifiers
  ------------------------------
  for i = 1,#device.parameters do
    --param 
    local param = device:parameter(i).value_observable
    --remove notifiers
    if param:has_notifier(notifier_tab[i]) then
      param:remove_notifier(notifier_tab[i])
      print("removed notifier "..i)
    end
  end
  --reset table
  notifier_tab = {}
end

--loop to add notifiers to all parameters of the selected 
--device in renoise
------------------------
for i = 1,#device.parameters do
  --build table as we go, passing i to printy()
  notifier_tab[i] = function() printy(i) end
  --param
  local param = device:parameter(i).value_observable
  --add notifiers
  if not param:has_notifier(notifier_tab[i]) then
    param:add_notifier(notifier_tab[i])
  end
end

Function returns randomised (shuffled) number range in a table:


Used in New Tool: (3.1) Random Plug (Feb 2019) to return a random plugin from the table of available plugs in renoise.

function returns a table of unique,random,consecutive numbers from 1 to (max)<- settable

i.e.
local random_tab = get_table_of_random_numbers(10)

random_tab[1] → 7
random_tab[2] → 4
random_tab[3] → 10
random_tab[4] → 6
random_tab[5] → 3
random_tab[6] → 2
random_tab[7] → 5
random_tab[8] → 9
random_tab[9] → 8
random_tab[10] → 1


click for code

--function returns a table of unique,random,consecutive numbers from 1 to (max)<- settable
-------------------------------------------------------------------------------------------
--i.e. you have a list of 7 meals that you want to cook in random order over 7 days. 
--Each meal must be chosen once with no repeats:

--/////////////////////////////////////////
--call the function
--local random_meal_indexes = get_table_of_random_numbers(7)

--loop to use the 7 new random indexes
--for i = 1,7 do
--  local meal_idx = random_meal_indexes[i]
--  print all_meals[meal_idx]
--end
--//////////////////////////////////////////

--------------------------------------
function get_table_of_random_numbers(max)
--------------------------------------
  
  --outer scope table
  local g_index_store = {}
  ------------------------------------------------------------------
  local function get_random_index(max)
  ------------------------------------------------------------------
    --g_index_store will have consecutive entries { [1] = 1, [2] = 2, [3] = 3, [4] = 4, etc..} up to (max)
    --We choose a random index using Luas math.random(), with limit set to size of #g_index_store.
    --Once we have used an entry e.g entry [3] we discard it using lua's table.remove() function. e.g. when 3 has been removed the items become
    --{ [1] = 1, [2] = 2, [3] = 4, [4] = 5, etc..}
    --The value for 3 has now become 4 and the value for 4 has become 5.  g_index_store is now one entry shorter.
    
    --when max is too small fire error
    if max < 2 then
      error("max must be greater than 1")
      return
    end
    
    --if index table has been emptied or it is the first run re-populate it
    if #g_index_store == 0 then
      for i = 1,max do
        --a simple table where { [1] = 1, [2] = 2, [3] = 3 etc..}
        g_index_store[i] = i
      end
    end
      
    --random number
    ---------------
    --get os.time() as a seed
    local t = os.time()
    --as os.time() updates slowly we multiply it by random number before passing to randomseed
    math.randomseed((t * math.random(1,789)))
    --get random number based on os.time()
    local ran_num = nil
    --random number between 1 and the length of the index-storing table
    ran_num = math.random(1, #g_index_store)
    
    --get new random index number from the global g_index_store table
    ---------------------------------------------------------------
    local rand_index = g_index_store[ran_num]
    --discard index value/ entry so the used 'index value' can not be selected again.
    table.remove(g_index_store ,ran_num) 
    --return the current index value
    return rand_index
  end
  ----end local function
  
  --to store random numbers
  local random_table = {}
  for i = 1,max do
    random_table[i] = get_random_index(max)
  end
  --return completed table which can be cross-indexed for random indexes in a separate table/list
  return random_table
end

--run and print
print("\n")
rprint(get_table_of_random_numbers(7))


default main.lua

More or less my default starting main.lua file for a new tool. The gui building is more complicated than it needs to be but demonstrates a way of looping to create content:

Includes (* means commented out):

  • settable constant for tool name
  • ‘require’ command for other files *
  • shortcut and menu setup
  • preferences file setup
  • some basic colors to use
  • color flags so you can read colors from gui elements such as buttons
  • global gui variables [renoise.ViewBuilder()]
  • toggle functions so shortcuts and menus will toggle the gui open/closed
  • status function that pre-pends the tool name
  • main function to build the gui
  • add timer setup*
  • closer function that closes gui on new song
  • timer function*
Click Here
TOOL_NAME = "Name Of Tool Here"

--extra lua files (like c++ include)
------------------
--require "general_functions"

--Renoise Keybinds and menus
-------------------------------
renoise.tool():add_keybinding {
  name = "Global:Tools:"..TOOL_NAME,
  invoke = function()main_toggle()end  
}

renoise.tool():add_menu_entry {
  name = "Main Menu:Tools:"..TOOL_NAME,
  invoke = function()main_start()end  
}

--[[
------------------------------------------
--Set up Preferences file
------------------------------------------
--create xml
local options = renoise.Document.create {
  value_a = false,
  value_b = 10,
}
 --assign options-object to .preferences so renoise knows to load and update it with the tool
renoise.tool().preferences = options
------------------------------------------
------------------------------------------
--variable syntax 
--options.value_a.value
--]]

--------------------------------------------------------------------------------
--some basic colors for gui elements
--------------------------------------------------------------------------------
--e.g. For changing vb.views["sample present colour 2"].color when states change
COLOR_GREY = {0x30,0x42,0x42}
COLOR_ORANGE ={0xFF,0x66,0x00}
COLOR_YELLOW = {0xE0,0xE0,0x00}
COLOR_BLUE = {0x50,0x40,0xE0}  
COLOR_RED = {0xEE,0x10,0x10}
COLOR_GREEN = {0x20,0x99,0x20}
COLOR_RED_MILD = {0x90,0x10,0x10}

--Constants holding first index of color-code: Used to identify color in vb.views table i.e.
--if vb.views["button"].color[1] == COLOR_ORANGE_FLAG then --etc
COLOR_GREY_FLAG = COLOR_GREY[1]
COLOR_ORANGE_FLAG = COLOR_ORANGE[1]
COLOR_YELLOW_FLAG = COLOR_YELLOW[1]
COLOR_BLUE_FLAG = COLOR_BLUE[1]  
COLOR_RED_FLAG = COLOR_RED[1]
COLOR_GREEN_FLAG = COLOR_GREEN[1]
COLOR_RED_MILD_FLAG = COLOR_RED_MILD[1]


LUA_COUNTS_FROM_1 = 1

--global variables for gui
local my_dialog = nil 
local vb = nil


--toggle the tool open and closed (keyboard shortcut start-up)
-------------------------------------------------------------
function main_toggle()
----------------------
 --close dialog if it is open
  if (my_dialog and my_dialog.visible) then 
    my_dialog:close()
    --reset global my_dialog
     my_dialog = nil 
  else --run main
    main()
  end
end

--always open/ restart tool (menu entry start-up)
-------------------------------------------------
function main_start()
---------------------
  if (my_dialog and my_dialog.visible) then 
    my_dialog:close()
    --reset global my_dialog
     my_dialog = nil 
  end
  --run main
  main()
end
----------------------------------------------------------


--------------------------------------------------------------------------------
--helper function : custom status message --prefixes tool name and adds brackets 
--------------------------------------------------------------------------------
local function status(message)
  renoise.app():show_status(TOOL_NAME.." Tool: ("..message..")")
end


------------------------------------
------------------------------------
function main()
------------------------------------
------------------------------------


  --toggle dialog so if its already open then close it.  The timer will catch
  --that it is closed and do the housekeeping like removing notifiers (and timer itself)
  if (my_dialog and my_dialog.visible) then 
    my_dialog:close()
    return
  end
  
  --renoise song object
  local song = renoise.song()

  --set globals
  -------------
  --assign global vb to viewbuilder
  vb = renoise.ViewBuilder()
  
  ----------------------------------------------
  --GUI
  ----------------------------------------------     

  --variables that will be added to
  --dialog_content:add_child(send_row)
  local my_first_row = vb:row {margin = 10}
  -------------------------------
  local my_first_element = nil
  
  --DUMMY CONTENT
  ----------------
  --loop to create buttons and add them to my_first_row
  for button = 1, 2 do
    --1 button
    my_first_element = vb:button { 
                        width = 80,
                        text = TOOL_NAME
                        }

    --add each iteration into my_first_row
    my_first_row:add_child(my_first_element) 
  
  end --end loop
  
  --------------------------------------------------------
  --------------------------------------------------------
  --dialog content will contain all of gui; passed to renoise.app():show_custom_dialog()
  local dialog_content = vb:column{}
  dialog_content:add_child(my_first_row)


  
  --------------
  --key Handler
  --------------
  local function my_keyhandler_func(dialog,key)
     --toggle lock focus hack, allows pattern ed to get key input
     renoise.app().window.lock_keyboard_focus = not renoise.app().window.lock_keyboard_focus
     renoise.app().window.lock_keyboard_focus = not renoise.app().window.lock_keyboard_focus
    -- rprint(key)
     
     return key
     
  end 
  
 
  ------------------------------------------------------------------------------------------
  ------------------------------------------------------------------------------------------
  --Script dialog
  my_dialog = renoise.app():show_custom_dialog(
      TOOL_NAME, dialog_content,my_keyhandler_func)

 --[[ 
  --add timer to fire once every 50ms
  if not renoise.tool():has_timer(timer) then
    renoise.tool():add_timer(timer,80)
  end
  --]]
  
  --------------------------------------------    
  --close dialog function ON NEW SONG
  --------------------------------------------
  local function closer(d)
    --close dialog if exists and is open     
    if (d ~= nil) and (d.visible == true) then
      d:close()
     -- remove_notifiers()
    end
    --reset global my_dialog
     my_dialog = nil 
  end
  -- notifier to close dialog on load new song
  renoise.tool().app_release_document_observable:add_notifier(closer,my_dialog)
  -------------------------------------------------------------------------------
  
  --first run of timer
  -- timer()
end

--[[
----------------
--timer function
----------------
function timer()
  
  --do stuff
  
  --remove timer when GUI is closed
  if(my_dialog == nil) or (my_dialog.visible == false) then
    if renoise.tool():has_timer(timer) then
      renoise.tool():remove_timer(timer)
    end
  end
end
--]]

default gui it creates - title and button names default to the TOOL_NAME constant set at the beggining of the file:

name of tool - Copy

2 Likes

return table of all non-empty note objects in a track (includes is_empty optimisations)
returns nil if no note column data but all columns with any data (OFF/vol data etc) are returned

click
--return table of all non-empty note objects in a track 
--nil if no notes  -- print format will look like: >> [200] =>  B-50A......0000
--------------------------------------------------
local function get_all_notes_in_track(trk_idx)
--------------------------------------------------
  local song = renoise.song()
  --table to hold all notes
  local note_tab = {}
  --track object
  local trk = song:track(trk_idx)
  --make sur seq track
  if trk.type == renoise.Track.TRACK_TYPE_SEQUENCER then
    --loop patterns
    for pat = 1,#song.patterns do
      local pat_trk = song:pattern(pat):track(trk_idx)
      if pat_trk.is_empty == false then
        --loop lines in pattern
        for line = 1,#pat_trk.lines do
          local cur_line = pat_trk:line(line)
          if cur_line.is_empty == false then
            --loop columns of line
            for col = 1,12 do
              local note = cur_line:note_column(col)
              if note.is_empty == false then
                table.insert(note_tab,note)
              end  
            end
          end
        end
      end
    end
  end
  if #note_tab == 0 then
    return nil
  else
    return note_tab
  end
end
---

renoise song API ref, with no comments (may not be 100% up to date now)

click
  Line 2: Renoise Song API Reference
  Line 29: renoise.song()
  Line 66: renoise.Song.MAX_NUMBER_OF_INSTRUMENTS
  Line 68: renoise.Song.SUB_COLUMN_NOTE
  Line 69: renoise.Song.SUB_COLUMN_INSTRUMENT
  Line 70: renoise.Song.SUB_COLUMN_VOLUME
  Line 71: renoise.Song.SUB_COLUMN_PANNING
  Line 72: renoise.Song.SUB_COLUMN_DELAY
  Line 73: renoise.Song.SUB_COLUMN_SAMPLE_EFFECT_NUMBER
  Line 74: renoise.Song.SUB_COLUMN_SAMPLE_EFFECT_AMOUNT
  Line 76: renoise.Song.SUB_COLUMN_EFFECT_NUMBER
  Line 77: renoise.Song.SUB_COLUMN_EFFECT_AMOUNT
  Line 83: renoise.song():can_undo()
  Line 86: renoise.song():undo()
  Line 89: renoise.song():can_redo()
  Line 92: renoise.song():redo()
  Line 102: renoise.song():describe_undo(description)
  Line 107: renoise.song():insert_track_at(index)
  Line 112: renoise.song():delete_track_at(index)
  Line 116: renoise.song():swap_tracks_at(index1, index2)
  Line 120: renoise.song():track(index)
  Line 125: renoise.song():select_previous_track()
  Line 126: renoise.song():select_next_track()
  Line 130: renoise.song():insert_group_at(index)
  Line 137: renoise.song():add_track_to_group(track_index, group_index)
  Line 140: renoise.song():remove_track_from_group(track_index)
  Line 143: renoise.song():delete_group_at(index)
  Line 148: renoise.song():insert_instrument_at(index)
  Line 154: renoise.song():delete_instrument_at(index)
  Line 157: renoise.song():swap_instruments_at(index2, index2)
  Line 161: renoise.song():instrument(index)
  Line 168: renoise.song():capture_instrument_from_pattern()
  Line 175: renoise.song():capture_nearest_instrument_from_pattern()
  Line 179: renoise.song():pattern(index)
  Line 184: renoise.song():cancel_rendering()
  Line 217: renoise.song():render([options, ] filename, rendering_done_callback)
  Line 222: renoise.song():load_midi_mappings(filename)
  Line 224: renoise.song():save_midi_mappings(filename)
  Line 228: renoise.song():clear_midi_mappings()
  Line 235: renoise.song().file_name
  Line 243: renoise.song().artist, _observable
  Line 245: renoise.song().name, _observable
  Line 247: renoise.song().comments[], _observable
  Line 251: renoise.song().comments_assignment_observable
  Line 254: renoise.song().show_comments_after_loading, _observable 
  Line 258: renoise.song().rendering
  Line 262: renoise.song().rendering_progress
  Line 266: renoise.song().transport
  Line 270: renoise.song().sequencer
  Line 274: renoise.song().pattern_iterator
  Line 278: renoise.song().sequencer_track_count
  Line 281: renoise.song().send_track_count
  Line 285: renoise.song().instruments[], _observable
  Line 287: renoise.song().patterns[], _observable
  Line 289: renoise.song().tracks[], _observable
  Line 293: renoise.song().selected_instrument, _observable
  Line 295: renoise.song().selected_instrument_index, _observable
  Line 300: renoise.song().selected_phrase, _observable
  Line 302: renoise.song().selected_phrase_index
  Line 308: renoise.song().selected_sample, _observable
  Line 310: renoise.song().selected_sample_index
  Line 314: renoise.song().selected_sample_modulation_set, _observable 
  Line 316: renoise.song().selected_sample_modulation_set_index
  Line 320: renoise.song().selected_sample_device_chain, _observable 
  Line 322: renoise.song().selected_sample_device_chain_index
  Line 326: renoise.song().selected_sample_device, _observable
  Line 328: renoise.song().selected_sample_device_index
  Line 332: renoise.song().selected_track, _observable
  Line 334: renoise.song().selected_track_index, _observable
  Line 338: renoise.song().selected_track_device, _observable
  Line 340: renoise.song().selected_track_device_index
  Line 344: renoise.song().selected_device, _observable
  Line 346: renoise.song().selected_device_index
  Line 350: renoise.song().selected_parameter, _observable
  Line 356: renoise.song().selected_automation_parameter, _observable
  Line 359: renoise.song().selected_automation_device, _observable
  Line 363: renoise.song().selected_pattern, _observable
  Line 365: renoise.song().selected_pattern_index, _observable
  Line 370: renoise.song().selected_pattern_track, _observable
  Line 374: renoise.song().selected_sequence_index, _observable
  Line 378: renoise.song().selected_line
  Line 380: renoise.song().selected_line_index
  Line 385: renoise.song().selected_note_column
  Line 387: renoise.song().selected_note_column_index
  Line 392: renoise.song().selected_effect_column
  Line 394: renoise.song().selected_effect_column_index
  Line 398: renoise.song().selected_sub_column_type
  Line 435: renoise.song().selection_in_pattern
  Line 439: renoise.song().selection_in_phrase
  Line 462: renoise.song().transport:panic()
  Line 465: renoise.song().transport:start(mode)
  Line 467: renoise.song().transport:start_at(line)
  Line 469: renoise.song().transport:start_at(song_pos)
  Line 472: renoise.song().transport:stop()
  Line 475: renoise.song().transport:trigger_sequence(sequence_pos)
  Line 478: renoise.song().transport:add_scheduled_sequence(sequence_pos)
  Line 480: renoise.song().transport:set_scheduled_sequence(sequence_pos)
  Line 483: renoise.song().transport:loop_block_move_forwards()
  Line 485: renoise.song().transport:loop_block_move_backwards()
  Line 489: renoise.song().transport:start_stop_sample_recording()
  Line 492: renoise.song().transport:cancel_sample_recording()
  Line 498: renoise.song().transport.playing, _observable
  Line 505: renoise.song().transport.timing_model
  Line 509: renoise.song().transport.bpm, _observable
  Line 511: renoise.song().transport.lpb, _observable
  Line 513: renoise.song().transport.tpl, _observable
  Line 517: renoise.song().transport.playback_pos
  Line 519: renoise.song().transport.playback_pos_beats
  Line 523: renoise.song().transport.edit_pos
  Line 525: renoise.song().transport.edit_pos_beats
  Line 529: renoise.song().transport.song_length
  Line 531: renoise.song().transport.song_length_beats
  Line 535: renoise.song().transport.loop_start
  Line 537: renoise.song().transport.loop_end
  Line 539: renoise.song().transport.loop_range[]
  Line 542: renoise.song().transport.loop_start_beats
  Line 544: renoise.song().transport.loop_end_beats
  Line 546: renoise.song().transport.loop_range_beats[]
  Line 549: renoise.song().transport.loop_sequence_start
  Line 551: renoise.song().transport.loop_sequence_end
  Line 553: renoise.song().transport.loop_sequence_range[]
  Line 556: renoise.song().transport.loop_pattern, _observable
  Line 559: renoise.song().transport.loop_block_enabled
  Line 561: renoise.song().transport.loop_block_start_pos
  Line 563: renoise.song().transport.loop_block_range_coeff
  Line 567: renoise.song().transport.edit_mode, _observable
  Line 569: renoise.song().transport.edit_step, _observable
  Line 571: renoise.song().transport.octave, _observable
  Line 575: renoise.song().transport.metronome_enabled, _observable
  Line 577: renoise.song().transport.metronome_beats_per_bar, _observable
  Line 579: renoise.song().transport.metronome_lines_per_beat, _observable
  Line 583: renoise.song().transport.metronome_precount_enabled, _observable
  Line 585: renoise.song().transport.metronome_precount_bars, _observable
  Line 590: renoise.song().transport.record_quantize_enabled, _observable
  Line 592: renoise.song().transport.record_quantize_lines, _observable
  Line 596: renoise.song().transport.record_parameter_mode, _observable
  Line 600: renoise.song().transport.follow_player, _observable
  Line 602: renoise.song().transport.wrapped_pattern_edit, _observable
  Line 604: renoise.song().transport.single_track_edit_mode, _observable
  Line 608: renoise.song().transport.groove_enabled, _observable
  Line 610: renoise.song().transport.groove_amounts[]
  Line 614: renoise.song().transport.groove_assignment_observable
  Line 620: renoise.song().transport.track_headroom, _observable
  Line 625: renoise.song().transport.keyboard_velocity_enabled, _observable
  Line 627: renoise.song().transport.keyboard_velocity, _observable
  Line 638: renoise.song().sequencer:insert_sequence_at(sequence_pos, pattern_index)
  Line 640: renoise.song().sequencer:insert_new_pattern_at(sequence_pos)
  Line 645: renoise.song().sequencer:delete_sequence_at(sequence_pos)
  Line 650: renoise.song().sequencer:pattern(sequence_pos)
  Line 655: renoise.song().sequencer:clone_range(from_sequence_pos, to_sequence_pos)
  Line 657: renoise.song().sequencer:make_range_unique(from_sequence_pos, to_sequence_pos)
  Line 662: renoise.song().sequencer:sort()
  Line 668: renoise.song().sequencer:sequence_is_start_of_section(sequence_index) 
  Line 670: renoise.song().sequencer:set_sequence_is_start_of_section(
  Line 672: renoise.song().sequencer:sequence_is_start_of_section_observable(sequence_index) 
  Line 677: renoise.song().sequencer:sequence_section_name(sequence_index) 
  Line 679: renoise.song().sequencer:set_sequence_section_name(sequence_index, string) 
  Line 680: renoise.song().sequencer:sequence_section_name_observable(sequence_index) 
  Line 684: renoise.song().sequencer:sequence_is_part_of_section(sequence_index) 
  Line 687: renoise.song().sequencer:sequence_is_end_of_section(sequence_index) 
  Line 693: renoise.song().sequencer:sequence_sections_changed_observable() 
  Line 699: renoise.song().sequencer:track_sequence_slot_is_muted(track_index, sequence_index)
  Line 701: renoise.song().sequencer:set_track_sequence_slot_is_muted(
  Line 706: renoise.song().sequencer:track_sequence_slot_is_selected(track_index, sequence_index)
  Line 708: renoise.song().sequencer:set_track_sequence_slot_is_selected(
  Line 715: renoise.song().sequencer.keep_sequence_sorted, _observable 
  Line 720: renoise.song().sequencer.selection_range[], _observable
  Line 726: renoise.song().sequencer.pattern_sequence[], _observable
  Line 730: renoise.song().sequencer.pattern_assignments_observable
  Line 735: renoise.song().sequencer.pattern_slot_mutes_observable
  Line 761: renoise.song().pattern_iterator:lines_in_song(boolean visible_patterns_only)
  Line 765: renoise.song().pattern_iterator:note_columns_in_song(boolean visible_only)
  Line 767: renoise.song().pattern_iterator:effect_columns_in_song(boolean visible_only)
  Line 774: renoise.song().pattern_iterator:lines_in_pattern(pattern_index)
  Line 778: renoise.song().pattern_iterator:note_columns_in_pattern(
  Line 782: renoise.song().pattern_iterator:effect_columns_in_pattern(
  Line 790: renoise.song().pattern_iterator:lines_in_track(
  Line 795: renoise.song().pattern_iterator:note_columns_in_track(
  Line 799: renoise.song().pattern_iterator:effect_columns_in_track(
  Line 807: renoise.song().pattern_iterator:lines_in_pattern_track(
  Line 812: renoise.song().pattern_iterator:note_columns_in_pattern_track(
  Line 816: renoise.song().pattern_iterator:effect_columns_in_pattern_track(
  Line 841: renoise.song().tracks[]:insert_device_at(device_path, device_index)
  Line 845: renoise.song().tracks[]:delete_device_at(device_index)
  Line 848: renoise.song().tracks[]:swap_devices_at(device_index1, device_index2)
  Line 852: renoise.song().tracks:device(index)
  Line 856: renoise.song().tracks[]:mute()
  Line 857: renoise.song().tracks[]:unmute()
  Line 858: renoise.song().tracks[]:solo()
  Line 861: renoise.song().tracks[]:column_is_muted(column)
  Line 863: renoise.song().tracks[]:column_is_muted_observable(column)
  Line 865: renoise.song().tracks[]:set_column_is_muted(column, muted)
  Line 868: renoise.song().tracks[]:column_name(column)
  Line 870: renoise.song().tracks[]:column_name_observable(column)
  Line 872: renoise.song().tracks[]:set_column_name(column, name)
  Line 875: renoise.song().tracks[]:swap_note_columns_at(index1, index2)
  Line 876: renoise.song().tracks[]:swap_effect_columns_at(index1, index2)
  Line 882: renoise.song().tracks[].type
  Line 884: renoise.song().tracks[].name, _observable
  Line 886: renoise.song().tracks[].color[], _observable
  Line 889: renoise.song().tracks[].color_blend, _observable
  Line 893: renoise.song().tracks[].mute_state, _observable
  Line 896: renoise.song().tracks[].solo_state, _observable
  Line 900: renoise.song().tracks[].prefx_volume
  Line 902: renoise.song().tracks[].prefx_panning
  Line 904: renoise.song().tracks[].prefx_width
  Line 907: renoise.song().tracks[].postfx_volume
  Line 909: renoise.song().tracks[].postfx_panning
  Line 913: renoise.song().tracks[].collapsed, _observable
  Line 917: renoise.song().tracks[].group_parent
  Line 921: renoise.song().tracks[].available_output_routings[]
  Line 923: renoise.song().tracks[].output_routing, _observable
  Line 927: renoise.song().tracks[].output_delay, _observable
  Line 931: renoise.song().tracks[].max_effect_columns
  Line 933: renoise.song().tracks[].min_effect_columns
  Line 936: renoise.song().tracks[].max_note_columns
  Line 938: renoise.song().tracks[].min_note_columns
  Line 941: renoise.song().tracks[].visible_effect_columns, _observable
  Line 943: renoise.song().tracks[].visible_note_columns, _observable
  Line 946: renoise.song().tracks[].volume_column_visible, _observable
  Line 948: renoise.song().tracks[].panning_column_visible, _observable
  Line 950: renoise.song().tracks[].delay_column_visible, _observable
  Line 952: renoise.song().tracks[].sample_effects_column_visible, _observable
  Line 956: renoise.song().tracks[].available_devices[]
  Line 969: renoise.song().tracks[].available_device_infos[]
  Line 972: renoise.song().tracks[].devices[], _observable
  Line 983: renoise.song().tracks[].members[]
  Line 987: renoise.song().tracks[].group_collapsed
  Line 1006: renoise.song().tracks[].devices[]:preset(index)
  Line 1011: renoise.song().tracks[].devices[]:parameter(index)
  Line 1018: renoise.song().tracks[].devices[].name
  Line 1020: renoise.song().tracks[].devices[].display_name, observable 
  Line 1023: renoise.song().tracks[].devices[].is_active, _observable
  Line 1026: renoise.song().tracks[].devices[].is_maximized, _observable
  Line 1029: renoise.song().tracks[].devices[].active_preset, _observable
  Line 1031: renoise.song().tracks[].devices[].active_preset_data
  Line 1033: renoise.song().tracks[].devices[].presets[]
  Line 1036: renoise.song().tracks[].devices[].is_active_parameter
  Line 1039: renoise.song().tracks[].devices[].parameters[]
  Line 1044: renoise.song().tracks[].devices[].external_editor_available
  Line 1049: renoise.song().tracks[].devices[].external_editor_visible
  Line 1054: renoise.song().tracks[].devices[].device_path
  Line 1073: renoise.song().tracks[].devices[].parameters[]:record_value(value)
  Line 1079: renoise.song().tracks[].devices[].parameters[].name
  Line 1082: renoise.song().tracks[].devices[].parameters[].polarity
  Line 1085: renoise.song().tracks[].devices[].parameters[].value_min
  Line 1087: renoise.song().tracks[].devices[].parameters[].value_max
  Line 1089: renoise.song().tracks[].devices[].parameters[].value_quantum
  Line 1091: renoise.song().tracks[].devices[].parameters[].value_default
  Line 1097: renoise.song().tracks[].devices[].parameters[].time_quantum
  Line 1103: renoise.song().tracks[].devices[].parameters[].is_automatable
  Line 1107: renoise.song().tracks[].devices[].parameters[].is_automated, _observable
  Line 1111: renoise.song().tracks[].devices[].parameters[].is_midi_mapped, _observable 
  Line 1115: renoise.song().tracks[].devices[].parameters[].show_in_mixer, _observable
  Line 1119: renoise.song().tracks[].devices[].parameters[].value, _observable
  Line 1121: renoise.song().tracks[].devices[].parameters[].value_string, _observable
  Line 1155: renoise.song().instruments[]:clear()
  Line 1158: renoise.song().instruments[]:copy_from(
  Line 1164: renoise.song().instruments[]:macro(index) 
  Line 1169: renoise.song().instruments[]:insert_phrase_at(index) 
  Line 1172: renoise.song().instruments[]:delete_phrase_at(index)
  Line 1176: renoise.song().instruments[]:phrase(index)
  Line 1186: renoise.song().instruments[]:can_insert_phrase_mapping_at(index) 
  Line 1192: renoise.song().instruments[]:insert_phrase_mapping_at(index, phrase) 
  Line 1195: renoise.song().instruments[]:delete_phrase_mapping_at(index)
  Line 1199: renoise.song().instruments[]:phrase_mapping(index)
  Line 1206: renoise.song().instruments[]:insert_sample_at(index)
  Line 1209: renoise.song().instruments[]:delete_sample_at(index)
  Line 1211: renoise.song().instruments[]:swap_samples_at(index1, index2)
  Line 1215: renoise.song().instruments[]:sample(index)
  Line 1220: renoise.song().instruments[]:sample_mapping(layer, index)
  Line 1224: renoise.song().instruments[]:insert_sample_modulation_set_at(index) 
  Line 1227: renoise.song().instruments[]:delete_sample_modulation_set_at(index)
  Line 1229: renoise.song().instruments[]:swap_sample_modulation_sets_at(index1, index2)
  Line 1233: renoise.song().instruments[]:sample_modulation_set(index) 
  Line 1237: renoise.song().instruments[]:insert_sample_device_chain_at(index) 
  Line 1240: renoise.song().instruments[]:delete_sample_device_chain_at(index)
  Line 1242: renoise.song().instruments[]:swap_sample_device_chains_at(index1, index2)
  Line 1246: renoise.song().instruments[]:sample_device_chain(index) 
  Line 1253: renoise.song().instruments[].active_tab, _observable 
  Line 1257: renoise.song().instruments[].name, _observable
  Line 1262: renoise.song().instruments[].comments[], _observable
  Line 1265: renoise.song().instruments[].comments_assignment_observable
  Line 1268: renoise.song().instruments[].show_comments_after_loading, _observable 
  Line 1272: renoise.song().instruments[].macros_visible, _observable
  Line 1276: renoise.song().instruments[].macros[]
  Line 1280: renoise.song().instruments[].pitchbend_macro 
  Line 1284: renoise.song().instruments[].modulation_wheel_macro 
  Line 1288: renoise.song().instruments[].channel_pressure_macro 
  Line 1293: renoise.song().instruments[].volume, _observable
  Line 1298: renoise.song().instruments[].transpose, _observable
  Line 1303: renoise.song().instruments[].trigger_options
  Line 1307: renoise.song().instruments[]:sample_mapping_overlap_mode, observable
  Line 1312: renoise.song().instruments[].phrase_editor_visible, _observable
  Line 1316: renoise.song().instruments[].phrase_playback_mode, _observable
  Line 1319: renoise.song().instruments[].phrase_program, _observable
  Line 1323: renoise.song().instruments[].phrases[], _observable 
  Line 1326: renoise.song().instruments[].phrase_mappings[], _observable 
  Line 1331: renoise.song().instruments[].samples[], _observable
  Line 1337: renoise.song().instruments[].sample_mappings[], _observable
  Line 1341: renoise.song().instruments[].sample_modulation_sets, _observable
  Line 1345: renoise.song().instruments[].sample_device_chains
  Line 1349: renoise.song().instruments[].midi_input_properties
  Line 1353: renoise.song().instruments[].midi_output_properties
  Line 1357: renoise.song().instruments[].plugin_properties
  Line 1376: renoise.song().instruments[].trigger_options.available_scale_modes
  Line 1380: renoise.song().instruments[].trigger_options.scale_mode, _observable
  Line 1384: renoise.song().instruments[].trigger_options.scale_key, _observable
  Line 1388: renoise.song().instruments[].trigger_options.quantize, _observable
  Line 1392: renoise.song().instruments[].trigger_options.monophonic, _observable
  Line 1396: renoise.song().instruments[].trigger_options.monophonic_glide, _observable
  Line 1408: renoise.song().instruments[].macros[]:mapping(index) 
  Line 1415: renoise.song().instruments[].macros[].name, _observable 
  Line 1419: renoise.song().instruments[].macros[].value, _observable 
  Line 1422: renoise.song().instruments[].macros[].value_string, _observable 
  Line 1426: renoise.song().instruments[].macros[].mappings[], _observable
  Line 1446: renoise.song().instruments[].macros[].mappings[].parameter
  Line 1451: renoise.song().instruments[].macros[].mappings[].parameter_min, _observable
  Line 1453: renoise.song().instruments[].macros[].mappings[].parameter_max, _observable
  Line 1457: renoise.song().instruments[].macros[].mappings[].parameter_scaling, _observable
  Line 1492: renoise.song().instruments[].phrases[]:clear()
  Line 1495: renoise.song().instruments[].phrases[]:copy_from(
  Line 1501: renoise.song().instruments[].phrases[]:line(index)
  Line 1504: renoise.song().instruments[].phrases[]:lines_in_range(index_from, index_to)
  Line 1510: renoise.song().instruments[].phrases[]:has_line_notifier(func[, obj])
  Line 1512: renoise.song().instruments[].phrases[]:add_line_notifier(func[, obj])
  Line 1513: renoise.song().instruments[].phrases[]:remove_line_notifier(func[, obj])
  Line 1516: renoise.song().instruments[].phrases[]:column_is_muted(column)
  Line 1518: renoise.song().instruments[].phrases[]:column_is_muted_observable(column)
  Line 1520: renoise.song().instruments[].phrases[]:set_column_is_muted(column, muted)
  Line 1523: renoise.song().instruments[].phrases[]:column_name(column)
  Line 1525: renoise.song().instruments[].phrases[]:column_name_observable(column)
  Line 1527: renoise.song().instruments[].phrases[]:set_column_name(column, name)
  Line 1530: renoise.song().instruments[].phrases[]:swap_note_columns_at(index1, index2)
  Line 1531: renoise.song().instruments[].phrases[]:swap_effect_columns_at(index1, index2)
  Line 1537: renoise.song().instruments[].phrases[].name, _observable
  Line 1541: renoise.song().instruments[].phrases[].mapping
  Line 1545: renoise.song().instruments[].phrases[].is_empty, _observable
  Line 1550: renoise.song().instruments[].phrases[].number_of_lines, _observable
  Line 1554: renoise.song().instruments[].phrases[].lines[]
  Line 1558: renoise.song().instruments[].phrases[].visible_note_columns, _observable 
  Line 1561: renoise.song().instruments[].phrases[].visible_effect_columns, _observable
  Line 1565: renoise.song().instruments[].phrases[].key_tracking, _observable 
  Line 1569: renoise.song().instruments[].phrases[].base_note, _observable 
  Line 1573: renoise.song().instruments[].phrases[].looping, _observable 
  Line 1577: renoise.song().instruments[].phrases[].loop_start, _observable 
  Line 1580: renoise.song().instruments[].phrases[].loop_end, _observable 
  Line 1584: renoise.song().instruments[].phrases[].autoseek, _observable 
  Line 1589: renoise.song().instruments[].phrases[].lpb, _observable
  Line 1594: renoise.song().instruments[].phrases[].shuffle
  Line 1598: renoise.song().instruments[].phrases[].instrument_column_visible, _observable
  Line 1600: renoise.song().instruments[].phrases[].volume_column_visible, _observable 
  Line 1602: renoise.song().instruments[].phrases[].panning_column_visible, _observable 
  Line 1604: renoise.song().instruments[].phrases[].delay_column_visible, _observable 
  Line 1606: renoise.song().instruments[].phrases[].sample_effects_column_visible, _observable 
  Line 1635: renoise.song().instruments[].phrases[].mapping.phrase
  Line 1639: renoise.song().instruments[].phrases[].mapping.key_tracking, _observable 
  Line 1643: renoise.song().instruments[].phrases[].mapping.base_note, _observable 
  Line 1649: renoise.song().instruments[].phrases[].mapping.note_range, _observable 
  Line 1653: renoise.song().instruments[].phrases[].mapping.looping, _observable 
  Line 1655: renoise.song().instruments[].phrases[].mapping.loop_start, _observable 
  Line 1657: renoise.song().instruments[].phrases[].mapping.loop_end, _observable 
  Line 1671: renoise.song().instruments[].midi_input_properties.device_name, _observable
  Line 1673: renoise.song().instruments[].midi_input_properties.channel, _observable
  Line 1675: renoise.song().instruments[].midi_input_properties.note_range, _observable 
  Line 1677: renoise.song().instruments[].midi_input_properties.assigned_track, _observable
  Line 1703: renoise.song().instruments[].sample_modulation_sets[].devices[]:init()
  Line 1707: renoise.song().instruments[].sample_modulation_sets[].devices[]:copy_from(
  Line 1712: renoise.song().instruments[].sample_modulation_sets[].devices[]:parameter(index)
  Line 1718: renoise.song().instruments[].sample_modulation_sets[].devices[].name, _observable
  Line 1721: renoise.song().instruments[].sample_modulation_sets[].devices[].display_name, observable 
  Line 1725: renoise.song().instruments[].sample_modulation_sets[].devices[].enabled, _observable
  Line 1729: renoise.song().instruments[].sample_modulation_sets[].devices[].target 
  Line 1733: renoise.song().instruments[].sample_modulation_sets[].devices[].operator, _observable
  Line 1738: renoise.song().instruments[].sample_modulation_sets[].devices[].bipolar, observable
  Line 1743: renoise.song().instruments[].sample_modulation_sets[].devices[].tempo_sync_switching_allowed
  Line 1747: renoise.song().instruments[].sample_modulation_sets[].devices[].tempo_synced, observable
  Line 1751: renoise.song().instruments[].sample_modulation_sets[].devices[].parameters[]
  Line 1762: renoise.song().instruments[].sample_modulation_sets[].devices[].value 
  Line 1782: renoise.song().instruments[].sample_modulation_sets[].devices[].mode, _observable 
  Line 1786: renoise.song().instruments[].sample_modulation_sets[].devices[].from
  Line 1788: renoise.song().instruments[].sample_modulation_sets[].devices[].to
  Line 1792: renoise.song().instruments[].sample_modulation_sets[].devices[].duration
  Line 1796: renoise.song().instruments[].sample_modulation_sets[].devices[].delay
  Line 1807: renoise.song().instruments[].sample_modulation_sets[].devices[].attack
  Line 1811: renoise.song().instruments[].sample_modulation_sets[].devices[].hold
  Line 1815: renoise.song().instruments[].sample_modulation_sets[].devices[].duration
  Line 1819: renoise.song().instruments[].sample_modulation_sets[].devices[].sustain
  Line 1823: renoise.song().instruments[].sample_modulation_sets[].devices[].release
  Line 1834: renoise.song().instruments[].sample_modulation_sets[].devices[].min
  Line 1836: renoise.song().instruments[].sample_modulation_sets[].devices[].max
  Line 1853: renoise.song().instruments[].sample_modulation_sets[].devices[].mode, _observable 
  Line 1857: renoise.song().instruments[].sample_modulation_sets[].devices[].min
  Line 1859: renoise.song().instruments[].sample_modulation_sets[].devices[].max
  Line 1885: renoise.song().instruments[].sample_modulation_sets[].devices[]:init()
  Line 1888: renoise.song().instruments[].sample_modulation_sets[].devices[]:copy_from(
  Line 1892: renoise.song().instruments[].sample_modulation_sets[].devices[]:clear_points()
  Line 1894: renoise.song().instruments[].sample_modulation_sets[].devices[]:clear_points_in_range(
  Line 1898: renoise.song().instruments[].sample_modulation_sets[].devices[]:copy_points_from(
  Line 1902: renoise.song().instruments[].sample_modulation_sets[].devices[]:has_point_at(time)
  Line 1905: renoise.song().instruments[].sample_modulation_sets[].devices[]:add_point_at(time, value)
  Line 1907: renoise.song().instruments[].sample_modulation_sets[].devices[]:remove_point_at(time)
  Line 1913: renoise.song().instruments[].sample_modulation_sets[].devices[].play_mode, _observable
  Line 1917: renoise.song().instruments[].sample_modulation_sets[].devices[].length, _observable
  Line 1921: renoise.song().instruments[].sample_modulation_sets[].devices[].loop_mode, _observable
  Line 1923: renoise.song().instruments[].sample_modulation_sets[].devices[].loop_start, _observable
  Line 1925: renoise.song().instruments[].sample_modulation_sets[].devices[].loop_end, _observable
  Line 1929: renoise.song().instruments[].sample_modulation_sets[].devices[].sustain_enabled, _observable
  Line 1931: renoise.song().instruments[].sample_modulation_sets[].devices[].sustain_position, _observable
  Line 1935: renoise.song().instruments[].sample_modulation_sets[].devices[].fade_amount, _observable
  Line 1943: renoise.song().instruments[].sample_modulation_sets[].devices[].points[], _observable
  Line 1947: renoise.song().instruments[].sample_modulation_sets[].devices[].points[].time
  Line 1950: renoise.song().instruments[].sample_modulation_sets[].devices[].points[].value
  Line 1971: renoise.song().instruments[].sample_modulation_sets[].devices[]:init()
  Line 1974: renoise.song().instruments[].sample_modulation_sets[].devices[]:copy_from(
  Line 1978: renoise.song().instruments[].sample_modulation_sets[].devices[]:clear_points()
  Line 1980: renoise.song().instruments[].sample_modulation_sets[].devices[]:clear_points_in_range(
  Line 1984: renoise.song().instruments[].sample_modulation_sets[].devices[]:copy_points_from(
  Line 1988: renoise.song().instruments[].sample_modulation_sets[].devices[]:has_point_at(time)
  Line 1991: renoise.song().instruments[].sample_modulation_sets[].devices[]:add_point_at(time, value)
  Line 1993: renoise.song().instruments[].sample_modulation_sets[].devices[]:remove_point_at(time)
  Line 1999: renoise.song().instruments[].sample_modulation_sets[].devices[].play_mode, _observable
  Line 2003: renoise.song().instruments[].sample_modulation_sets[].devices[].play_step, _observable
  Line 2007: renoise.song().instruments[].sample_modulation_sets[].devices[].length, _observable
  Line 2015: renoise.song().instruments[].sample_modulation_sets[].devices[].points[], _observable
  Line 2019: renoise.song().instruments[].sample_modulation_sets[].devices[].points[].time
  Line 2022: renoise.song().instruments[].sample_modulation_sets[].devices[].points[].value
  Line 2041: renoise.song().instruments[].sample_modulation_sets[].devices[].mode
  Line 2045: renoise.song().instruments[].sample_modulation_sets[].devices[].phase
  Line 2049: renoise.song().instruments[].sample_modulation_sets[].devices[].frequency
  Line 2053: renoise.song().instruments[].sample_modulation_sets[].devices[].amount
  Line 2064: renoise.song().instruments[].sample_modulation_sets[]:init()
  Line 2067: renoise.song().instruments[].sample_modulation_sets[]:copy_from(
  Line 2072: renoise.song().instruments[].sample_modulation_sets[]:insert_device_at(device_path, index) 
  Line 2075: renoise.song().instruments[].sample_modulation_sets[]:delete_device_at(index)
  Line 2077: renoise.song().instruments[].sample_modulation_sets[]:device(index) 
  Line 2082: renoise.song().instruments[].sample_modulation_sets[]:upgrade_filter_version()
  Line 2088: renoise.song().instruments[].sample_modulation_sets[].name, _observable
  Line 2092: renoise.song().instruments[].sample_modulation_sets[].volume_input
  Line 2096: renoise.song().instruments[].sample_modulation_sets[].panning_input
  Line 2100: renoise.song().instruments[].sample_modulation_sets[].pitch_input
  Line 2104: renoise.song().instruments[].sample_modulation_sets[].cutoff_input
  Line 2108: renoise.song().instruments[].sample_modulation_sets[].resonance_input
  Line 2112: renoise.song().instruments[].sample_modulation_sets[].drive_input
  Line 2116: renoise.song().instruments[].sample_modulation_sets[].pitch_range, _observable 
  Line 2121: renoise.song().instruments[].sample_modulation_sets[].available_devices[] 
  Line 2125: renoise.song().instruments[].sample_modulation_sets[].devices[], observable 
  Line 2129: renoise.song().instruments[].sample_modulation_sets[].filter_version, observable
  Line 2133: renoise.song().instruments[].sample_modulation_sets[].available_filter_types
  Line 2135: renoise.song().instruments[].sample_modulation_sets[].filter_type, _observable
  Line 2147: renoise.song().instruments[].sample_device_chains[]:insert_device_at(
  Line 2151: renoise.song().instruments[].sample_device_chains[]:delete_device_at(index)
  Line 2154: renoise.song().instruments[].sample_device_chains[]:swap_devices_at(index, index)
  Line 2157: renoise.song().instruments[].sample_device_chains[]:device(index) 
  Line 2164: renoise.song().instruments[].sample_device_chains[].name, _observable 
  Line 2168: renoise.song().instruments[].sample_device_chains[].available_devices[]
  Line 2172: renoise.song().instruments[].sample_device_chains[].available_device_infos[] 
  Line 2176: renoise.song().instruments[].sample_device_chains[].devices[], observable 
  Line 2180: renoise.song().instruments[].sample_device_chains[].available_output_routings[]
  Line 2182: renoise.song().instruments[].sample_device_chains[].output_routing, _observable
  Line 2203: renoise.song().instruments[].midi_output_properties.instrument_type, _observable
  Line 2210: renoise.song().instruments[].midi_output_properties.device_name, _observable
  Line 2212: renoise.song().instruments[].midi_output_properties.channel, _observable
  Line 2214: renoise.song().instruments[].midi_output_properties.transpose, _observable
  Line 2216: renoise.song().instruments[].midi_output_properties.program, _observable
  Line 2218: renoise.song().instruments[].midi_output_properties.bank, _observable
  Line 2220: renoise.song().instruments[].midi_output_properties.delay, _observable
  Line 2222: renoise.song().instruments[].midi_output_properties.duration, _observable
  Line 2235: renoise.song().instruments[].plugin_properties:load_plugin(plugin_path)
  Line 2246: renoise.song().instruments[].plugin_properties.available_plugins[]
  Line 2259: renoise.song().instruments[].plugin_properties.available_plugin_infos[]
  Line 2263: renoise.song().instruments[].plugin_properties.plugin_loaded
  Line 2269: renoise.song().instruments[].plugin_properties.plugin_device
  Line 2273: renoise.song().instruments[].plugin_properties.alias_instrument_index
  Line 2275: renoise.song().instruments[].plugin_properties.alias_fx_track_index
  Line 2277: renoise.song().instruments[].plugin_properties.alias_fx_device_index
  Line 2282: renoise.song().instruments[].plugin_properties.midi_output_routing_index 
  Line 2286: renoise.song().instruments[].plugin_properties.channel, _observable
  Line 2288: renoise.song().instruments[].plugin_properties.transpose, _observable
  Line 2292: renoise.song().instruments[].plugin_properties.volume, _observable
  Line 2296: renoise.song().instruments[].plugin_properties.auto_suspend, _observable
  Line 2315: renoise.song().instruments[].plugin_properties.plugin_device:preset(index)
  Line 2320: renoise.song().instruments[].plugin_properties.plugin_device:parameter(index)
  Line 2327: renoise.song().instruments[].plugin_properties.plugin_device.name
  Line 2330: renoise.song().instruments[].plugin_properties.plugin_device.active_preset, _observable
  Line 2333: renoise.song().instruments[].plugin_properties.plugin_device.active_preset_data
  Line 2336: renoise.song().instruments[].plugin_properties.plugin_device.presets[]
  Line 2339: renoise.song().instruments[].plugin_properties.plugin_device.parameters[]
  Line 2343: renoise.song().instruments[].plugin_properties.plugin_device.external_editor_available
  Line 2348: renoise.song().instruments[].plugin_properties.plugin_device.external_editor_visible
  Line 2353: renoise.song().instruments[].plugin_properties.plugin_device.device_path
  Line 2368: renoise.song().instruments[].sample_mappings[].read_only
  Line 2372: renoise.song().instruments[].sample_mappings[].sample
  Line 2376: renoise.song().instruments[].sample_mappings[].layer, _observable
  Line 2380: renoise.song().instruments[].sample_mappings[].map_velocity_to_volume, _observable 
  Line 2382: renoise.song().instruments[].sample_mappings[].map_key_to_pitch, _observable 
  Line 2387: renoise.song().instruments[].sample_mappings[].base_note, _observable 
  Line 2391: renoise.song().instruments[].sample_mappings[].note_range, _observable 
  Line 2395: renoise.song().instruments[].sample_mappings[].velocity_range, _observable 
  Line 2423: renoise.song().instruments[].samples[]:clear()
  Line 2426: renoise.song().instruments[].samples[]:copy_from(
  Line 2437: renoise.song().instruments[].samples[]:insert_slice_marker(marker_sample_pos)
  Line 2442: renoise.song().instruments[].samples[]:delete_slice_marker(marker_sample_pos)
  Line 2448: renoise.song().instruments[].samples[]:move_slice_marker(
  Line 2457: renoise.song().instruments[].samples[].is_slice_alias 
  Line 2465: renoise.song().instruments[].samples[].slice_markers, _observable 
  Line 2470: renoise.song().instruments[].samples[].name, _observable
  Line 2474: renoise.song().instruments[].samples[].panning, _observable
  Line 2476: renoise.song().instruments[].samples[].volume, _observable
  Line 2480: renoise.song().instruments[].samples[].transpose, _observable
  Line 2482: renoise.song().instruments[].samples[].fine_tune, _observable
  Line 2486: renoise.song().instruments[].samples[].beat_sync_enabled, _observable
  Line 2488: renoise.song().instruments[].samples[].beat_sync_lines, _observable
  Line 2492: renoise.song().instruments[].samples[].interpolation_mode, _observable
  Line 2494: renoise.song().instruments[].samples[].oversample_enabled, _observable 
  Line 2497: renoise.song().instruments[].samples[].new_note_action, _observable
  Line 2499: renoise.song().instruments[].samples[].oneshot, _observable 
  Line 2501: renoise.song().instruments[].samples[].mute_group, _observable 
  Line 2503: renoise.song().instruments[].samples[].autoseek, _observable
  Line 2505: renoise.song().instruments[].samples[].autofade, _observable
  Line 2509: renoise.song().instruments[].samples[].loop_mode, _observable
  Line 2511: renoise.song().instruments[].samples[].loop_release, _observable
  Line 2513: renoise.song().instruments[].samples[].loop_start, _observable
  Line 2515: renoise.song().instruments[].samples[].loop_end, _observable
  Line 2520: renoise.song().instruments[].samples[].modulation_set_index, _observable 
  Line 2525: renoise.song().instruments[].samples[].device_chain_index, _observable 
  Line 2529: renoise.song().instruments[].samples[].sample_buffer, _observable
  Line 2533: renoise.song().instruments[].samples[].sample_mapping
  Line 2554: renoise.song().instruments[].samples[].sample_buffer:create_sample_data(
  Line 2558: renoise.song().instruments[].samples[].sample_buffer:delete_sample_data()
  Line 2561: renoise.song().instruments[].samples[].sample_buffer:sample_data()
  Line 2572: renoise.song().instruments[].samples[].sample_buffer:set_sample_data()
  Line 2578: renoise.song().instruments[].samples[].sample_buffer:prepare_sample_data_changes()
  Line 2585: renoise.song().instruments[].samples[].sample_buffer:finalize_sample_data_changes()
  Line 2589: renoise.song().instruments[].samples[].sample_buffer:load_from(filename)
  Line 2593: renoise.song().instruments[].samples[].sample_buffer:save_as(filename, format)
  Line 2600: renoise.song().instruments[].samples[].sample_buffer.has_sample_data
  Line 2609: renoise.song().instruments[].samples[].sample_buffer.read_only
  Line 2613: renoise.song().instruments[].samples[].sample_buffer.sample_rate
  Line 2617: renoise.song().instruments[].samples[].sample_buffer.bit_depth
  Line 2621: renoise.song().instruments[].samples[].sample_buffer.number_of_channels
  Line 2625: renoise.song().instruments[].samples[].sample_buffer.number_of_frames
  Line 2630: renoise.song().instruments[].samples[].sample_buffer.display_start, _observable
  Line 2635: renoise.song().instruments[].samples[].sample_buffer.display_length, _observable
  Line 2639: renoise.song().instruments[].samples[].sample_buffer.display_range[], _observable
  Line 2643: renoise.song().instruments[].samples[].sample_buffer.vertical_zoom_factor, _observable
  Line 2648: renoise.song().instruments[].samples[].sample_buffer.selection_start, _observable
  Line 2650: renoise.song().instruments[].samples[].sample_buffer.selection_end, _observable
  Line 2652: renoise.song().instruments[].samples[].sample_buffer.selection_range[], _observable
  Line 2656: renoise.song().instruments[].samples[].sample_buffer.selected_channel, _observable
  Line 2673: renoise.song().patterns[]:clear()
  Line 2676: renoise.song().patterns[]:copy_from(
  Line 2681: renoise.song().patterns[]:track(index)
  Line 2706: renoise.song().patterns[]:has_line_notifier(func[, obj])
  Line 2709: renoise.song().patterns[]:add_line_notifier(func[, obj])
  Line 2710: renoise.song().patterns[]:remove_line_notifier(func[, obj])
  Line 2716: renoise.song().patterns[].is_empty
  Line 2720: renoise.song().patterns[].name, _observable
  Line 2725: renoise.song().patterns[].number_of_lines, _observable
  Line 2730: renoise.song().patterns[].tracks[]
  Line 2748: renoise.song().patterns[].tracks[]:clear()
  Line 2751: renoise.song().patterns[].tracks[]:copy_from(
  Line 2757: renoise.song().patterns[].tracks[]:line(index)
  Line 2761: renoise.song().patterns[].tracks[]:lines_in_range(index_from, index_to)
  Line 2767: renoise.song().patterns[].tracks[]:find_automation(parameter)
  Line 2774: renoise.song().patterns[].tracks[]:create_automation(parameter)
  Line 2779: renoise.song().patterns[].tracks[]:delete_automation(parameter)
  Line 2785: renoise.song().patterns[].tracks[].is_alias 
  Line 2788: renoise.song().patterns[].tracks[].alias_pattern_index , _observable
  Line 2792: renoise.song().patterns[].tracks[].color, _observable
  Line 2796: renoise.song().patterns[].tracks[].is_empty, _observable
  Line 2800: renoise.song().patterns[].tracks[].lines[]
  Line 2804: renoise.song().patterns[].tracks[].automation[], _observable
  Line 2836: renoise.song().patterns[].tracks[].automation[]:clear()
  Line 2839: renoise.song().patterns[].tracks[].automation[]:clear_range(from_time, to_time)
  Line 2842: renoise.song().patterns[].tracks[].automation[]:copy_from(
  Line 2846: renoise.song().patterns[].tracks[].automation[]:has_point_at(time)
  Line 2850: renoise.song().patterns[].tracks[].automation[]:add_point_at(time, value)
  Line 2852: renoise.song().patterns[].tracks[].automation[]:remove_point_at(time)
  Line 2859: renoise.song().patterns[].tracks[].automation[].dest_device
  Line 2864: renoise.song().patterns[].tracks[].automation[].dest_parameter
  Line 2868: renoise.song().patterns[].tracks[].automation[].playmode, _observable
  Line 2872: renoise.song().patterns[].tracks[].automation[].length
  Line 2877: renoise.song().patterns[].tracks[].automation[].selection_start, _observable
  Line 2879: renoise.song().patterns[].tracks[].automation[].selection_end, _observable
  Line 2883: renoise.song().patterns[].tracks[].automation[].selection_range[], _observable
  Line 2891: renoise.song().patterns[].tracks[].automation[].points[], _observable
  Line 2895: renoise.song().patterns[].tracks[].automation[].points[].time
  Line 2899: renoise.song().patterns[].tracks[].automation[].points[].value
  Line 2940: renoise.song().patterns[].tracks[].lines[]:clear()
  Line 2943: renoise.song().patterns[].tracks[].lines[]:copy_from()
  Line 2951: renoise.song().patterns[].tracks[].lines[]:note_column(index)
  Line 2959: renoise.song().patterns[].tracks[].lines[]:effect_column(index)
  Line 2966: renoise.song().patterns[].tracks[].lines[].is_empty
  Line 2970: renoise.song().patterns[].tracks[].lines[].note_columns[]
  Line 2972: renoise.song().patterns[].tracks[].lines[].effect_columns[]
  Line 3000: renoise.song().patterns[].tracks[].lines[].note_columns[]:clear()
  Line 3003: renoise.song().patterns[].tracks[].lines[].note_columns[]:copy_from(
  Line 3010: renoise.song().patterns[].tracks[].lines[].note_columns[].is_empty
  Line 3015: renoise.song().patterns[].tracks[].lines[].note_columns[].is_selected
  Line 3022: renoise.song().patterns[].tracks[].lines[].note_columns[].note_value
  Line 3024: renoise.song().patterns[].tracks[].lines[].note_columns[].note_string
  Line 3027: renoise.song().patterns[].tracks[].lines[].note_columns[].instrument_value
  Line 3029: renoise.song().patterns[].tracks[].lines[].note_columns[].instrument_string
  Line 3032: renoise.song().patterns[].tracks[].lines[].note_columns[].volume_value
  Line 3038: renoise.song().patterns[].tracks[].lines[].note_columns[].volume_string
  Line 3041: renoise.song().patterns[].tracks[].lines[].note_columns[].panning_value
  Line 3047: renoise.song().patterns[].tracks[].lines[].note_columns[].panning_string
  Line 3050: renoise.song().patterns[].tracks[].lines[].note_columns[].delay_value
  Line 3052: renoise.song().patterns[].tracks[].lines[].note_columns[].delay_string
  Line 3055: renoise.song().patterns[].tracks[].lines[].note_columns[].effect_number_value
  Line 3057: renoise.song().patterns[].tracks[].lines[].note_columns[].effect_number_string
  Line 3060: renoise.song().patterns[].tracks[].lines[].note_columns[].effect_amount_value 
  Line 3062: renoise.song().patterns[].tracks[].lines[].note_columns[].effect_amount_string
  Line 3083: renoise.song().patterns[].tracks[].lines[].effect_columns[]:clear()
  Line 3086: renoise.song().patterns[].tracks[].lines[].effect_columns[]:copy_from(
  Line 3093: renoise.song().patterns[].tracks[].lines[].effect_columns[].is_empty
  Line 3097: renoise.song().patterns[].tracks[].lines[].effect_columns[].is_selected
  Line 3101: renoise.song().patterns[].tracks[].lines[].effect_columns[].number_value
  Line 3104: renoise.song().patterns[].tracks[].lines[].effect_columns[].number_string
  Line 3107: renoise.song().patterns[].tracks[].lines[].effect_columns[].amount_value
  Line 3109: renoise.song().patterns[].tracks[].lines[].effect_columns[].amount_string
1 Like

Also viewbuilder stripped of comments:

Viewbuilder
renoise.app():show_custom_prompt(
  title, content_view, {button_labels} [, key_handler_func, key_handler_options])

renoise.app():show_custom_dialog(
  title, content_view [, key_handler_func, key_handler_options])

view:add_child(View child_view)
view:remove_child(View child_view)
view.visible
view.width
view.height
view.tooltip

control.active
control.midi_mapping

rack:resize()
rack.margin
rack.spacing
rack.style
rack.uniform

aligner.margin
aligner.spacing
aligner.mode

text.text
text.font
text.style
text.align

multiline_text:scroll_to_last_line()
multiline_text:scroll_to_first_line()
multiline_text:add_line(text)
multiline_text:clear()
multiline_text.text
multiline_text.paragraphs
multiline_text.font
multiline_text.style

textfield:add_notifier(function or {object, function} or {function, object})
textfield:remove_notifier(function or {object, function} or {function, object})
textfield.active
textfield.value
textfield.text
textfield.align
textfield.edit_mode
textfield.notifier
textfield.bind

multiline_textfield:add_notifier(function or {object, function} or {function, object})
multiline_textfield:remove_notifier(function or {object, function} or {function, object})
multiline_textfield:scroll_to_last_line()
multiline_textfield:scroll_to_first_line()
multiline_textfield:add_line(text)
multiline_textfield:clear()
multiline_textfield.active
multiline_textfield.value
multiline_textfield.text
multiline_textfield.paragraphs
multiline_textfield.font
multiline_textfield.style
multiline_textfield.notifier
multiline_textfield.bind
multiline_textfield.edit_mode

bitmapview:add_notifier(function or {object, function} or {function, object})
bitmapview:remove_notifier(function or {object, function} or {function, object})
bitmapview.mode
bitmapview.bitmap
bitmapview.notifier

button:add_pressed_notifier(function or {object, function} or {function, object})
button:add_released_notifier(function or {object, function} or {function, object})
button:remove_pressed_notifier(function or {object, function} or {function, object})
button:remove_released_notifier(function or {object, function} or {function, object})
button.text
button.bitmap
button.color
button.pressed
button.released
button.notifier

checkbox:add_notifier(function or {object, function} or {function, object})
checkbox:remove_notifier(function or {object, function} or {function, object})
checkbox.value
checkbox.notifier
checkbox.bind

switch:add_notifier(function or {object, function} or {function, object})
switch:remove_notifier(function or {object, function} or {function, object})
switch.items
switch.value
switch.notifier
switch.bind

popup:add_notifier(function or {object, function} or {function, object})
popup:remove_notifier(function or {object, function} or {function, object})
popup.items
popup.value
popup.notifier
popup.bind

chooser:add_notifier(function or {object, function} or {function, object})
chooser:remove_notifier(function or {object, function} or {function, object})
chooser.items
chooser.value
chooser.notifier
chooser.bind

valuebox:add_notifier(function or {object, function} or {function, object})
valuebox:remove_notifier(function or {object, function} or {function, object})
valuebox.min
valuebox.max
valuebox.value
valuebox.tostring
valuebox.tonumber
valuebox.notifier
valuebox.bind

value:add_notifier(function or {object, function} or {function, object})
value:remove_notifier(function or {object, function} or {function, object})
value.value
value.font
value.align
value.tostring
value.notifier
value.bind

valuefield:add_notifier(function or {object, function} or {function, object})
valuefield:remove_notifier(function or {object, function} or {function, object})
valuefield.min
valuefield.max
valuefield.value
valuefield.align
valuefield.tostring
valuefield.tonumber
valuefield.notifier
valuefield.bind

slider:add_notifier(function or {object, function} or {function, object})
slider:remove_notifier(function or {object, function} or {function, object})
slider.min
slider.max
slider.value
slider.notifier
slider.bind
slider:add_notifier(function or {object, function} or {function, object})
slider:remove_notifier(function or {object, function} or {function, object})
slider.min
slider.max
slider.value
slider.notifier
slider.bind

rotary:add_notifier(function or {object, function} or {function, object})
rotary:remove_notifier(function or {object, function} or {function, object})
rotary.min
rotary.max
rotary.value
rotary.notifier
rotary.bind

xypad:add_notifier(function or {object, function} or {function, object})
xypad:remove_notifier(function or {object, function} or {function, object})
xypad.min
xypad.max
xypad.value
xypad.snapback
xypad.notifier
xypad.bind

dialog:show()
dialog:close()
dialog.visible

renoise.ViewBuilder.DEFAULT_CONTROL_MARGIN
renoise.ViewBuilder.DEFAULT_CONTROL_SPACING
renoise.ViewBuilder.DEFAULT_CONTROL_HEIGHT
renoise.ViewBuilder.DEFAULT_MINI_CONTROL_HEIGHT
renoise.ViewBuilder.DEFAULT_DIALOG_MARGIN
renoise.ViewBuilder.DEFAULT_DIALOG_SPACING
renoise.ViewBuilder.DEFAULT_DIALOG_BUTTON_HEIGHT

vb:column { Rack Properties and/or child views }
vb:row { Rack Properties and/or child views }
vb:horizontal_aligner { Aligner Properties and/or child views }
vb:vertical_aligner { Aligner Properties and/or child views }
vb:space { View Properties and/or child views }
vb:text { Text Properties }
vb:multiline_text { MultiLineText Properties }
vb:textfield { TextField Properties }
vb:bitmap { Bitmap Properties }
vb:button { Button Properties }
vb:checkbox  { Rack Properties }
vb:switch { Switch Properties }
vb:popup { Popup Properties }
vb:chooser { Chooser Properties }
vb:valuebox { ValueBox Properties }
vb:value { Value Properties }
vb:valuefield { ValueField Properties }
vb:slider { Slider Properties }
vb:minislider { MiniSlider Properties }
vb:rotary { RotaryEncoder Properties }
vb:xypad { XYPad Properties }

vb.views