Building a crossover

I’m a complete newbie to Audulus. I got it (iPad version) yesterday, watch a couple of videos and read some of the docs. This is my first attempt at building something.

My aim is to build a two- or three-way audio crossover module. For the time being, I’m trying to get something sensible done with LowPass and HighPass. Both of these nodes have an alpha input, unfortunately, I don’t know how to convert that to a cutoff frequency (Hz).

I’ve wired up a sawtooth Osc to a LowPass and a HighPass. The filters’ alpha are connected to a knob, (0…1) and (0…1) (1-x) . The Osc and filter outputs are connected to individual Waveform nodes.

I was hoping the Waveform node would show, well, the waveform. What I do get is a slowly moving display of the signal level. I.e., the timebase/triggering doesn’t seem to be suitable.

It’s very likely that I’m doing something wrong, but I don’t see what it might be.

Crossover.audulus (2.9 KB)

1 Like

Here are some modules with the alpha formula inside
First Order Filters.audulus (3.6 KB)
These are 6dB per octave filters so they’re not very steep.
These biquadratic based units are 12dB per octave.
Biquad filters.audulus (102.9 KB)
The waveform node only really works at LFO frequencies (approx 1-2 Hz)

1 Like


1 Like

Are you good with this? From what I understand a good crossover has a steep drop off to minimize the trough between the high and lowpass hat are basically canceled frequencies.

The other issue is that filters cause phase shifting in the audio passing through them that can make your source material sound off when it’s split between tweeter and woofer and then recombined in the air.

1 Like

The phase shifting will definitely be a problem. Both the 1st order nodes and the 2nd order biquads exhibit frequency dependent phase shifts. Unfortunately from what I read when I was building a multi-band equalizer, building a 2nd order constant phase digital filter requires a z-2 node.

1 Like

Ooh can you link me to some research on this? Might be good fodder for an Audulus node?

I asked Taylor and he confirmed that stacking z-1’s doesn’t introduce more samples of delay.

However, the delay node does seem to be able to process almost down to single sample delays, so maybe a delay with 1 sample’s worth of seconds as its time parameter can be stacked with the z-1 node to create a z-2.

1 Like

@biminiroad I’ve been trying to find the reference I referred to, but haven’t had any luck so far. I find however that a zero-phase (that is a filter with no phase shifts) cannot be causal. (that is all zero phase shift filters require future samples as well as past samples) This of course is not a problem if you are filtering an already captured sample, but doesn’t do us any good if we are trying to filter in real time. It would seem that the best we can do is a linear phase shift. I’m still doing some research, but the math is a bit challenging. I let you know if Ifind the reference I mentioned.

In my attempts so far, I haven’t tried any realistic sounds, I just attached an Osc node to the input.

For more realistic input, I’ll have to figure out how to provide that. There doesn’t seem to be a file player node in Audulus, so I’ll probably use AUM for that.

The crossover is only a building block. My overall goal is a multiband overdrive.

A year ago, I started to learn cello, on an electric instrument, and I’d like to make some nicely noisy sounds. In the meantime, I’ve tried quite a few overdrive and distortion pedals for guitar and bass, but none of them gives me the sound I’m dreaming of.

I was interested in Audulus before this, however, the prospect of using it to build my own overdrive is what got me started.

Somewhere along the line, I think I’d like to introduce some modulation with a subharmonic of the lowest note. The general idea is to have an LFO that is not free-running, but in some way related to the played notes.

f_lfo = f_lowest / 2^n
for a suitable n, so that 0.5 <= f_lfo <= 2

Any suggestion how I might derive such a frequency?

1 Like

You could use a lowpass filter to try and isolate the fundamental, then use a zero-crossing node to derive the approximate frequency. Alternatively, Audulus has a pretty good frequency shift node you could use to shift the input down a couple of octaves, Filter the result to eliminate most off the upper harmonics and you should have something close.

Yeah that’s an Audulus 4 feature - you’ll have to route audio in like you mention.

This is a multiband overdrive that someone made on the old forum you might want to check out.

Afterburn.audulus (159.4 KB)

For the LFO, you can use an octave signal. I’ve been meaning to put some octave-based LFOs in the library, but basically what you can do for now is create a Basic VCO, send its output through a Audio -> Modulation translator, then subtract however many octaves you want the LFO to go down from your original note.

Does that make sense?

Not quite yet, but I’ll look into it when the time comes.

Thanks for these suggestions.

1 Like

This should clear it up a little. That’s a modified Sine LFO module where I replaced the frequency knob with an octave signal input.

Octave Synced LFO example.audulus (102.6 KB)

I had assumed @murmichel was talking about an external audio input to Audulus, but on re-reading his post, it’s not clear whether the original signal is a played note within Audulus or one played on an external instrument.

1 Like

Yes, that’s what I meant. Sorry, if that wasn’t clear.

@biminiroad’s comments still apply if you use the zero-crossing node to calculate a frequency. If you use the frequency shifter approach you wouldn’t need an LFO since the filtered, shifted frequency would be your low frequency modulator.

1 Like

Here’s the equalizer model I built. It’s 16 half octave frequency bands. The lowest and highest bands are shelving filters and the rest are peaking bandpass units. They are all 12 dB per octave biquads. For this application they are chained together serially, but you could easily feed the source to each module and take each band output separately.

equalizer V1.audulus (205.2 KB)

1 Like

This is so boss! Thanks for sharing!!! :slight_smile:

It’s hard to know what is worth re-posting and what’s not. I guess I should put this in the modules collection. I’m hoping that we can keep the user library a bit more organized this time, so you can actually find stuff :cowboy_hat_face: