Comb filter to simulate aircraft passing by effect

I’m using FMOD to create aircraft sound for X-Plane. Even if I have doppler enabled, one of the problems I have is the lack of a comb filter to be able to properly simulate the fly-by effect (see: https://www.youtube.com/watch?v=8ZXQOOAVk4E)

I had partial success using the Flanger filter, using a fixed rate and modulating the depth and mix according to distance; the problem is the rate is dynamic, so it’s always oscillating. And if I set rate to zero, the flanger doesn’t work at all (it seems it’s a sine wave starting at zero). So I set the rate to something like 0.02hz which sometimes gives me the effect I want and sometimes not (depending on where’s the oscillator at that moment).

Another alternative I tried is to simulate a comb filter using a set of parametric EQ’s with a very narrow bandwidth and modulating the frequency as a function of distance; but the amount of bands I can program this way is low, it’s very cumbersome to do and it doesn’t work that great.

So, is there ANY way to simulate or add a comb filter?

I’m using 1.08.18, as the simulator itself is stuck at that API version too, so I can’t use anything more modern.

Thanks a lot.

Have you tried experimenting with the delay effect? Automating (with seek speed) the delay length based on distance may give you the effect you are looking for. Be aware though our Delay effect currently cross-fades the output of the two tap points rather than incrementally adjusting the the tap point from one to the other so it may not be ideal. We are looking to add an option to the Delay effect for the transition method in a future release, however that doesn’t help if you’re stuck on 1.08.

Hi @mathew, thanks for your reply. I indeed tried Delay, but the minimum time is 10ms, which is not enough to trigger the effect I’m looking for (I think it would need around 3ms). I also tried Chorus and Reverb, but I haven’t been able to adapt (abuse?) them into my use case.

Is there any way to extend (both studio and the X-Plane side library) to add the effect? I mean by programming a plugin for example.

Understood, we reduced the minimum down to 1ms, but that was in 2.01.00 so beyond your reach in 1.08.

It’s possible to extend both the FMOD engine and Studio tool via custom DSP plugins however I am unaware of the level of access you have in X-Plane for doing this.

Hi to all, hi @danitabaires,

Does the comp filter’s notches need to be moving in time? If not, then you could just make your own impulse response and use the convolution to create exactly the delays you like.

I did a quick experiment and I was able to produce a similar result, by generating a single impulse response file with a peak on the first 3 samples and another 3 samples peak after 3ms, then I played back simple white noise through a convolution effect and varied the wet/dry mix. The sound was very similar.

Here’s the impulse waveform screenshot:

And the screenshot from the proof of concept experiment:

You can also get the file if you like, I created a share form my Dropbox, get it here. (Tip: Dropbox will output an error as this file is too short, if you download it you can use it with convolution processors).

By the way, I generated the impulse file at 44100 Hz and 16-bit depth monophonic, but if you go for a game, you can use far less sampling resolution for that specific use scenario. For example you could generate a new impulse with a 6000 Hz file and give a 24-bit depth to preserve low noise floor. Also you can experiment with various stereo differences, or even create 2 different stereo impulse response files, with differences between them, and use 2 convolution processors which you will mix according to the angle of the listener’s object, to create subtle variations when the player turns the head of the character.

Cheers!

@mathew I don’t have that level of access to the code, but others in the team do. I’ll investigate that route. Thanks! Is that documentation valid for 1.08?

@Panagiotis_Kouvelis thank you for the idea and the thorough proof of concept! <3 I’m going to try it! But yes I need the comb notches to displace according to listener-object distance.

1 Like

The DSP API has remained fairly stable over the versions so the linked documentation is largely accurate. If you are worried you can download the API installer from fmod.com/download and in it will be the exact documentation for your desired version.

1 Like

Thanks @mathew! I’ll ask the team what they think.
@Panagiotis_Kouvelis I’ve tried it and it sounds fantastic, but sadly I can’t make it go up/down with distance because that would need varying that 3ms delay. Thanks anyway for the clever idea!

1 Like

Hi @danitabaires, glad to help.

If you cannot find any other solution, then go with the closest thing, link the distance with the convolution wet/dry mix.

From our discussion I also thought of another nice sound design feature, @mathew have you thought of a time-stretch parameter for the impulse sample of the convolution processor? Applied psychoacoustics for media is one of my fields, and this functionality could be used in this case and many others that have to do with subtle delays and sound copies, that can be easily be made with convolution. For example, variations of sound clones within the Haas window to vary precedence when moving form one ambience to another, etc.

Time-stretch for impulses probably isn’t something we’d pursue but we’re hoping some of the improvements to the delay effect will help others in a similar situation.

1 Like

I was just throwing out ideas, triggered by the discussion. Having a cloned delayed buffer capable of very small time values can be used in many scenarios, improvements towards this end for the delay processor are going to be great. Cheers!

At Avalanche Studios, we developed a custom DSP to produce a variable length comb filter to simulate cancellation in passing by aircraft (“flange by distance” in practice, while in reality it’s “flange by angle between direct sound, and sound reflected from the ground” but gee that’s too complicated). The plugin was developed due to that same reason: The FMOD native flanger almost does the job, but doesn’t allow the kind of automation you need for jet pass-bys.

However… later I figured out that if the sound is mostly just noise (a jet engine, rocket hiss), you can bake a static flange into the sample loop itself, and then automate the pitch of that loop by distance. This sounds very similar to a modulated flange with low CPU cost. But it only works with sounds that are constant, and mostly spectrally flat (white, pink) noise, like a fuse hiss, rocket hiss or a jet engine roar. This is because noise sounds mostly the same when pitched up and down, so when the pitch changes, you only hear the baked flange shift up and down. If the sound is tonal, like a propeller airplane, this baked flange is not going to work because you’ll hear the pitch difference.

@Skaven252 thanks for the tip! I actually had tried that route on a previous project but I wasn’t satisfied with the results, because it was a prop airplane and it was noticeable the effect was “added”. But now that I had to model a jet engine, I tried again and it worked great! It’s a good workaround until I can get somebody on the team to program a custom DSP for me. Thanks! :slight_smile:

1 Like