I think it is possible to create a window bridge tool. The approach would be as follows (for track device controls):
- Create a window tool with multiple controls with variable names, all of them mappable midi, with a global vision to control most devices.
- Create an option to be able to change the device name. Create another option to change the device number.
The tool will detect the device name and number based on the set values.
The tool will automatically assign the proper routing for each variable of the selected device, also changing the name in the window controls as needed.
The user will only map a single tool once. You will only need to change 3 variables to redirect the routing:
- Track,
- Device name
- and number (position)
I remember this matter was discussed in another thread in the past. Nobody found a way to build it, but my approach could be very successful.
It is not easy to program, but I think it is possible. Involves constantly checking various states and ranges of values to avoid errors. But I think it would be a powerful tool. And if it is possible with track devices, it will also be possible for other devices, I suppose. It is necessary to study the API documentation well before starting.
Name of devices available
rprint(renoise.song().selected_track.available_devices) →
[1] => Audio/Effects/VST/???
…
[17] => Audio/Effects/VST/???
…
[18] => Audio/Effects/Native/Delay
[19] => Audio/Effects/Native/Multitap
[20] => Audio/Effects/Native/mpReverb 2
[21] => Audio/Effects/Native/Reverb
[22] => Audio/Effects/Native/Convolver
[23] => Audio/Effects/Native/Bus Compressor
[24] => Audio/Effects/Native/Compressor
[25] => Audio/Effects/Native/Gate 2
[26] => Audio/Effects/Native/Maximizer
[27] => Audio/Effects/Native/Analog Filter
[28] => Audio/Effects/Native/Digital Filter
[29] => Audio/Effects/Native/Comb Filter 2
[30] => Audio/Effects/Native/EQ 5
[31] => Audio/Effects/Native/EQ 10
[32] => Audio/Effects/Native/Mixer EQ
[33] => Audio/Effects/Native/Chorus 2
[34] => Audio/Effects/Native/Flanger 2
[35] => Audio/Effects/Native/Phaser 2
[36] => Audio/Effects/Native/RingMod 2
[37] => Audio/Effects/Native/LofiMat 2
[38] => Audio/Effects/Native/Distortion 2
[39] => Audio/Effects/Native/Cabinet Simulator
[40] => Audio/Effects/Native/Exciter
[41] => Audio/Effects/Native/Stereo Expander
[42] => Audio/Effects/Native/DC Offset
[43] => Audio/Effects/Native/Gainer
[44] => Audio/Effects/Native/Repeater
[45] => Audio/Effects/Native/Doofer
[46] => Audio/Effects/Native/#Line Input
[47] => Audio/Effects/Native/#ReWire Input
[48] => Audio/Effects/Native/#Send
[49] => Audio/Effects/Native/#Multiband Send
[50] => Audio/Effects/Native/*Instr. Macros
[51] => Audio/Effects/Native/*Instr. Automation
[52] => Audio/Effects/Native/*Instr. MIDI Control
[53] => Audio/Effects/Native/*Hydra
[54] => Audio/Effects/Native/*Meta Mixer
[55] => Audio/Effects/Native/*Formula
[56] => Audio/Effects/Native/*XY Pad
[57] => Audio/Effects/Native/*LFO
[58] => Audio/Effects/Native/*Key Tracker
[59] => Audio/Effects/Native/*Velocity Tracker
[60] => Audio/Effects/Native/*Signal Follower
Detect the range and names of devides of the selected track and select it
–minimum number of devices of selected track
1
–maximum number of devices of selected track
#renoise.song().selected_track.devices
–fixed name of first device
renoise.song().selected_track:device(1).name → TrackVolPan
–fixed name of second device if exist (if it is the “Analog Filter”)
renoise.song().selected_track:device(2).name → Analog Filter
etc…
–select a device if exist (if it is the “Analog Filter”)
renoise.song().selected_track_device_index=2
Parameters of first track device:
#renoise.song().selected_track:device(1).parameters → 5
renoise.song().selected_track:device(1):parameter(1).name → Panning
renoise.song().selected_track:device(1):parameter(2).name → Volume
renoise.song().selected_track:device(1):parameter(3).name → Width
renoise.song().selected_track:device(1):parameter(4).name → Post Panning
renoise.song().selected_track:device(1):parameter(5).name → Post Volume
Properties of the parameters to control the values:
oprint(renoise.song().selected_track:device(1):parameter(1)) →
class: DeviceParameter
properties:
is_automatable
is_automated
is_automated_observable
is_midi_mapped
is_midi_mapped_observable
name
polarity
show_in_mixer
show_in_mixer_observable
time_quantum
value
value_default
value_max
value_min
value_observable
value_quantum
value_string
value_string_observable
methods:
__STRICT
record_value
Change the “Volume” value of the device 1 (TrackVolPan):
renoise.song().selected_track:device(1):parameter(2).value=20
Notes:
- The global maximum number of parameters is 30 (EQ 10 or Repeater).
- Convolver looks like an unfinished device!: Impulse, Gain, Start, Length and Resample is not automatable but they are controllable.
- Each device is different, with different ranges.
- The range of non-infinite phisical faders or knobs is 0 to 127.
- The infinite spin knobs can play with +1 or -1 or +10 or -10 … to accelerate.
Do the same for all the parameters of all the devices to be tolerated. The value must always be within the valid range of the parameter. This is very tedious.
Then each object (knob, fader, button) needs to be routed through the MIDI input. Each object must be permanent. This way, you will only assign a full mapping once, and you can save it to a mapping file. And that’s it!
The advantage of this tool is that it would be possible to use any MIDI controller compatible with standard MIDI mapping, as long as it physically has enough controls (knobs, faders, buttons)