ffx
(ffx)
April 24, 2021, 3:16pm
1
The LFO and the formula device delay the input signal by some milliseconds, even if the LFO is using a line as transfer function and the formula device is using y=A.
Both devices should introduce the exact PDC instead.
Steps to reproduce:
Use a hydra to control two signals/parameters of a later effect device, using the same settings.
Now insert a LFO and later the formula device into the signal chain of the second signal
The second slider now is a bit delayed.
Correct behaviour:
Laggy behaviour with LFO:
Laggy behaviour with formula device:
ffx
(ffx)
April 24, 2021, 3:39pm
2
Any idea how big this lag is exactly, in milliseconds?
ffx
(ffx)
April 24, 2021, 3:56pm
3
Also it looks like that the formula device is incompatible with a lookahead of a sending signal follower. If the lookahead is >0, the formula device will cause heavy aliasing.
Audio example with lookahead 0
Audio example with lookahead 16
This is the doofer with the formulas. Route a signal follower onto the knob “signal”:
Copy paste doofer
<?xml version="1.0" encoding="UTF-8"?>
<FilterDeviceClipboard doc_version="0">
<DeviceSlot type="DooferDevice">
<IsMaximized>true</IsMaximized>
<IsSelected>true</IsSelected>
<SelectedPresetName>ffx upwrads verdichtung 2</SelectedPresetName>
<SelectedPresetLibrary>User Library</SelectedPresetLibrary>
<SelectedPresetIsModified>true</SelectedPresetIsModified>
<IsActive>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</IsActive>
<Macro0>
<Value>27.1999588</Value>
<Visualization>Device only</Visualization>
<Name>Sens</Name>
</Macro0>
<Macro1>
<Value>11.9999914</Value>
<Visualization>Device only</Visualization>
<Name>Att</Name>
</Macro1>
<Macro2>
<Value>22.3999767</Value>
<Visualization>Device only</Visualization>
<Name>Rel</Name>
</Macro2>
<Macro3>
<Value>25</Value>
<Visualization>Device only</Visualization>
<Name>In Gain</Name>
<Mappings>
<Mapping>
<DestDeviceIndex>0</DestDeviceIndex>
<DestParameterIndex>1</DestParameterIndex>
<Min>0.0</Min>
<Max>1.0</Max>
<Scaling>Linear</Scaling>
</Mapping>
</Mappings>
</Macro3>
<Macro4>
<Value>30.9999866</Value>
<Visualization>Device only</Visualization>
<Name>Out Gain</Name>
<Mappings>
<Mapping>
<DestDeviceIndex>5</DestDeviceIndex>
<DestParameterIndex>1</DestParameterIndex>
<Min>0.0</Min>
<Max>1.0</Max>
<Scaling>Linear</Scaling>
</Mapping>
</Mappings>
</Macro4>
<Macro5>
<Value>75.1999817</Value>
<Visualization>Device only</Visualization>
<Name>Knee</Name>
<Mappings>
<Mapping>
<DestDeviceIndex>4</DestDeviceIndex>
<DestParameterIndex>6</DestParameterIndex>
<Min>0.0</Min>
<Max>1.0</Max>
<Scaling>Linear</Scaling>
</Mapping>
</Mappings>
</Macro5>
<Macro6>
<Value>50</Value>
<Visualization>Device only</Visualization>
<Name>Macro 7</Name>
</Macro6>
<Macro7>
<Value>91.0567627</Value>
<Visualization>Device only</Visualization>
<Name>signal</Name>
<Mappings>
<Mapping>
<DestDeviceIndex>1</DestDeviceIndex>
<DestParameterIndex>1</DestParameterIndex>
<Min>0.0</Min>
<Max>1.0</Max>
<Scaling>Linear</Scaling>
</Mapping>
</Mappings>
</Macro7>
<NumActiveMacros>8</NumActiveMacros>
<ShowDevices>true</ShowDevices>
<DeviceChain>
<SelectedPresetName>Init</SelectedPresetName>
<SelectedPresetLibrary>Bundled Content</SelectedPresetLibrary>
<SelectedPresetIsModified>true</SelectedPresetIsModified>
<Devices>
<GainerDevice type="GainerDevice">
<IsMaximized>false</IsMaximized>
<IsSelected>false</IsSelected>
<SelectedPresetName>Init</SelectedPresetName>
<SelectedPresetLibrary>Bundled Content</SelectedPresetLibrary>
<SelectedPresetIsModified>true</SelectedPresetIsModified>
<IsActive>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</IsActive>
<Volume>
<Value>1.0</Value>
<Visualization>Mixer and Device</Visualization>
</Volume>
<Panning>
<Value>0.5</Value>
<Visualization>Device only</Visualization>
</Panning>
<LPhaseInvert>false</LPhaseInvert>
<RPhaseInvert>false</RPhaseInvert>
<SmoothParameterChanges>true</SmoothParameterChanges>
</GainerDevice>
<HydraDevice type="HydraDevice">
<IsMaximized>true</IsMaximized>
<IsSelected>false</IsSelected>
<SelectedPresetName>Init</SelectedPresetName>
<SelectedPresetLibrary>Bundled Content</SelectedPresetLibrary>
<SelectedPresetIsModified>true</SelectedPresetIsModified>
<IsActive>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</IsActive>
<VisiblePages>1</VisiblePages>
<InputValue>
<Value>0.910567641</Value>
<Visualization>Mixer and Device</Visualization>
</InputValue>
<Out1DestTrack>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out1DestTrack>
<Out1DestEffect>
<Value>2</Value>
<Visualization>Device only</Visualization>
</Out1DestEffect>
<Out1DestParameter>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</Out1DestParameter>
<Out1Min>
<Value>0.950000048</Value>
<Visualization>Device only</Visualization>
</Out1Min>
<Out1Max>
<Value>0.0</Value>
<Visualization>Device only</Visualization>
</Out1Max>
<Out1Scaling>Linear</Out1Scaling>
<Out2DestTrack>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out2DestTrack>
<Out2DestEffect>
<Value>3</Value>
<Visualization>Device only</Visualization>
</Out2DestEffect>
<Out2DestParameter>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</Out2DestParameter>
<Out2Min>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</Out2Min>
<Out2Max>
<Value>0.0</Value>
<Visualization>Device only</Visualization>
</Out2Max>
<Out2Scaling>Linear</Out2Scaling>
<Out3DestTrack>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out3DestTrack>
<Out3DestEffect>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out3DestEffect>
<Out3DestParameter>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out3DestParameter>
<Out3Min>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</Out3Min>
<Out3Max>
<Value>0.0</Value>
<Visualization>Device only</Visualization>
</Out3Max>
<Out3Scaling>Linear</Out3Scaling>
<Out4DestTrack>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out4DestTrack>
<Out4DestEffect>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out4DestEffect>
<Out4DestParameter>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out4DestParameter>
<Out4Min>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</Out4Min>
<Out4Max>
<Value>0.0</Value>
<Visualization>Device only</Visualization>
</Out4Max>
<Out4Scaling>Linear</Out4Scaling>
<Out5DestTrack>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out5DestTrack>
<Out5DestEffect>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out5DestEffect>
<Out5DestParameter>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out5DestParameter>
<Out5Min>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</Out5Min>
<Out5Max>
<Value>0.0</Value>
<Visualization>Device only</Visualization>
</Out5Max>
<Out5Scaling>Linear</Out5Scaling>
<Out6DestTrack>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out6DestTrack>
<Out6DestEffect>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out6DestEffect>
<Out6DestParameter>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out6DestParameter>
<Out6Min>
<Value>0.0</Value>
<Visualization>Device only</Visualization>
</Out6Min>
<Out6Max>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</Out6Max>
<Out6Scaling>Linear</Out6Scaling>
<Out7DestTrack>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out7DestTrack>
<Out7DestEffect>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out7DestEffect>
<Out7DestParameter>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out7DestParameter>
<Out7Min>
<Value>0.0</Value>
<Visualization>Device only</Visualization>
</Out7Min>
<Out7Max>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</Out7Max>
<Out7Scaling>Linear</Out7Scaling>
<Out8DestTrack>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out8DestTrack>
<Out8DestEffect>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out8DestEffect>
<Out8DestParameter>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out8DestParameter>
<Out8Min>
<Value>0.0</Value>
<Visualization>Device only</Visualization>
</Out8Min>
<Out8Max>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</Out8Max>
<Out8Scaling>Linear</Out8Scaling>
<Out9DestTrack>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out9DestTrack>
<Out9DestEffect>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out9DestEffect>
<Out9DestParameter>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</Out9DestParameter>
<Out9Min>
<Value>0.0</Value>
<Visualization>Device only</Visualization>
</Out9Min>
<Out9Max>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</Out9Max>
<Out9Scaling>Linear</Out9Scaling>
</HydraDevice>
<FormulaMetaDevice type="FormulaMetaDevice">
<IsMaximized>true</IsMaximized>
<IsSelected>false</IsSelected>
<SelectedPresetName>Init</SelectedPresetName>
<SelectedPresetLibrary>Bundled Content</SelectedPresetLibrary>
<SelectedPresetIsModified>true</SelectedPresetIsModified>
<IsActive>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</IsActive>
<FormulaParagraphs>
<FormulaParagraph>A</FormulaParagraph>
</FormulaParagraphs>
<FunctionsParagraphs>
<FunctionsParagraph/>
</FunctionsParagraphs>
<InputNameA>A</InputNameA>
<InputNameB>B</InputNameB>
<InputNameC>C</InputNameC>
<EditorVisible>true</EditorVisible>
<InputA>
<Value>0.0849607587</Value>
<Visualization>Device only</Visualization>
</InputA>
<InputB>
<Value>0.0</Value>
<Visualization>Device only</Visualization>
</InputB>
<InputC>
<Value>0.0</Value>
<Visualization>Device only</Visualization>
</InputC>
<DestTrack>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</DestTrack>
<DestEffect>
<Value>4</Value>
<Visualization>Device only</Visualization>
</DestEffect>
<DestParameter>
<Value>2</Value>
<Visualization>Device only</Visualization>
</DestParameter>
</FormulaMetaDevice>
<FormulaMetaDevice type="FormulaMetaDevice">
<IsMaximized>true</IsMaximized>
<IsSelected>true</IsSelected>
<SelectedPresetName>Init</SelectedPresetName>
<SelectedPresetLibrary>Bundled Content</SelectedPresetLibrary>
<SelectedPresetIsModified>true</SelectedPresetIsModified>
<IsActive>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</IsActive>
<FormulaParagraphs>
<FormulaParagraph>A</FormulaParagraph>
</FormulaParagraphs>
<FunctionsParagraphs>
<FunctionsParagraph/>
</FunctionsParagraphs>
<InputNameA>A</InputNameA>
<InputNameB>B</InputNameB>
<InputNameC>C</InputNameC>
<EditorVisible>true</EditorVisible>
<InputA>
<Value>0.0894323587</Value>
<Visualization>Device only</Visualization>
</InputA>
<InputB>
<Value>0.0</Value>
<Visualization>Device only</Visualization>
</InputB>
<InputC>
<Value>0.0</Value>
<Visualization>Device only</Visualization>
</InputC>
<DestTrack>
<Value>-1</Value>
<Visualization>Device only</Visualization>
</DestTrack>
<DestEffect>
<Value>4</Value>
<Visualization>Device only</Visualization>
</DestEffect>
<DestParameter>
<Value>5</Value>
<Visualization>Device only</Visualization>
</DestParameter>
</FormulaMetaDevice>
<BusCompressorDevice type="BusCompressorDevice">
<IsMaximized>true</IsMaximized>
<IsSelected>false</IsSelected>
<SelectedPresetName>Init</SelectedPresetName>
<SelectedPresetLibrary>Bundled Content</SelectedPresetLibrary>
<SelectedPresetIsModified>true</SelectedPresetIsModified>
<IsActive>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</IsActive>
<Threshold>
<Value>-41.7602158</Value>
<Visualization>Device only</Visualization>
</Threshold>
<Ratio>
<Value>0.0849607587</Value>
<Visualization>Device only</Visualization>
</Ratio>
<Attack>
<Value>0.364010036</Value>
<Visualization>Device only</Visualization>
</Attack>
<Release>
<Value>0.0360000022</Value>
<Visualization>Device only</Visualization>
</Release>
<MakeUp>
<Value>1.60978246</Value>
<Visualization>Mixer and Device</Visualization>
</MakeUp>
<Knee>
<Value>22.5599937</Value>
<Visualization>Device only</Visualization>
</Knee>
</BusCompressorDevice>
<GainerDevice type="GainerDevice">
<IsMaximized>false</IsMaximized>
<IsSelected>false</IsSelected>
<SelectedPresetName>Init</SelectedPresetName>
<SelectedPresetLibrary>Bundled Content</SelectedPresetLibrary>
<SelectedPresetIsModified>true</SelectedPresetIsModified>
<IsActive>
<Value>1.0</Value>
<Visualization>Device only</Visualization>
</IsActive>
<Volume>
<Value>1.23999941</Value>
<Visualization>Mixer and Device</Visualization>
</Volume>
<Panning>
<Value>0.5</Value>
<Visualization>Device only</Visualization>
</Panning>
<LPhaseInvert>false</LPhaseInvert>
<RPhaseInvert>false</RPhaseInvert>
<SmoothParameterChanges>true</SmoothParameterChanges>
</GainerDevice>
</Devices>
</DeviceChain>
</DeviceSlot>
</FilterDeviceClipboard>
ffx
(ffx)
April 24, 2021, 10:39pm
4
Maybe an interpolation is missing on the output.
ffx
(ffx)
May 11, 2021, 3:57pm
5
This seems to point into a similar direction:
The described stuttering above seems to have something to do with the automatic PDC compensation. If I disable it, the stuttering almost is gone…
The song in that thread causes a lot of audio dropouts. If the automatic PDC now is disabled, the stuttering is almost gone (yet a bit existing). Seems to be related to formula device + PDC enabled + macos
Garf
(Garf)
April 7, 2022, 2:02pm
6
I’m trying to make a LFO Ducker where I copy popular sidechain curves from LFOtool, Kickstart etc. and was using PsyScope to see the changes and noticed a lag too.
Check out these screenshots and notice the volume doesn’t reach zero at the beginning of the beat when the LFO should be at zero!?!
I have to set the custom endpoint at zero long time in advance for the LFO to reach zero.
ffx
(ffx)
April 8, 2022, 7:00am
7
Well, I believe Taktik did here the best possible regarding the oldschool tick based system in Renoise. You are sure there is no PDC in your track which could cause the delay? No PDC introduced by the synth, none by every used DSP? AFAIK meta devices are not automatically compensated here, due the bypassing of the logical audio stream or so.
I think you can always compensate manually by placing two TrackControl VSTs before and after the meta signal generator.
taktik
(taktik)
April 8, 2022, 7:25am
8
This looks like the fade out of a previously played note. Could you share a little demonstration song, so we can check this in detail?
Garf
(Garf)
April 8, 2022, 7:34am
9
That shouldn’t matter as the LFO is supposed to duck the track volume with a gainer.
LFO timing.xrns (351.9 KB)
The LFO envelope goes to zero at the end:
Here’s a render to file where I’ve selected the tail that in my opinion shouldn’t be there:
taktik
(taktik)
April 8, 2022, 7:35am
10
Misread that, sorry. It’s an LFO in the track DSPs, not in the instrument modulation, so it’s not a previously played note. A little demonstration song would nevertheless be helpful.
Garf
(Garf)
April 8, 2022, 9:42am
11
An example song is attached the post just above.
On a dedicated track I have a silent note on every beat and set up following devices:
KeyTracker > Reset a custom one-shot LFO envelope > Hydra
The Hydra then duck Gainers on tracks with bass etc. essentially functioning like all the fancy kick/bass duckers out there.
taktik
(taktik)
April 8, 2022, 12:23pm
12
You beat me above with the reply.
The timing of the LFO is okay, but the parameter smoothing of the gain DSP device indeed is introducing a small delay.
By default all volume related (any many other) parameter changes are smoothed (low pass filtered) to avoid clicks on abrupt changes. This usually is doing good things. In this case, where the gain change already is “smoothed” by the LFO, this is unwanted behaviour.
The Gainer DSP has a hidden “SmoothParameterChanges” option, which can only be seen in the XML representaiton. When disabling it, as in the attached song, the delay is gone.
LFO timing no smoothing.xrns (352.0 KB)
We probably should make this “SmoothParameterChanges” option a regular option in the GUI so it can be disabled, when it’s useful.
9 Likes
long story short, it cost $200 in 1999 dollars (mailed a check) for me to get J.Lim to add the ability to disable “Initial Volume Ramp” in Impulse Tracker
Now all the attacks/transients/etc of samples can be sharp and clicky!
2 Likes
Garf
(Garf)
April 8, 2022, 5:55pm
15
Okay, sounds good making it an option, unfortunately it sounds like distortion is added, take a look at the render below where it looks like a “step” in the sound is introduced around where the smoothing process is supposed to initiate?
It’s obvious if you listen to it, doesn’t sound like a clean sinewave anymore.
1 Like
Garf
(Garf)
April 8, 2022, 6:17pm
16
That last artifact in the waveform is not what changes the tone of the whole sound, there some event that run for every step the LFO change position!? Try listen to my original and then yours.
ffx
(ffx)
April 8, 2022, 7:11pm
17
taktik:
The Gainer DSP has a hidden “SmoothParameterChanges” option, which can only be seen in the XML representaiton. When disabling it, as in the attached song, the delay is gone.
Wow, that’s great! Will an LFO controlled gainer then also have increased precision? But I guess that Garf spotted now a bug, which was covered by the smoothing…?
Garf
(Garf)
April 9, 2022, 8:31am
18
I remember many years ago that a dirty sinewave sample could cause odd artifacts in the sound but I’ve tested this with a sinewave out of Sylenth and it still sounds garbled, it looks like something is being applied at a cycle and not every step as I said before?
Here’s a few more screenshots I’ve taken of the issue.
taktik
(taktik)
April 9, 2022, 11:20am
19
Yes, the LFO spits out value changes once per tick and not per sample. Automating parameters on a sample level would create a huge overhead, actually wouldn’t be possible with some parameters. Remember that you can connect the meta devices to anything.
Due to the missing smoothing in the gainer, this will precisely, but apruptly change the volume and thus create the artifacts that you’ve described above.
taktik
(taktik)
April 9, 2022, 11:22am
20
No, the timing is okay. The smoothing delays the applied parameter changes.