I have an approach to simple music triggering that works for me, but I’m wondering if I missed any features in recent years that would make me rethink that approach?
Currently, we set things up to work like they did in the “Music” system of FMOD Ex/Designer. Specifically:
- Our code only allows one song to play at any given moment (except when cross-fading between songs). Is there anything in Studio that can handle this?
- For cross-fading, we have the ‘new’ song define how quickly the ‘old’ song fades out. I.e. We have a parameter in each song that defines this value for our code to use, so that our code can control the fade-out of the ‘old’ song. This is mostly useful for “Victory” or “Defeat” stingers, where you might want the ‘old’ song to stop quickly.
I could probably do this all inside of FMOD via a single complicated event, but that can get unwieldy. So our programmers handle this via our game code, but if that’s no longer necessary and I can save them that work, I’d be happy to do more within FMOD.
Another reason I can’t do this whole set up within a single event is because I need the ability to put post-launch new music into a new bank, so as to keep patch sizes small. Correct me if I’m wrong, but I don’t believe there’s a way to have a single event use audio files located in multiple banks?
There are various ways to achieve this in FMOD Studio- the simplest I can think of would be to go the single “controller event” approach, which I don’t think would get too complicated with the right design. Here is the setup I have in mind.
- Create a new event with a discrete or labeled parameter sheet.
- For each parameter, add one of your songs.
- For the crossfades, add AHDSR modulators to each instrument’s volume. The attack time will be how long it takes for the track to fade in, and the release time for how long to fade out.
With that you will be able to switch between each of your songs and stingers using a single parameter- this should be a lot easier for your programmers to implement (they just need to set a parameter), and you will be able to have a lot more creative control over how everything fits together. You could also easily extend this post-launch by increasing the range of parameter values and dragging in your new songs.
A single event can use audio files in multiple banks, so you will be able to assign this modified “controller event” to a new bank and use it without issue. It will however contain the audio data of all the other songs, not just your new song. To remedy this, the design becomes a little more complicated:
- Create a separate event for each song.
- Assign each of these event songs to your controller event as referenced events.
- Assign all of your song events to one bank.
- Assign your “Controller Event” to a separate “Controller Bank”.
- Disable Include referenced events in banks in your FMOD Studio settings.
- With each release, assign all of your new songs to a new bank, and modify your Controller Event directly, replacing the Controller Bank with the release as well.
With this approach, new audio data will always be separated from old audio data, and changes to your Controller Event will only ever consist of small metadata changes, keeping your patch sizes as small as possible.
Hopefully that all makes sense, please let me know if you have any other questions!
Thanks a lot, Jeff! That working great for me so far.
I also put the Release of the AHDSR of each song on a parameter, so that I can adjust the duration for the song being stopped via a Command Instrument. I.e. I put a command instrument in each song that sets the parameter value.