Ambience is an early Airwindows plugin that uses the concept of Haas effect (or, precedence effect, or law of first wavefront) to fill in additional sonic information in a way that doesn’t mask the initial transient.

It does this in an interesting way: it’s calling on lots of individual delay taps from 811 to 7883 samples, but most heavily weighted at 883 samples (neatly within Haas effect at 44.1K). The method of doing this is a little unusual but worth documenting.

Ambience starts off by applying a whole bunch of delay taps to a temp value (back this early I was running delay buffers as 32 bit ints and converting them back to floating point for the output). Then it divides the whole thing by 4—and goes on adding a bunch more delay taps, less widely distributed. Then it divides that by 4—and so on. By the time it’s got to that final tap, the initial big burst of delay taps as late as 7883 samples have been divided by 4 many times. It uses this technique to scale back each delay tap without having to multiply or divide each time.

This was meant as an efficiency thing, but what it also does is make the most heavily processed parts of the sound, the quietest. The one tap that carries most of the load, is applied with virtually no processing. Turns out that has its advantages as well, in that the tone’s bigger when your math isn’t buried in endless calculations. Ambience actually applies this ‘ambient slapback’ sound like this:

*destP = *sourceP+((Float64)(temp/(8388352.0))*wet);

It’s pretty impossible to get the dry tone (sourceP) any more directly than that, though this is NOT the ultimate in high-resolution digital audio processing. That would be noise shaping the overflow from that calculation (as shown, the Ambience output ‘temp’ is given as a 64 bit number, but the buss is only 32 bit). However, this is still a very direct sort of ambience generator. Hope it’s useful!