Footstep surface types using Snapshots


(Graham Fennell) #1

Hey guys,

I’m making an Unreal project for my Honours degree integrating FMOD. One thing I’m having trouble with is different footstep surface sounds, I managed to get two working - wooden floor and carpet and I could transition between these two by using a snapshot to mix the 2 event sounds attached to my character animation as per the FMODtv tutorial on character sounds. This worked great. However, when it came to adding a third surface my unreal project would crash on playback. I found this is due to triggering all 3 events at one time attached to my animation blueprint, so the moment I took one step it would freeze and have to be force quit.

I assume I will no longer be able to mix snapshots to trigger more surface sounds this way without crashing so I was wondering if anyone knew a simple way to mix these sounds in 1 event and transitioning between them with trigger volumes in the same manner as you would with snapshots?

Thanks in advance


(Anders Jakobsen Hofsten) #2

I do footsteps with a parameter and place the events in the parameter timeline and have the normal timeline empty. Then I simply play the event when the footstep should be used and set the surface via the parameter. Ie: SurfaceType = 1 and the param goes to 1 and only plays the event on 1.

You can place events directly into the parameter timeline and bypass the normal linear timeline completely.


(Jesse Lyon) #3

If you only have one parameter defining your playback, then use Multisounds on a “Surface” parameter track. Do not use embedded events, as your footstep voice count will continue to stack up infinitely…

http://www.fmod.org/questions/question/one-shot-lifespans-not-releasing/

My problem is I also want to use “Player Speed” and “Shoe Type” as additional parameters, so because of the issue above, I need to split these out into additional separate events, and control the logic outside of FMOD (UE4 Blueprint).


(Jesse Lyon) #4

Sorry, Im having trouble explaining this…I have three parameters Surface, Shoe Type, and Speed, but I only want one audio file playing for the output. For example, the player could be walking, on dirt, wearing sneakers, or running, on pavement, wearing boots, but whatever the situation, I only want one type footstep sample playing in the end. If I had all three groups of samples spread across three parameters within one event, then I would get three samples playing. I could place my surface sounds horizontally across one parameter, and the shoe types vertically on separate tracks and then use a parameter condition on each track event. This would solve two of the three parameter types, but then I have all the different locomotion speeds (recorded on all surfaces and for all shoe types). If I were able to set a “Speed” condition in a Multisound Playlist to determine which group of sounds within the playlist to randomize from, that would solve my problem.

Apologies, this is hard to explain without showing you the actual project, but maybe I can send you copy of it to take a look.


(Joseph Harvey) #5

@JesseLyon Sending us your project might be a good idea; I still don’t understand what you’re trying to do. How does playing multiple events prevent more than one sample file from playing? Each event presumably contains content that plays - Or am I misunderstanding the situation?


(Jesse Lyon) #6

If I split these into multiple events, I would then have to handle the logic as to which event/sample plays back in UE4 Blueprint. I would rather handle all the logic in FMOD, but I cant use embedded events due to the instances building up and never releasing (as per my other thread). I will try to strip down and package up my project and send to you with just the footsteps, maybe that will help.


(Joseph Harvey) #7

@JesseLyon Sending the project would be good; I’m afraid I still don’t understand your situation. Why do you bring up nested events?


(Anders Jakobsen Hofsten) #8

I think you think that I/we (?) mean to split the playback intog three separate events that UE talks to. What I/I assume we are talking about is an event in FMOD that has several sounds (multisounds, for example) on it that the FMOD event plays back, which are controlled by parameters. You can have as many as these as you like and the logic for playing them in UE you still be just one node, since UE talks to the event and all logic etc is handled by FMOD is talking to the content of this event, in this case several containers of audio and conditional parameters.

One event, 3 parameters that you get from UE (speed, surface, type of shoe). One event with several assets.

Maybe my use of “event” to describe an event (change in behaviour in this case) happening inside the event. was… well…badly worded :slight_smile:


(Joseph Harvey) #9

@AndersJakobsenHofsten Jesse Lyon has clarified their requirements in an e-mail: Their event requires twelve multi sound modules, each of which should only play when three separate parameters have different specific values, and only one of which should play in any particular instance of the event. I have replied with some possible solutions.


(Jesse Lyon) #10

Thanks so much for your help Joseph! The stacked parameter conditions seems to work like a charm, and Im not seeing any performance issues (yet). You guys rock!

Feel free to share that session with anyone else as needed.


(Joseph Harvey) #11

This is a good solution. (Note that, while all timelines are parameters, not all parameters are timelines.)


(Joseph Harvey) #12

@JesseLyon I’m afraid I don’t understand this constraint. Why not simply put multiple parameters in a single event? There is no limit to the number of parameters an event can have, and each of an event’s parameters can hold content.


(Jesse Lyon) #13

And just an FYI, we’ll likely have about 10-15 surfaces and 10-15 shoe types in the end, so these events are going to be pretty massive/complex. The only way it will break down is if we end up having to split them out into separate banks for dynamic loading, in which case Im back to having them in separate events and controlling the logic/bank loading in UE4.


(Anders Jakobsen Hofsten) #14

For what it’s worth ,a clarification of how it was solved would help others. For me, I am interested in how it was solved as well as I am always eager to learn. :slight_smile:


(Joseph Harvey) #15

@AndersJakobsenHofsten I have updated the accepted answer with a description of the solutions we proposed.


(Joseph Harvey) #16

Instead of placing each surface in its own event, I recommend creating a single footstep event and placing each surface at different points along a parameter of that event. Then, set the value of this parameter based on the surface the character is interacting with. As far as I can tell from your description, this would allow you to get the effect you want without havin to create so many event instances.

Alternatively, you could position each sound module such that they’re all triggered by your footstep event, and automate the volumes of each one on a different parameter. This would be slightly more complex to set up than the above solution, but would allow you to control the volume of each and every surface independently, and would also allow you to avoid having quite so many event instances.

EDIT: It was clarified in an e-mail that each multi sound module needed to play only when the event’s three parameters had a specific combination of values. Two general solutions were found, both of which made use of parameter conditions.

The first made use of timeline logic. A series of transition markers was created at position 00:00:000 in the timeline, each of which had multiple parameter conditions in its trigger logic. This allowed the event to jump the timeline cursor to the appropriate trigger region based on the values of the three parameters in the event.

The second solution was to place multiple parameter conditions on each trigger region such that it could only be triggered if the appropriate combination of parameter values was met. By placing all trigger regions such that they perfectly overlapped, this allowed the event to trigger only those sound modules for which the parameter values were correct.

All other solutions proposed were variations or hybrids of the above.


(Anders Jakobsen Hofsten) #17

If you must have only one sample playing in the end, you can place each corresponding step at the parameter value (say, surface 1, place your event on 1 (or even a bit before as sometimes 1 might be 0.999999999999999999…9 instead), and keep the timeline empty. This way, the event set to the parameter will play meaning that you can have 3 parameters and use them as you want but only play one sample instead of 3 layers.

However, I would use the surface as a horizontal parameter that selects surfaces. Use the shoe-type as a horizontal parameter playing events on a second track based on what type of shoes (here, I assume that you can to select the type of shoes and surface independently of one another), and a third parameter used like a boolean (0<->1) either plays the slow steps or turns those events off with parameter conditions and turns the fast steps on.

Ideally you would figure out when each foot hits the ground and play the event there instead, and skip the speed-parameter all together and just play each step when the character places its foot on the ground. You could of course use the speed-parameter here to gradually switch between slow steps and fast steps then instead of a bool.


(Jesse Lyon) #18

Hi Anders, thansk for your reply. My generic “Foot Down” events are being sent via animation tags when the foot contacts the ground. Yes, I could get more specific with the foot down events (FootDownWalk, FootDownJog, FootDownSprint, etc), but I would rather handle this logic more systematically with a speed parameter, as we will have hundreds of other animations to tag/maintain throughout development.

I read through your other comments re. horizontal parameters, but Im not sure Im quite following what you mean. I have no way of playing more then one horizontal parameter at a time with samples independent of each other, there would be two samples playing at once. I can use a parameter condition which would allow me to play one horizontal and then many vertical tracks independently, but thats it, Im limited to two parameters.

Cheers,
JL