For our next time I want to make sure that we have an optimal way of working not only in terms of producing and controlling content but also in terms of utilizing the system in an optimal way. So here are some questions regarding this:
Like all other bank-based middlewares I have worked with FMOD needs to seperate streaming and non-streaming sounds in different wavebanks. Fair enough. In a sound design perspective it would also be nice to split non-streaming sounds in to smaller wavebanks instead of having one huge bank. Now, would this have a negative effect on performance in any way? If I load an eventgroup that uses samples from this big bank would it only load theneeded resources or would it load the entire bank?
Meta-data is stored in the fdp file in FMOD designer unlike other systems that would store it in seperate "soundbanks" (XACT, gameCODA). It could be nice not to have all meta-data in one big file in order to a) reduce it’s size and b) make it easier overview. Now in the case of FMOD the way to do this would be to have one fdp per what in other deigner tools are refeered to as "soundbank":s. Would this cause any problems in terms of performance and memory usage?
That’s all for now…
- Frohagen asked 12 years ago
1) How do I, as a programmer, control if the entire bank is to be loaded or just parts of it? Is it depending on the event-hierarchy or is there some other way?
2) So there will be no duplicated allocations or anything when running multiple projects? That sounds great. And I recall that you are about to support multiple projects within the same workspace, right? Cause that will probbaly be a great benefit. What about referencing the same wavebank in multiple projects? Is this possible? Is there some upper limit of number of soundbanks and events in a project when one should consider splitting it all up? What is affecting CPU? Seek times?
Use EventGroup::loadEventData() to load all banks used by the specified EventGroup. In this way, the hierarchy does have an influence over what banks are loaded.
Or, instead of using EventGroup::loadEventData(), use EventGroup::getEvent() which just loads the sounds required by the specified event. In this way you can choose to only load the data for the specific event you want.
No, there are no duplicated allocations when running multiple projects. Multiple projects within the same workspace will be available when we implement workspaces. It’s currently not possible to reference the same bank in different projects.
The maximum number of events per EventSystem is 8192 so that would be the maximum number for projects too. Other than that, there’s no hard limit on the number of banks and events. You’ll probably want to split up your projects when they get very large (multiple mb .fev file) and start taking up a lot of memory. With smaller projects you’ll also benefit from (potentially) faster build times and it might be easier to coordinate multiple people working on different projects rather than one big one. As project size increases you may see a very slight increase in CPU usage – seek time will always be negligible.
This might have changed in later versions of FMOD designer but last time I checked loading a project couldn’t be done non-blocking, that is each time I would like to load a project in the game I might cause a stall. Ofcourse this could be avoided by loading all projects needed in the game whenever there is a loadingscreen. Now, in previous games we have had lots of loading/unloading going on in runtime and in these cases I guess loading projects is out of the question.
You can organise your waveforms into as many banks as you like with virtually no performance hit. The programmer decides whether or not the whole bank gets loaded.
It’s actually recommended that you use multiple projects (FDP files) to split up the events in your game. This will save you memory/cpu not cost you more.
Please login first to submit.