Apply LPF to audio component?

I’m sure I’ve asked this in the past, but still don’t know if this is possible.

I find it very strange that you cannot apply a low pass filter to a sound using script. An example where you might need this is to adjust some sound when the player is underwater to make it sound muffled.

I’ve hacked around this up until now, by playing sounds from an actor attached to the player, setting an appropriate distance in the sound cue for LPF on attenuation and then adjusting the distance this actor is from the player.

While this hack works mostly fine, I find it frustrating and simply want to dynamically apply these types of filters via script.

Another annoying thing is only being able to apply reverb to a sound is by having the sound play inside a reverb volume. The functionality is clearly there, but there is no access to it without hacks.

Any ideas how this might be done?

what are you using in (the map or the player) for the audio. which class?

Can you push a mix and apply EQ there?

@Valkyrie_Sound I’m not sure I understand what you mean by “push a mix”.

@gamepainters Do you mean which actors do I play the sound from?

I know your using the audio component class. Are you putting in a AudioDevice or AmbientSoundSimple or SoundCue.

Typically I’m playing a soundcue using PlaySound() in various actor classes.

so your just making an object from the audio component in defaultproperties?

@gamepainters No, most of the time i’m just doing:


SomeActor.PlaySound(SoundCue'SomeSoundCue');

@ - I’m talking in Blueprints but there is a node called “Push Sound Mix Modifier”. Using this (or corresponding code) allows you to apply a sound mix.

In the part of UE4 where you’d normally have your Blueprint or Static Meshes, right click and select Sounds > Sound Mix. You should be able to apply EQ using that. Having said that, I’ve not been able to get it working in 4.23 - I know there were some reported audio issues with reverb not working initially but not sure if this is related.

@Valkyrie_Sound This is for the UDK (Unreal Engine 3) forum. Thanks for your input regardless.

Actually (for anyone’s that’s interested), I’ve realised I can just access the sound nodes in the soundcue and dynamically change them via script.

So then if the player was underwater (and didn’t want to rely on reverb volumes, as they have proven unreliable for me) I could just catch each sound that’s being played via


ClientHearSound(SoundCue ASound, Actor SourceActor, vector SourceLocation, bool bStopWhenOwnerDestroyed, optional bool bIsOccluded )

in PlayerController and apply the necessary adjustments to the soundcue (and it’s attenuation node’s LPF settings) there.

I’ve not actually seen this technique documented anywhere, so thought I’d share.

Unfortunately this doesn’t help with applying reverb (I’ve not seen that anywhere in script), but for LPF it works.

Woops - sorry! I had just done a search across the forums for “audio” to see if there was anything I could help with. I have an audio book (I know! old school!) that is full of tutorials for Unreal - I think it uses the UDK. I’ll check.

Update:

Yep, there’s some stuff here but I’m afraid it doesn’t have any code. It’s from a book called The Game Audio Tutorial by Richard Stevens and Dave Raybould.

LFE
They show a screenshot of AmbientSoundSimple with an Ambient Properties dropdown; after Attenuation there is a LowPassFilter with a tick box and radii min/max. One of their tricks in a demo map that comes with the book was to place the sound under the floor “so the player never actually experiences the sound at the Min distance”. (Page 50.)

Further along (pp 104-15) there’s a little more detail. On what I assume is the sound asset they have the Attenuation and Low Pass Filter tabs unfolded. In Attenuation, Attenuate is set True and the Distance Algorithm is set to ATTENUATION_Linear; Distance Type to SOUNDDISTANCE_Normal (min/max 400). LPF is True, min/max 3000/6000.

I’m assuming that you already know this though…

What specifically is it you’re trying to control with the LFE using script? What effect are you after?

Reverb
“Reverbs are applied in the [UDK] using a [ReverbVolume]” (pg 91). Seems there’s no way around this, I’m afraid. Reading between the lines, this might be because the UDK uses reverb presets, rather than allowing you to adjust individual parameters. There is a FadeTime parameter which should help with transitions between spaces.

Is it possible to apply a reverb to a sound class and then allocate the sounds you want specific reverb on to that class?

Again though, if you don’t mind me asking, what specifically is it you’re looking to do? Mostly, reverbs will be applied to a space rather than to individual sounds so I’m guessing you want a certain effect? If it’s just one or two sounds that you want this effect applied to it might be easier to make 2 WAVs, one with the reverb you want and one without, so you can use both. I believe (though not 100% sure) that you can exclude certain cues from reverbs (?) which would avoid you doubling up if there is already a reverb applied to a space.