Property seek limitations and suggestions

I’ve just been experimenting with the long-awaited property seek.
I think it partially fails to do what it’s supposed to. In my opinion, people will mainly use it on volume, for vertical adaptive music, to switch from and to any state with a discrete parameter (that was the main request on the forum).
The point is that there are two main types of vertical adaptive music: the additive stems technique, and the “full mix switch” technique. Property seek works quite well for the former, but not so well for the latter, due to volume consistency issues. There should be a ‘seek timeline curve’, which would allow transitions to be refined. Also, the volume logarithmic ramp should be modified so that two volume property seeks going in opposite directions at the same time, from and towards -inf dB, always result in a consistent perceived volume, which is absolutely not the case yet (see the video below). A workaround is to set the downward speed to about 1/4 of the upward speed, but that’s far from perfect.

At the moment, it seems that the best way to implement the “full mix switch” vertical technique in FMOD is to dispatch the items along the timeline and use relative transitions, which has its drawbacks (like the impossibility to mix with the stem layering technique) and philosophically uses a horizontal resequencing tool for a vertical technique

Also, QoL suggestions:

  • The search property setting should set… something useful by default, not “instant” (which means it’s bypassed).
  • It should be much easier to copy/paste property seek settings (without copying the entire automation).
  • It should be possible to save property seek settings presets.

In this exemple, I switch between two identical items, to highlight the volume ramp problem:

Thanks for the feedback! It’s great to see you digging into the new tools!

In order to get an equal power blend / crossfade, the best workflow is currently the original workflow of applying Seek modulation to a Parameter & using automation curves:

That said, I can see what you mean & I think the QoL suggestions are definitely good suggestions. I’ll add them to our feature/improvement tracker.

To dive into this a little deeper, I think a big thing to remember here is that Seek can be applied to any property, not just volume. Seek as a modulator wasn’t intended necessarily as a solution purely for mixing or stems, but as a modulator to be used on any value. Therefore, having specific curves applied to specific property types would result in unexpected behavior. If you need automation curves, then the original method of using Parameter automation curves, then applying Seek to the Parameter is still a completely viable workflow & a particularly good one for this type of mixing.

Regarding the Full Mix switch, some approaches I found particularly useful were using the Ascending / Descending values when dealing with blending mixes. As you can control how each item fades out vs fades in, they can give a lot more control on a per track / effect basis. In my case, I had certain stems & mixes come in faster and fade out slower etc to ensure consistent volume rather than relying on purely the crossfade.

Lastly, an important factor we need to think about when implementing features like Seek is how the values are being interpolated. In this case, the raw values are already being read from an existing mapping curve, i.e. the dB curve. So if we were to apply another curve on top of the existing dB mapping, the values would be remapped essentially twice, which can lead to performance issues. Of course we can investigate solutions, but I just thought it’s a valuable insight into the process.

All that said, being able to apply curvature to Seek could be useful in certain situations & performance issues aside, it’s definitely worth discussing.

Hopefully that helps clear a few things up!

-Aaron Edwards
Product Manager

I know, but by seing (and having contributed to) those posts (1, 2, 3), I guess people were mainly waiting it for the use on volume for transitions between states.

I don’t get it. What’s the logic of applying the same curve on volume (dB) and on, for instance, the rate of a chorus effect (Hz) ? It’s already like adding oranges to carrots. Each type of property should have it’s own relevant map.

I can understand that, and keeping things simple is often better… if things are simple and correct in the first place! I think the default volume map is incorrect. Either an equal gain law or an equal power law give way better crossfading than the volume seek progression. In the following exemple, the equal gain law (1st exemple) is better because of both signals being identical, but the default crossfade curve (2d exemple) should be better in most cases. Note how the volume seek (3d exemple) completely fails compared to both of them.

I already mentioned that in my first post, but that’s a poor workaround. The 4th exemple in the video above uses an upward value of 0.5 and downward value of 0.15 ; it’s better but far from ideal.

No it’s not, because it’s not possible to switch from a value to another without going through intermediate values. That’s precisely to overcome this limitation that the property seek was awaited.

If I understand this correctly, @Alcibiade… You’re happy with the behavior of seek modulators for most property types and most situations, but have found they’re not suitable for crossfading one signal with another, as a crossfade requires equal-power curves and seek modulators do not use that type of curve to smooth volume properties.

I can certainly see why you’d want that, so I’ve added the suggestion to our feature and improvement tracker. It’s a tricky request to fulfill, though, because it touches on some details of how volume properties work under-the-hood. I’ll try to explain as best I can below.

There’s also a workaround that you should be able to use in the mean time. I’ll describe it at the end of this post.

Taking about the type of curves we use is something of a red herring. It is technically part of the explanation, but on its own isn’t enough to answer the question “why do seek modulators work this way?” To answer that question, I’ll first have to explain a little of the seek modulator’s design, so please bear with me.

As you’ve doubtlessly observed, the behavior of a seek modulator is defined by its “speed” property; or by its “ascending” and “descending” properties if it’s set to asymmetrical mode. All three of those properties function in essentially the same way: They define a “speed limit” for the property, putting an upper limit on how quickly it changes.

The values of all these properties represent the fraction of the property’s range that the property’s value may change by in one second. That’s important, because it means that the rate of change defined by a seek modulator is inextricably tied to the scale used by that property outside the context of seek modulators. If a modulator’s speed is 0.1 and a user reduces that property’s value by exactly 1/10th of its range, the property’s value must take exactly one second to reach the new value.

The equal-power curves required for a smooth crossfade have a specific shape: They’re shallow at high volumes, and steep at lower volumes. If we were to implement such curves for seek modulators on volume properties, it would mean that the “speed” properties of those seek modulators would no longer be accurate: The time required to traverse 1/10th of a volume property’s range would need to be longer at high volumes where the curve is shallower, and shorter at low volumes where the curve is steep - and that would mean that the values displayed for the seek modulator’s speed properties would no longer be accurate.

As I mentioned, this is a tricky problem to solve. We can’t simply change the mapping curve that the modulator uses for volume properties, because that would make the values displayed for the modulator’s speed properties inaccurate. We can’t make the value displayed for a seek modulator’s speed properties change depending on the current value of the property, because that would make the displayed value of the property almost meaningless and difficult to interpret, and therefore practically useless. We can’t change the scale used by volume properties under-the-hood to make them naturally result in equal power curves for seek modulators, because doing so would break how volume properties work in every other context in the FMOD Engine… And there aren’t many other options.

Which isn’t to say that the problem is unsolvable, of course; just that a solution would necessarily involve a substantial redesign of how seek modulators work when applied to volume properties, and a new way of describing the maximum rate at which the property’s value can change that doesn’t involve the property’s range in units per second.

So, while I can see why you’d want to use seek modulators for crossfades, and I’d added your suggestion that we improve crossfade support to our feature and improvement tracker, I can’t predict when a solution might become available. We’ll have to discuss this feature internally and do some design work before we know.

I suspect Aaron was actually alluding to a different workaround to the one you’re thinking of. Specifically, I believe he meant to suggest that, rather than automating your volume properties directly on the controlling parameter, you should create one new parameter for each volume property you want to automate, automate each of those volume properties on one of those new parameters, then automate those parameters on the controlling parameter. Then, place the seek modulators on the new parameters, rather than on the controlling parameter or the volume properties.

This method avoids the “going through intermediate values” problem that you describe, because the controlling parameter lacks seek speed and so is able to change instantly from any value to any other value; and because the parameters used to automate the volume properties sit between the controlling parameter and the volume properties, you can use their automation curves to define exactly how those volume properties change over time when the intermediary parameters’ values are set by the controlling parameter, giving you absolute control over how sounds fade in and out.

It’s a little more work to set up, but you should be able to use this workaround to create the perfect crossfades you desire.

Thanks @joseph for the insight.
Of course this is not only about what my personal use would be. It seems, when I posted this in 2021, you already had in mind how this feature would have to be designed. And I suspect users showing their interest were especially focused on the diverted use I’m describing, and I also suspect you didn’t fully adapted the development of the feature accordingly. Of course I might be wrong, but that could be interesting to ask users what they were waiting for exactly.
By the way, I clearly remember thinking, at that time in 2021, “I hope they will correctly map the volume curve”!

This is, in my opinion, clearly the best solution, compared to the other ones. I think nobody cares about the real meaning of the value displayed for the seek modulator. “range/s” didn’t mean anything for me (until you explained, of course) and I didn’t care. I understand if the mapping is changed, they won’t be exact predictability of the seek duration to reach its target anymore, but I think this is way less important than having a smooth audio transition.
Maybe the best of both worlds (with a little loss of clarity) would be an option to change the mapping (“linear dB”, “linear gain”, “constant power” maybe) of each volume seek modulator. This would ensure retro-compatibility with projects already using the feature.

I’m quite sure Aaron was thinking about the normal method with a unique continuous parameter (“original workflow”, “completely viable workflow”, “particularly good workflow for this type of mixing”).
That being said, I indeed thought about what you suggested, by using proxy parameters, but never tried yet.

Indeed we did! The feature request was famously phrased as “Seek speed on… everything!” and so we made that idea our guidepost: We took the seek speed behavior then only used by parameters, and designed a modulator that allowed that behavior to be applied to nearly any property.

I’m afraid we’ll have to agree to disagree about this. We believe it is vitally important that FMOD Studio should always present its property values accurately. To do otherwise would undermine your ability to rely on and trust the information that FMOD Studio presents, so this is not something we’re willing to compromise on.

Of course, we also care about letting you achieve smooth audio transitions, which is why I added your request that seek modulators better support volume crossfades to our feature and improvement tracker; but we will pursue ways of doing so that do not compromise the trustworthiness of FMOD Studio’s interface. Whether that means changing the units used by the seek modulator’s properties, or some other solution, only time will tell.

Incidentally, if you encounter a term in our interface that you do not recognize, I recommend looking it up in our online documentation. We regularly update it with detailed and accurate information about newly added features.

If that means renaming the unit, that’s not a serious disagreement!

After discussing this with our developers, we’ve come up with a potential solution that should allow the kind of crossfades that you want.

Our plan is to add a new control to everything with a volume property in FMOD Studio - and when I say “everything,” I mean every track fader, every bus fader, every instrument volume control, every effect with a gain property or equivalent, every effect with a gain property, every effect’s normally-hidden input gain property, and everything else measured in dB that runs from -80 to +10. (Exactly what form this new control should take is still undecided, but for now imagine that it’ll be a drop-down menu next to each volume dial, volume fader, and volume number box.)

The new control will feature a list of possible mapping curves, including the current default curve and the kind of constant power curves required for flawless crossfades. (We might add other useful mapping curves as well.) Selecting any option in this list sets the associated volume property to use that mapping curve, without affecting other volume properties in your project. For example, if you change the mapping curve used by the input gain property of a specific event’s master track volume fader, the change will affect only that specific volume fader; the master track volume faders of other events will not be affected. Similarly, if you change the mapping curve used by the input gain property of a flanger effect, it will not affect the input gain properties of other flanger effects in your project (unless it’s a shared effect, in which case all instances of that specific shared effect will be affected the same way).

All modulators and automation on a property must use the same mapping curve in order for their adjustments to that property to be combined in a consistent and understandable way, so changing the mapping curve used by a specific volume property will alter the curve used by every modulator and automation curve on that property, not just the seek modulator. This will have a beneficial side effect: It will greatly simpify creating equal-power crossfades using all types of modulators and automation, not just seek modulators. For example, you’d be able to create an equal-power crossfade by creating a pair of very simple automation curves, one that’s a straight line running from -oo dB to 0 dB, and another that’s a straight line running from 0 dB to -oodB.

We’ll also make it clear in our interface and documentation that the values given for a seek modulator’s speed parameter reflect the mapping curve used by the property to which the modulator is attached.

Does that sound like it would suit your use-case? We’re interested in hearing your feedback, so that we can avoid accidentally missing the mark.

That seems quite nice to me.

A couple of points come to mind.

Does this mean that this exact curve will result in different release behaviour depending on the volume curve setting? If so, it may or may not be confusing for the user, I’m not sure yet. The lack of consistency of the AHDSR across objects could be confusing, but on the other hand we will probably not use the seek modulator and the AHDSR on the same object that often (the former on individual tracks, the latter on the master track or individual instruments).

I’m just throwing out ideas: the volume default map curve and seek speed could be an event macro property (individually bypassable). Because testing and setting the right values in a stem-layered dynamic music using a discrete parameter requires a lot of clicks, compared to the simplicity of the unique continuous modulator workflow. Modifiable presets would be fine too (as I suggested as QoL improvements in my first post), but I think an event macro would be better, as this kind of setting is usually made on an event basis, and we probably don’t want to modify other events by changing the preset values…

That’s correct, yes. The equal-power crossfade automation curves that I described in my preivous post would only look like two straight lines for volume properties set to use the crossfade-friendly mapping; if you changed them back to the default mapping, the automation curves would change shape to resemble the automatically-generated equal-power crossfades that appear when you overlap instruments in the current version of FMOD Studio. They’d still represent the same change in volume over time, and the crossfade would behave in exactly the same way in-game, but because the mapping curve used by the property is changed, the automation curves’ appearances are also changed to suit it.

We’ll try to make the mapping used by a property obvious, to help prevent the kind of confusion you mention.

That was our thought process, too: It’s rare for someone to use a seek modulator on the same property as other kinds of modulator. It’s not totally unheard of, but even when it does occur, the interactions are unlikely to be too surprising - especially for users whove intentionally selected a different mapping curve for the affected property.

Interesting point… Making it an event macro control would make the feature less flexible, as it would be impossible to mix different mapping curves in the same event, but you’re right that in many events you’d only want one mapping for the while event… Perhaps we could add a “set mapping curve for entire event” as a convenience feature, or have the ability to override the mapping curve specified in the event macros on a per-property basis?

Generally speaking, I understand that, for the sake of coherence, you’re keen to make something bigger, with more consequences, out of my simple request. But, at the moment, I don’t see the real benefit of changing the map curve for other common tasks (like standard automation or AHDSR modulator). That’s your design choice of course, you know FMOD better than I do.
I think the default behaviour for volume properties on which the seek modulator is used, should obviously be the crossfade-friendly one. Does this mean this mapping should coexist with others? Or does this mean it should become the new default mapping for every volume property, changing users’ habits? These design decisions are up to you.

One or the other should be fine.

However, I was also talking about a way to set all the volume seek speeds (not just the curve map) for an entire event in a single place. I think this would be useful if this becomes (as I hope it will) the new standard way of doing vertical adaptive music, especially when there are lots of stems/layers to deal with.

Thanks for the clarifications and feedback!