Exact automation values

Having trouble with LMMS? Ask about it here.
Hi there. I've been reading around some old and new posts on the forum, but still haven't found what I'm looking for.

I, and I suspect many others, like to use LFO controllers synced to tempo for making cool sounds, and this works just fine. However, when I want to automate what tempo they should be synced to, I find myself in quite the pickle. When syncing to tempo, for example some fast paced drum and bass at ~170 bpm, and let's say to eighths, LMMS sets the value of the speed knob on the LFO to a very small number, let's say around 0.15-0.2. This number is exact to four decimal places, and just a tiny change in it can cause the LFO to sound out of rhythm.

The problem is that this value is almost always impossible to set exactly in the automation editor, even at 1600% zoom. This means that, while it's possible to drag the speed knob into an automation editor and get the exact value, it seems to be impossible to automate a change to a different tempo sync. Also, if you touch the original value slightly, it also seems impossible to get it back to the synced value that was already there. I even tried multiplying the speed by a factor of 100 on the LFO itself, allowing me to set it more exactly at around 15-20, but that approach runs into problems when I then need to go over 20 to reach certain tempo syncs, which the LFO does not allow.

If there's some way of solving this I don't know of, I would love to know it. Otherwise, although that's more of a suggestion and might not really belong in this part of the forum, it would be nice to be able to input exact values into the automation editor somehow, or perhaps even sync directly to different tempos inside it.
noumenon wrote:Hi there.
Hi & Welcome to the forum noumenon! First, For you all important links:
http://lmms.io/forum/viewtopic.php?f=1&t=4740

Setting a value to an exact dial readout is very easy
Set the dial to the value you want, you can even type in a specific value
Double-click the dial, and write the value you like to use.

Now get a automation-track into the view, hold Ctrl and simply drag the dial into the automation-track. The value in the automation-track will be exactly as the value the made in the dial-input/ setting.
You can make this several times in either different automation-tracks or in the same. Every time you drag a value in, the automation-track will have exact that value-effect

Many timing dials in LMMS also has a synchronize-to option in the context-menu.
Not to sound rude, but it doesn't seem like you read what I wrote very carefully, based on your reply.

For starters, I already mentioned that I know that you can sync the value to tempo, and also that I know you can then drag this into an automation track to get the exact value there.

The problem is that this doesn't seem to allow me to automate from one particular tempo sync, say eighths, to another, say fourths, within the same automation block. This is because this seems to require being able to accurately set the value inside the automation editor itself, which, again, seems to be impossible in almost all cases, even at 1600% zoom.

Also, unrelated to my first question, but since you mentioned it, how can you type in a value for a dial? I haven't seen any option for doing that.

Anyway, if I've misunderstood anything, feel free to clarify, but your answer did not really tell me anything I didn't already know, and I'm still faced with the same problem.
noumenon wrote: The problem is that this doesn't seem to allow me to automate from one particular tempo sync, say eighths, to another, say fourths, within the same automation block.
No that why you should use several different synchronized automation blocks, in sequence
noumenon wrote: Also, unrelated to my first question, but since you mentioned it, how can you type in a value for a dial? I haven't seen any option for doing that.
As i wrote above you double-click it, then a widget pops up.
noumenon wrote: Anyway, if I've misunderstood anything, feel free to clarify, but your answer did not really tell me anything I didn't already know, and I'm still faced with the same problem.
Or maby i was fuzzy in my explanation, so heres an example:
I want to synchronize the SPD-dial on ENV/LFO to resp 1/4 in 1. bar, and 1/8 in 2. bar
* I open the instrument
* go to the ENV/LFO
* right-click dial
* Tempo-sync | choose 1/4
* Open song-editor, add an automation-track
* Drag the previous synchronized dial into the automation-track
* I now have a synchronized automation block for 1/4!
---------repeat--------
* go to the ENV/LFO
* right-click dial
* Tempo-sync | choose 1/8
* Open song-editor, add an automation-track
* Drag the previous synchronized dial into the automation-track
* I now have a synchronized automation block for 1/8!

* Place 1/4 block at bar 1 beat 1.
* place 1/8 block at bar 2 beat 1.
The dial will now change to perfect synch at set time-slots

Obs i used 2 blocks in one track, it work just as good to use 2 blocks in 2 tracks
I think noumenon is complaining that you can't just drag a second dial into an existing automation block to change the value at some time after the start.

As you point out though what you can easily do is close that automation block when you want a change and open a new one and drag the new value into that. Unless you're changing the synch time every note or two or in the middle of bars then that should do the job reasonably well.

Steve
Thank you for a more detailed reply. I had missed the part about double-clicking to set exact dial values; good to know, but ultimately not relevant to the topic at hand.

I already understood that the method you describe can be used as a workaround, but my point is still that I can't synchronize to different tempos within the same automation block. For example, if I want to sync to a different tempo within one bar, this seems to require being able to accurately sync the tempo within the automation block, or as slipstick said, to be able to drag a synced value into an already existing automation block without simply overriding the existing value, but rather adding the new value.

As he also points out, your workaround, which I already understood, works fine as long as you're only changing tempo syncs right on the beat. It does not however, as far as I can see, make it possible to neither change the sync several times within a bar, nor to change the sync somewhere inside a bar, as that would require dragging the automation point to where you want the sync to happen, which promptly sticks the point to values slightly above or below it, making it sound out of sync.

I hope you understand what I regard as the problem; I'm not trying to be difficult, but there really doesn't seem to be any way to do this. Changing sync on LFOs inside the same bar is something I would love to be able to do in a variety of genres, particularly in drum and bass tracks. To get ultimate control over this, I feel that there should definitely be a way of setting the value of automation points exactly within the automation blocks themselves, or better yet, to simply be able to sync automation points to tempo in the same way you do with dials.
noumenon wrote:my point is still that I can't synchronize to different tempos within the same automation block.
No that is correct! I know a work-around :p, but then it is in the actual file, and in code, but if you know xml, and have a real code-editor, then you could change the actual values in the file.
But yes, in the scenario you want, it would be useful, if it was possible to insert a specific value on a selected automation-point.
If you like you are welcome to write a request for this feature, or if you have a better design idea, than just writing a points value, then describe that, and it will be in consideration for later releases :)
Here is the place for that:
http://lmms.io/forum/viewforum.php?f=15
The better you describe your proposal, the higher the chance for it to be included.

Just one thing, Dragging several values into same automation block, is against current design, so that particular idea, will not be possible, without a complete redesign of automation, and that is propl. not happening.
Yeah, I agree that dragging several values into the same automation block isn't optimal, other solutions like being able to directly type in the value of automation points or sync them to tempo directly, like with dials, sounds better in my opinion.

But yeah, I study and work with programming, so I'd love to hear how I can set it directly in the file as a temporary workaround. Maybe I'll also take the time to properly describe the suggestion, and perhaps I can even do some work on implementing it.
Here is the mmp (mmpz cant be read) XML code for 7 automation-blocks. I have spaced them for clarity, they are not spaced in blocks in reality:

Code: Select all

      <track muted="0" type="5" name="Automation track" solo="0">
        <automationtrack/>
        <automationpattern prog="0" pos="0" mute="0" len="192" name="TripleOscillator>Envelopes/LFOs>Volume>LFO speed" tens="1">
          <time pos="0" value="0.0027"/>
          <object id="1035588"/>
        </automationpattern>
		
        <automationpattern prog="0" pos="384" mute="0" len="192" name="TripleOscillator>Envelopes/LFOs>Volume>LFO speed" tens="1">
          <time pos="0" value="0.0054"/>
          <object id="1035588"/>
        </automationpattern>
		
        <automationpattern prog="0" pos="768" mute="0" len="192" name="Drag a control while pressing <Ctrl>" tens="1"/>
        <automationpattern prog="0" pos="1152" mute="0" len="192" name="TripleOscillator>Envelopes/LFOs>Volume>LFO speed" tens="1">
          <time pos="0" value="0.0107"/>
          <object id="1035588"/>
        </automationpattern>
		
        <automationpattern prog="0" pos="1536" mute="0" len="192" name="TripleOscillator>Envelopes/LFOs>Volume>LFO speed" tens="1">
          <time pos="0" value="0.0214"/>
          <object id="1035588"/>
        </automationpattern>
		
        <automationpattern prog="0" pos="1920" mute="0" len="192" name="TripleOscillator>Envelopes/LFOs>Volume>LFO speed" tens="1">
          <time pos="0" value="0.0429"/>
          <object id="1035588"/>
        </automationpattern>
		
        <automationpattern prog="0" pos="2304" mute="0" len="192" name="TripleOscillator>Envelopes/LFOs>Volume>LFO speed" tens="1">
          <time pos="0" value="0.0857"/>
          <object id="1035588"/>
        </automationpattern>
		
        <automationpattern prog="0" pos="2688" mute="0" len="1152" name="Drag a control while pressing <Ctrl>" tens="1">
          <time pos="12" value="0.246"/>
          <time pos="36" value="0.251"/>
          <time pos="72" value="0.254"/>
          <time pos="96" value="0.256"/>
          <time pos="132" value="0.256"/>
          <time pos="156" value="0.256"/>
          <time pos="168" value="0.258"/>
        </automationpattern>
The automation is for the 3oc internal LFO, and the first 6 blocks are templates for the real values of 1/32..1/1 synchronizing
From those 6 blocks we can readout what value will create perfect synchronizing, and thats the only function of those blocks!

The 7. block is our real automation.
In lmms i have inserted the x-axis positions for 6 points in the same bar.
Now i only have to change the value to the exact known synchronize-value, of my need:
Here i synchronize every second point to 1/32: (value == 0.0027)

Code: Select all

        <automationpattern prog="0" pos="2688" mute="0" len="1152" name="Drag a control while pressing <Ctrl>" tens="1">
          <time pos="12" value="0.246"/>
          <time pos="36" value="0.0027"/>
          <time pos="72" value="0.254"/>
          <time pos="96" value="0.0027"/>
          <time pos="132" value="0.256"/>
          <time pos="156" value="0.0027"/>
          <time pos="168" value="0.258"/>
        </automationpattern>
And here i synchronize every second point to 1/8: (value == 0.0107)

Code: Select all

        <automationpattern prog="0" pos="2688" mute="0" len="1152" name="Drag a control while pressing <Ctrl>" tens="1">
          <time pos="12" value="0.246"/>
          <time pos="36" value="0.0107"/>
          <time pos="72" value="0.254"/>
          <time pos="96" value="0.0107"/>
          <time pos="132" value="0.256"/>
          <time pos="156" value="0.0107"/>
          <time pos="168" value="0.258"/>
        </automationpattern>
As you can see this is inside one bar, and the x-axis values can be set at very high resolution (x800)
noumenon wrote: But yeah, I study and work with programming
:
Maybe I'll also take the time to properly describe the suggestion, and perhaps I can even do some work on implementing it.
Would be super!
You can read all about participating here:
https://github.com/LMMS/lmms/wiki