How to Expand GASP Foley System for Different Surfaces in MetaSound?

Hi everyone,

I’ve been researching GASP and noticed its high-quality Foley audio quality. After some deep analysis, I wrote a Python script to batch-generate surface variations of Foley audio from the original concrete sounds. Now, I have high-quality Foley sounds for multiple surfaces like wood, metal, grass, etc.

The challenge is integrating these into my existing audio playback system efficiently.

What I Have Tried:

  1. Directly overriding the Waves variable in MetaSound – Seems not feasible.
  2. Using a SurfaceType switch inside MetaSound – MetaSound doesn’t support switching between different Waves arrays by SurfaceType enum.
  3. Duplicating and renaming MetaSound presets for each surface type – This results in 200+ MetaSound assets, and manually assigning the correct Waves array to each one is highly repetitive.

My Question:

What is the recommended approach to extend a Foley playback system to support multiple surfaces without exponentially increasing asset count and manual work?

Does Epic have any best practices for dynamically handling different surface audio variations within MetaSound?

Any insights or alternative solutions would be greatly appreciated!

If you check the ‘Audio’ directory in the projects root there’s a primary data asset called DABP_FoleyAudioBank and a data asset derived from it called ‘DefaultFoleyEventAudio’, these define the sound assets (metasounds or otherwise) used by the foley system, the CBP_SandboxCharacter bp has a ‘GetFoleyAudioBank’ method that returns the data asset you’d like to use, by default it just returns ‘DefaultFoleyEventAudio’ but you can implement a switch in this method that returns a different data asset based on surface type, for instance you could have some ESurfaceType enum and switch on this in the Get Foley Audio Bank event, create different data assets for different surfaces, etc.

Thank you. I know the implementation of Foley Audio Bank, but simply extending Audio Bank to support SurfaceType cannot avoid the explosion of the number of metasound presets based on MSS_FoleySound. There are 12 of them, such as MSS_FoleySound_Jump, each corresponding to a Foley Event Tag. If extended to 15 types of surfaces, the number of MSS will reach 12*15=180. I really can’t think this is a suitable approach.

That does tend to be the case with foot steps yes. Generally speaking when making a game, only the player gets this sort of treatment and then enemies and NPCs will either share the players foot steps or will have a greatly optimized set based on exactly where they can walk.

just to add a bit more detail. You can use a switch style node to take an input from outside the metasound and choose a different wave player with a different bank of assets. Would this get you what you wanted? After an enum is just an int underneath and can be converted into one and metasounds can take ints as inputs.

The downside of this approach being that this metasound will become very heavy. It is actually more desirable from a memory POV to have separate metasounds i would have though, especially if you were targeting a lower platform with less memory.