We’re trying to implement an adaptive music system into our game (using FMOD and UE4), and so far there’s been mostly success but I was wondering if there’s a good way to fade into and out of labelled parameters, similar to how you would using a transition timeline. We have about 8 tracks that we are affecting and changing based on the state of combat currently but the transitions are harsh.
I’ve tried adding AHDSR to the volume to at least smooth that out, but it only works when the track first becomes active, not when the volume changes due to the parameter shifting. I’ve also changed the seek speed, but that doesn’t make the transition smoother, just delays how long it takes to get to the next parameter. It would be nice to have some sort of curve between the parameters, and I’m just wondering if it’s possible that I’m missing something obvious.
We’ll let the staff confirm, but from what I know, discrete (or labelled) parameters don’t permit to make smooth transitions. You have to use continuous parameters which you’ll call at appropriate values (ie round integers) and the right seek speed (and put the values in the right order…). But I agree it would be a great addition to have this equivalent of seek speed for discrete parameters, for automation (it wouldn’t make sense for instrument triggering). It would allow to go smoothly from one value to any other without going through in-between values.
I’ll try converting to continuous and see if I can alter the seek speed to smooth things out further, my understanding was that the playhead wouldn’t travel along the timeline between the absolute values called by the engine but rather jump to it similar to using labels, but I imagine the seek speed means that it is moving along the timeline not just waiting to jump as it does for labelled params? I’m not sure if that sentence made any sense, but I’ll do some experimenting. Thanks for the help!
Yes, the seek speed means it moves along all the values in-between the start and the final values (but it’s not a “timeline”, as you say). In the case of discrete or labelled values, it would have no sense having the exact same behavior, that’s why I said “an equivalent to seek speed”, that would simply interpolate between those two automation values across time. It will certainly cause some problems determining the best interpolation (since some variables are logarithmic by nature, as volume), but I’m sure the FMOD staff could find something useful!
At the time of writing (March of 2021), there is no way to achieve this using labelled parameters.
We recommend using continuous parameters instead, as they support smooth ramping of automated properties, within the limits you have already discovered.
Alternatively, you could potentially use timeline logic to transition between different sections of multiple automation curves, and use transition timelines to ensure that each individual automated property value transitions smoothly during each transition.
This is by design. AHDSR stands for “Attack, Hold, Decay, Sustain, Release,” five properties that together define how the modulated property changes when the associated event or instrument is started and stopped.
The ability to modulate a property such that its value ramps gradually from one value to another instead of changing abruptly when that property is set by automation is an existing feature request already present in our feature/improvement tracker. I’ll add your names to the list of people interested in this feature.
+10, I’d say. I really think this feature, quite easy to implement, would open up new worlds in adaptive music. Please make it soon, at least on the volume!
You can currently do this using mixer snapshots but the setup is not as clean as you might want it, since it involves using two windows and you won’t have the benefit of seeing automation curves.
Under a Music mixer group make a dedicated Return for each track.
Remove all automation from each track and set each track’s volume to 0.
Insert a send before each track’s volume and send it to that track’s own Return.
Create a few mixer snapshots and add those snapshot instruments to each of their corresponding labeled parameters’ stacks.
On each of those snapshot instruments’ Intensity, add an AHDSR!
There will be a little weirdness with how the snapshots behave while one’s attack fade is fighting against another’s release. If you play with the curves a bit you can get it to behave more as expected. Do your best to ballpark equal-power curves on the attack and release. Only scope in the channels you need to. I feel like I prefer how the Overriding behavior works in this case.
@magomusica, yes, that’s neat (though a bit heavy to implement…). That’s in line with some suggestions I’ve given here, though we were talking about the “submixes” version of vertical adaptive music (this post is more about the “stems” version). However, this upcoming feature would work in every case and make things a lot easier.
The fact is, in my actual projects I don’t need that feature. But… it’s so obvious it would be great, that I request it anyway!
Just to clarify, what you are asking for is property seek speed? So in our terminology, the parameter is the input and the thing that is being automated is the property. Seek speed currently only applies in the parameter space, so to get a smooth change of property you have to transition through all the values of the parameter. If we had property seek speed, you could jump from one parameter value to another and the property values would interpolate.
Labelled / discrete parameters don’t specifically factor into this, internally they are just continuous parameters that report to properties in integer increments. This is why parameter seek speed works with them. If we had property seek speed, I believe you would get the desired result, i.e. jumping from label A to label D cause the property to interpolate between the property values at those two points, rather than going via the values of label B and C.
For your labelled parameter use case, jumping to different EQ values, I believe if the labelled parameter automated a continuous parameter, then that continuous parameter automated the target property you could achieve your goal. The continuous parameter would need seek speed on it to do the smoothing, but it would follow the curve you set.
+1 Yes please, I am building an ambience system as we speak and having this feature would be extremely useful. If I had to do this currently, I would need to map in code which value correspond to which label