Muckraker makes use of the same set of tools as Frobulator. Rather than rehearse all that here, you can find full details on that app’s tech page. Once again it’s a mix of C, Objective-C and Swift and relies heavily on Michael Tyson’s Amazing Audio Engine, the Audiobus SDK and Nic Grant’s MidiBus library. Extensive use is also made of Apple’s Accelerate framework, although this time there are no Fourier transforms involved.
Muckraker is very much not a “virtual analogue” effect. It is obstinately digital from top to bottom, and makes no attempt to model the components of an analogue amplifier or signal chain. While there are obvious correspondences between some aspects of the processing and things that occur in a real circuit — gain, clipping, filtering — some other transformations have no such counterpart and the end result is certainly not “realistic”.
The core of the app is a cascade of second-order IIR filters (via Accelerate’s vDSP_deq22), interleaved with two or three clipping elements (we might call them saturating nonlinearities if we wanted to sound fancy).
Three of the filters are very standard: a low pass, high pass and notch, with parameters calculated using recipes from Robert Bristow-Johnson's Audio EQ Cookbook. These appear at the end of the chain and basically serve to clean things up a bit and make relatively subtle tone adjustments.
The first two filters in the sequence are anything but subtle. One is a resonator that performs some initial — harsh — tone shaping, while the other is a borderline-unstable peak filter that acts as an amplifier. Both filters apply way more gain than is healthy (depending on the knob settings).
The clipping stages are implemented as lookup tables using the Accelerate function vDSP_tabi. Two of these — including the optional one enabled by choke — are (approximately) sigmoidal functions that compress the amplitude range. The other is more unconventional, a sinusoid whose frequency is modified by the wrack control. This function is still odd (so it preserves the sign of each sample), but it isn’t monotonic. Consequently, it doesn’t just scale and clip the sample stream, but can also change the ordering of sample magnitudes — i.e., whether one is bigger than the next. The audible effect of such transformation depends very much on the sound content.
The whole process depends on many more control parameters than there are knobs, so most of the knobs — all except level — have multiple effects, often in combination. There is also some parameter modulation by a pair of LFOs (the flux and ooze knobs, among other duties, set the LFO frequencies), though this is a lot less pronounced than in Frobulator.
Since there is generally residual state in the filters and also in the LFOs, the overall effect depends somewhat on the runtime history. This is unlikely to be obvious in most cases, but it is certainly possible to get audible differences between runs with identical settings.