Assign custom point of LFO on doofer

Hi,

is possible to assign a point(s) from custom LFO to a knob doofer?

-> :

Thanks for Renoise 3.0 I like Doofer, and instrument management, it’s great thank a lot for your big stuff

I would also like to know if is it possible to assign fixed lpc frequency to doofer (something like switching between 4,8,12 and 16 lpc). I know it would be some workaround but i didnt figure it… :rolleyes:

Assign the knob to the reset: every other position than 0 will change the offset relatively from which the LFO has to start from.

Most likely by using the formula device

it’s impossible to assign a reset knob if you use a custom LFO for a ADSR filtre. Do you have a other suggest /> (it’s possible via Formula device add two lfo and send the result to cut off filter?)

Does not look impossible to me:

Aha, sorry i understand what you mean… but then do not post images of a doofer in the pattern DSP area, because in there, that works. In the instrument DSP area, the reset button for the LFO is currently not an option indeed.

You might perhaps be able to do the same with that track LFO by making it control an instrument macro controller that in turn controls the features that you now controlling inside the instrument with n LFO, in that alternative situation you can control the reset ;)

Sorry for my first schematic, a new it’s more better.

I’ll like moving a point of graph (or a lot of points) with a knob (or a lot of knob), it’s possible? I’ll like to modify a filter accent or…

thank

Altering a point’s personal value is not possible no, you would then have to affect the specific parameter with a macro dial yourself using the Instrument Macro option.

Scripting-wise it is fairly easy to alter the points that way though because you can design a function to change its value and attach it to a midi binding.

Sorry I don’t understand, do you have a exemple?

thank a lot

Ah, sorry, i thought “easy” while the envelope points actually cannot be manipulated easy (sorry).
You can reach them but you need to fetch the active preset data from the LFO;

Put an LFO on track 1 (enable the custom envelope!), then run this line in the scripting terminal:
print(renoise.song().tracks[1].devices[2].active_preset_data)

It returns similar data like this

  
<?xml version="1.0" encoding="UTF-8"?>  
<filterdevicepreset doc_version="10"><br>
  <deviceslot type="LfoDevice"><br>
	<ismaximized>true</ismaximized><br>
	<amplitude><br>
  	<value>0.5</value><br>
	</amplitude><br>
	<offset><br>
  	<value>0.0</value><br>
	</offset><br>
	<frequency><br>
  	<value>0.9375</value><br>
	</frequency><br>
	<type><br>
  	<value>4</value><br>
	</type><br>
	<customenvelope><br>
  	<playmode>Linear</playmode><br>
  	<length>64</length><br>
  	<valuequantum>0.0</valuequantum><br>
  	<polarity>Unipolar</polarity><br>
  	<points><br>
    	<point>0,0.0</point><br>
    	<point>63,1.0</point><br>
  	</points><br>
	</customenvelope><br>
	<customenvelopeoneshot>false</customenvelopeoneshot><br>
	<useadjustedenvelopelength>true</useadjustedenvelopelength><br>
  </deviceslot><br>
</filterdevicepreset>  
  

To alter it you would need to stuff the XML data into an array:
local preset_data = renoise.song().tracks[1].devices[2].active_preset_data
Use string.gsub() function to detect if the section exist
then you would have to alter the section by changing the second value (,x.x) in each Point record,
then return that data back using the same function (without the print statement)

The function that does it is called by the midi mapping:

  
renoise.tool():add_midi_mapping {  
 name = tool_id..":change_envelope_point...",  
 invoke = change_envelope_point  
}  
  
function change_envelope_point(value)  
 local relative = 1/64*value  
 local song = renoise.song()  
 local track = song.selected_track_index  
 local device = song.selected_device_index  
 local preset_data = song.tracks[track].devices[device].active_preset_data  
 for _ = 1, #preset_data do  
 if string.find(preset_data, "<point>") then<br>
      str:sub(string.find(preset_data, "<point>"),string.find(preset_data, ",")-1)..tostring(relative)..str:sub(string.find(preset_data, "</point>"))<br>
    end<br>
  end<br>
  song.tracks[track].devices[device].active_preset_data = preset_data<br>
end_function<br>
<br>
<br>```

<br>
<br>
The above code is really brainstorming out of my head and most likely does not work regarding the string manipulation (if it works, it would change all points to the same relative Y value).<br>
I have not tested if it returns a string or array, so you would need to see what happens there exactly and then apply the appropriate filter techniques to change the XML code.<br>
<br>
So not that simple, but definitely not impossible.</point>

Thank à lot, I try it