The FMOD Designer gives sound designers an enormous amount of freedom and hides all of the small details from game programmers and level designers.
The FMOD Designer defines most sound properties internally to prevent them being hidden deep all over the game code. Additionally it supports sound designers, to create behaviors for a sound event and enables programmers to exploit the designed content at run time.
As an example, imagine an helicopter which seamlessly changes it's sound from a muffled flup-flup to a high intense engine sound depending on it's distance. If you shoot it with a gun it will add grinding and crackling sounds depending on the damage parameter.
If it lands the engine automatically slows down because the RPM value gets lowered.
In this picture you can see the distance parameter, actively controlling cross fading of the near and far sounds.
In this picture the damage parameter is visible. It fades in some sound, if the damage is greater than 50%.
Sounds can easily be pre-cached or played from a LUA script by either addressing sound files directly or following a naming convention to address events in object space.
The latter is a combination of the project name (red), sound group and sub group names (blue) and event name (green), separated by colons, as shown in the examples below:
Wave file can be play for fast prototyping, but should not end up in the game unless they are marked as being a voice line and known to the Localization Manager:
The internal FMOD project name, the project file name, and the folder name it is in have to be equal!
More important than simply playing an event, is to trigger its behavior correctly. With the SoundID provided by function Sound.Play() you can call function SetParameter() to change parameters. If an addressed event has stopped playing or was unloaded function SetParameter() will fail. In most cases all important properties like loop-mode or the relative flag are known to the system already, so they do not need to be set up by the script.
If a sound shall be started with a parameter value which is not zero (like pitch or damage), it may be created using the SoundSystem interface, then the correct values can be set, and finally the sound can be played or passed to an entity's SoundProxy to start the sound. This will prevent any audio glitches on wrong parameter values on startup.
LUA functions | |
---|---|
Sound.Play(eventname, position, flags) | Returns SoundID. |
Sound.Precache(eventname) | Returns bool success. |
SetParameter(soundid, parametername, value) | Return bool success. |
Use the SoundBrowser to find the right sound you want to use. It can be opened by the Sandbox main menu entry Sound or is used anytime you click on a sound name field.
In the first view there are all available sound events listed. By clicking Browse all of the sound files can be navigated through.
The main tool sound designers will work with is the FMOD Designer. There are some rules which need to be followed when creating new projects and sound events:
Pre-caching of sounds and buffers which are used to create an event will be possible with setting a flag at calling GetGroup(). The pointer to the group an event is located in, is stored in the corresponding sound-buffer. The pointer to the instance of an event is stored in the platform-sound. The sound-buffer name is built from project and group name. The event name is stored in the platform sound. If the sound-buffer is not used and the event group gets released, all instances of event will be removed by FMOD-EX, so all sounds are informed that their asset was unloaded.
Parameter | A Parameter describes a special input variable of a sound event. This can be distance, pitch, damage, alertness, heat, rounds-per-minute (RPM), speed in m/s, or any other abstract attribute. |
---|---|
Parameter value | The numerical value of a parameter. |
Parameter range | The min/max value of the parameter value. |
Property | A semantical value of a sound, like priority. |
Sound event | This is a special sound with properties and parameters attached to it. It can be played and manipulated. |
Event group | Several events are organized in groups. |
Project file | Several event groups are stored in a project file (Extension: .fdp). These files need to be checked out to change an event which is stored in that project. |
Event file | This file is used by the sound system to access the events (Extension: .fev). Access can be restricted by encryption. |
Wavebanks | The sound data of several sound files are stored in a streamable wavebank (Extension: .fsb). |
Extension | Description |
---|---|
.FDP | Project file |
.FEV | Event file |
.FSB | Sound bank |