Question about voice stealing for generative music

Hi, I’m working on an ambient music system that layers triggered musical layer loops. Lets say I have a max instance of 5 of these loops and, lets say, I currently have 5 going and I’m triggering my 6th loop (which will replace the oldest loop currently playing). Currently, triggering that 6th, newest musical loop/voice will mean that oldest one has its voice stolen and ends quite abruptly. Is there any way to make it so the oldest loop/voice ends more gradually? Lets say I want the newest musical loop/voice to trigger a 10 second fadeout of the oldest loop/voice. I’ve tried adding a release to the master of the track itself, but that doesn’t seem to control it.

Thanks so much!

No, there is no way to make a stolen voice fade out more gradually.

Stealing behavior is a resource management tool rather than a creative sound design tool, and so ends voices as quickly as possible when they are stolen to ensure that stolen voices cease consuming system resources as quickly as possible.

You should be able to achieve the effect you want without using stealing. Could you describe what effect you are trying to achieve in more detail?

Hi Joseph, gosh sorry it took me so long to reply, things got busy and I guess I didn’t have notification on. Thank you for the reply!

Hopefully I can still get your input on this topic though, as I’m not further along than I was when I originally posted this question. The effect I’m trying to achieve is this: I’m working on a generative music system in which stems of music are triggered by an single action that the player does (lets say throwing a ball). These stems can layer on top of one another to create an organic Brian Eno soundscape type thing. So for example, player throws a ball, it triggers a layer of music to play, another ball thrown, it immediately triggers an addition stem that plays in addition the first layer, 3rd ball, 3rd stem added to the mix. So on.

But after a few ball throws, the density of music gets a little too much so I want to limit how many stems can play simultaneously. However, I don’t want to just stop new layers from triggering because I’ve hit, lets say, 5 maximum music voices playing (lets say 5 is the max number). Instead, I want the newest musical stem to gradually take the place of the oldest one by slowly fading out the oldest layer so it’s not jarring. Is there a way to achieve something like this? Right now I’m using the voice stealing to do this, and as you might imagine, it just immediately removes the oldest layer, which doesn’t sound very good.

Sorry for the long description! Let me know fi the question doesn’t make sense, I can try to explain it in better detail.

Thank you!

The easiest way to get exactly the behavior you describe would be to create a music event (or multiple music events), and use your game’s code to control when instances of these events are created and stopped. You could also use a single music event with five different instruments, each controlled by a different parameter, and manually control the values of those parameters from your game’s code to ensure they trigger and untrigger their respective instruments at the appropriate times. Either way, FMOD Studio has no awareness of your game state and no ability to simulate your game state internally, so your game’s code will have to keep track of how many balls are in the air and when specific balls’ instances or instruments need to be started or stopped.

For simplicity of implementation, I’d probably prefer to create a music event with a single parameter called “balls in the air.” I’d give the event five different instruments to be my music stems, and set their trigger conditions such that the first becomes audible when there’s at least one ball in the air and fades out when the number of balls drops below one, the second when there are at least two balls, the third when there are at least three, and so on. This would mean that, rather than each ball having its own stem, the complexity of the music would increase and decrease based on the number of balls currently in existence… Of course, this would be a fairly significant departure from the behavior you describe, but it would be easier to implement if you don’t require each instrument to be associated with a specific ball.

Awesome! Thank you so much Joseph, I appreciate you being generous with your time and offering this thoughtful and detailed response. :slight_smile: This helped a lot, and it’s great to know I wasn’t just missing some menu or option somewhere. Thanks again for the help!