Don’t worry about it! Asking and answering questions is the whole purpose of this forum, and everyone is new to begin with.
It’s not actually a necessity; it’s entirely possible to put all your events in the master bank, and your game will work just fine. It’s not usually good practice, though.
Banks are loading units, which is to say, they define chunks of content that can be loaded and unloaded as needed. This is important because computers have limited memory. You could load all of your game’s audio when your game starts up and keep it loaded until the game shuts down, but that consumes more memory than loading only the content you need and unloading it when you’re done.
By contrast, splitting your content into multiple banks lets you choose which content to load into memory and when, allowing you to keep your game audio’s memory footprint to a minimum. It’s also means that the individual banks are smaller, which makes them faster to build and iterate on, and quicker to download (which could be important if you ever need to update a bank in a patch, or if your game allows players to download content piecemeal).
Banks can contain asset sample data, event metadata, and shared metadata. Asset sample data is the audio assets available for your project’s instruments to play, made from all the sound files imported into your project; event metadata is the events and instruments themselves; and shared metadata is everything that isn’t an asset and isn’t part of a specific event, including your project’s mixer, snapshots, and VCAs.
Depending on which “built bank file separation” mode you’ve selected in the preferences window, each bank file contains the asset sample data, event metadata, or both, for the events and audio tables assigned to that bank. The master bank (and only the master bank) also contains your project’s shared metadata, which is why it needs to remain loaded at all times: Without it, your game wouldn’t have any buses for your events to route into.
Loading a bank with
System::loadBankFile() loads all the event metadata and shared metadata in that bank, which is necessary if you want to use that content for any reason. Once you’ve loaded a bank’s metadata, you can use
Studio::EventDescription::loadSampleData to load some or all of the sample data from that bank. If you use
Studio::EventDescription::createInstance to create an instance of an event without first loading the event’s sample data, the sample data will be loaded automatically as part of creating the event instance - but because loading sampledata takes time, this may mean that the event instance isn’t ready to play immediately, so it’s usually better to load the sample data in advance.
Does that answer your questions?