I’m wondering on how to replicate what the Wwise SoundSeed Plugin does (SoundSeed Air - Woosh Overview - YouTube)
Basically what I need to do is to generate a whoosh sound when my ship/car passes by really close and fast to a given object in the environment. It should happen only if I’m going fast enough.
The developers won’t use Wwise for this project so I’m kinda trying to manage by using UE audio engine only.
Sound sources that are moving relatively to the listener usually being simulated with the doppler effect that is fairly easy to achieve by manipulating the pitch of an infinitely looped sound whether it is a sample of a car or a ship. When it approaches the listener the pitch is higher but as soon as passing by the pitch will drop. The built in doppler node is the preferred approach to set this up in a sound cue which should do this for you automatically, and you can set the intensity manually to make it more pronounced at will:
I think doppler via pitch shifting can often be a little cheesy for your effect so I’d first try to “sound design” a woosh that includes whatever effect you want in the woosh via your DAW.
To trigger something like this I’d recommend brushing up on blueprints. There’s some details about how to avoid doing too many ticks with BP, but in principle, this should be easily achieved by writing a BP which does 2 things:
Get the distance of the actor to the listener.
Get the actor velocity. If the actor is a scene component, you can do this directly by calling GetComponentVelocity
With the above data you can create BP variables which allow you to tweak thresholds: A distance threshold would define a distance below which you allow a woosh sound to play on the moving actor and the velocity value is a threshold above which you play a sound. Both thresholds have to be reached before you play the sound. So a slow moving ship won’t do the woosh or a ship really far away won’t do the woosh.
You can get fancy and use different threshold ranges to define “near/medium/far” wooshes and “slow/medium/fast” wooshes too.
BP is a very powerful tool for sound design and you have direct access to all the game state you need to do really cool things.
If you have lots of ships where this woosh might be something you want to play, there are other tricks you can do to optimize. Rather than have a bunch of BPs running doing this on every ship, you can have one that slowly sorts ships by distance, then feeds the results to your BP which determines if any of the nearest X ones match your threshold criteria, etc.
Doing this in sound cues is also possible but I believe would still require you to do BP work to determine sound cue params to feed to your sound cue so you can do the threshold calculation there, but might as well just play the sound from BP if you’re going to be doing that.
Also, SoundSeed is a realtime synthesis thing. I’m suggesting doing woosh sounds in an “old school” approach. However, we have realtime synth support now in the new audio engine. In the future, we might be able to support SoundSeed-like things.
I have found this simple way in the source code that - if i’m right - supposed to grab the closest listener (which theoretically should be the player), but does this method available for blueprints as well or any workarounds exists to have access to these informations purely over blueprints?
It’s possible that i can expose this method by manually implementing in code but wondering if that is neccessary to do so
Thanks guys! @Minus_Kelvin:
That’s the kind of approach I was looking for rathen than the doppler effect. The sound effect is more complex because it needs the data that you mentioned above.
I don’t mind to make a synthetized whoosh sound anyways, the logical thing envolving on how to make this work was my main concern, and I think you got my point
I’m pretty rookie at BP and scripting but I’ll try my best.
I don’t actually think there is, but there should be… at least to get the listener geometry. Problem is that the listener in the audio engine isn’t really a UObject or component or anything. Typically the listener is attached to the camera so finding the local player’s camera component is sufficient for computing a distance to “the listener”.
So I managed to state that, at certain distance between the Flying Pawn and a piece of wall, it would print a string (just for testing purposes). Now I have 2 more questions:
1- I did this in the Level Blueprint and I’m not sure if it’s right. I tried to make it work from the Fying Pawn BP but couldn’t get a reference to the wall.
2- How could I get the orientation of that object passing by? I mean, I’d like to know if it’s passing by through the left or right.