Version
menu
|
Wwise Unreal Integration Documentation
|
External Sources and their media are decoupled by default. You must map External Source Cookies, which are equivalent to ShortIDs, to the media to play. External Source media can be generated alongside SoundBanks and streaming media, but you must also track the media files and their metadata.
The Simple External Source Manager provides features you can use to track External Source media and map them to External Sources. It uses Data Tables (.csv files) that describe the External Source media to use in the game as well as an API and Blueprint functions to assign media to External Sources.
The Simple External Source Manager supports the External Source Manager Implementation in the following ways:
A usage example of this submodule is available in the Wwise Demo Game (see Using the Wwise Demo Game).
By default, the Simple External Source Manager module is disabled. To enable it, add the following lines to the DefaultEngine.ini file in your Unreal project:
This code overrides the WwiseFileHandlerModule with a module that uses the Wwise Simple External Source Manager submodule to handle loading External Sources.
There are two Data Tables and a Directory to set in the Wwise Simple External Source Manager Settings:
Entries in the media info table have the following properties:
AkCodecId enum in AkGameplayTypes.h.Entries in the default media table have the following properties:
ExternalSourceCookie. Used for lookup in the table.ExternalSourceMediaInfoId in the Media Info Table.When the Simple External Source Manager is instantiated, it reads the Media Info Table to populate its list of media metadata. At the same time, a map of media names to media IDs is populated for use with the External Source Manager Blueprint Functions.
Next, the External Source Default Media is read, and External Source Cookie/media ID pairs are added to a map. This optional Data Table sets default media for External Sources to use in the game. This system reduces the number of Blueprint and function calls to the SetExternalSourceMedia methods: if the default media are already defined, it is only necessary to use these methods for External Sources that dynamically change their media.
When the External Source Manager loads an External Source (usually triggered by an AkAudioEvent being loaded), a state structure that tracks the number of assets that reference the External Source is created and this map is checked. If a media pairing exists in the map, a state structure for the media is created or updated. Depending on the information read from the Media Info Table, the media is either loaded into memory from disk or, if it is streamed, the created state is registered to handle incoming streaming requests from the sound engine.
If an External Source Cookie/media ID pair is set during gameplay (for example, by the External Source Manager Blueprint Functions), and if the External Source is already loaded, the media is loaded immediately. If the External Source is already mapped to a different media, the reference count of that media is decremented. If the reference count is 0, it is unloaded after it stops playing.
All PostEvent calls that pass through the AkAudioDevice, including PostEvent calls from the Integration's Blueprint functions, call the External Source Manager's PrepareExternalSourceInfos method. This method selects the media to post on the passed External Source cookies. After the operation succeeds (or fails), the BindPlayingIdToExternalSources method is called to bind all the selected media onto the posted event's Playing ID. Similarly, when Events finish playing, the OnEndOfEvent method is called, which informs the External Source Manager that the media are no longer used by that Playing ID.
Finally, the Cook method supports the packaging of External Source media. When any Event that uses External Sources is packaged, the Cook method is called for each External Source. When this method is called, the Simple External Source Manager stages every media file in its Media Info Table for packaging. Because this only needs to happen once, a flag is set and subsequent calls to Cook do nothing.
![]() | Note: If you post events with External Sources directly through the WwiseSoundEngine API, ensure that you implement the External Source Manager's PrepareExternalSourceInfos, BindPlayingIdToExternalSources, and OnEndOfEvent at the appropriate times. Otherwise, if you switch the media an External Source uses while it is playing, the previous media might be unloaded prematurely, which could cause the sound engine to crash. At a lower level, you can also override the I/O Hook and handle the file management yourself. |
When the Data Tables on disk are modified and the Unreal Editor is open, their contents are re-parsed. Afterwards, all loaded Wwise Events Assets are unloaded, then reloaded. This brute force approach is the simplest way to ensure that the External Source Manager's state is properly updated.
To update the mapping between External Sources and media, use one of the Blueprint functions to set External Source media.
There are three Blueprint functions that take names or IDs, depending on your preference:
MediaID to specify the media.MediaName in the Media Info Table to specify the media.Cookie to specify the External Source and the MediaID to specify the media.When you set an External Source media with strings, the Cookie is determined by a hash of the name string. The MediaID is retrieved by looking up the the media name in a map that is populated when the Media Info Table is parsed.
![]() | Note: Blueprints can only use signed short integers. To circumvent this restriction, we use a FAkUniqueID variable to set the External Source cookie value. |
Developers can set External Sources through code in two ways: they can call the Blueprint functions described in the previous section, or they can retrieve the External Source Manager instance and call its methods directly. Most methods in the Wwise Simple External Source Manager are virtual, so developers can extend this manager in a new module to use their own data structures and logic to track media and pair with External Sources.
The main limitation of the Simple External Source Manager design is the inflexibility of the Media Info Table with respect to multi-platform games. Different platforms use different codecs to decode media, but the structure of the Media Info Table does not support this. One potential solution in an extension of the manager is to create platform-specific Media Info Tables and package the correct one depending on the build target.
When streaming, External Sources have more limitations than internally packaged media. Zero latency is not possible with External Sources, and the prefetched data is only provided to the sound engine when it is requested for playback. There is a playback delay between the initial PostEvent and the actual sample processing, which would occur with any media that do not have zero latency.
Questions? Problems? Need more info? Contact us, and we can help!
Visit our Support pageRegister your project and we'll help you get started with no strings attached!
Get started with Wwise