Keeley Halo Take 2

AlbertA

Fractal Fanatic
I got my Keeley Halo Pedal yesterday - I made some measurements as I was curious about the settings the default preset (1A) uses for the Halo sound.

Thanks to the block diagram posted by @Robert Keeley himself here: https://forum.fractalaudio.com/threads/keeley-halo.185333/page-4#post-2288551, we know the pedal uses 4 delay lines, Del1L, Del1R, Del2L, Del2R.
Del1L feeds into Del2L and Del1R feeds into Del2R.

Measurements

Here's what I measured for the default preset (The Halo sound), with the pedal in wet only mode and hooked into In3/Out3 of the Axe-Fx III set to unity gain:
  • The modulation rate is set to around 0.252Hz
  • The modulation depth is set to around 46%.
  • There's two LFOs, which I'll call LFO1A = sin, LFO1B = cos, both in sync with each other and 90 degrees apart (naturally).
  • Del1L is modulated with LFO1B.
  • Del1R is modulated with LFO1A.
  • Del2L is modulated with LFO1B.
  • Del2R is modulated with a mix of 0.5*LFO1B + 0.1*LFO1A which results in a LFO output that's about half the depth of Del2L LFO and about a 11.25 degree shift.
  • The output of Del1 into Del2 is lowered by -6dB (50%).
  • Del1 time is set to around 362ms
  • Del2 time is set to around 480ms.
  • The wet level is set to around -11dBFS
  • Feedback for Del1 and Del2 is around 43%

  • With the depth knob at max - I measured around 10ms variation in Del1 L/R and around 15ms for Del2L and around 7ms for Del2R.

To emulate this on the Axe-Fx III, we can use two delay blocks set to Dual Delay Type
  • Del1L = Delay Block 1 L
  • Del2L = Delay Block 1 R
  • Del1R = Delay Block 2 L
  • Del2R = Delay Block 2 R
  • Delay Block 1 Pan L and Pan R can be set to -100 as they are emulating the delay lines for the left channel
  • Delay Block 2 Pan L and Pan R can be set to to 100 as they are emulating the delay lines for the right channel

Feedback

Following the block diagram, we can see that the feed from Del1 to Del2 is phase inverted, so we can use the negative feedback feature of the delay block to invert the phase - since I measured 50% reduction, we can set it to -50%
  • On Both delay blocks, set Feedback L>R to -50%
  • Set Feedback R>L to 0% as Del2 does not feed into Del1.
  • Set Feedback L>L and Feedback R>R on both delay blocks to 43% to match the measured value.

Time and Modulation

  • We can use LFO 1 in the controllers section, mainly because we can map which side A or B we can use and can control the depth more accurately (unsure how the depth scaling works for the built-in delay block LFOs).
    • Output B Phase is set to 90 degrees
  • Delay 1 Time L (Del1L) is mapped to LFO1B, with a parameter range of 357-367ms (approximates the setting of 362ms, with +-5ms)
  • Delay 1 Time R (Del2L) is mapped to LFO1B, since I measured that Del1L and Del2L LFOs are in sync, with a parameter range of 473ms to 488ms, approximating the 15ms depth around 480ms.
  • Delay 2 Time L (Del1R) is mapped to LFO1A, since Del1L and Del1R LFOs are 90 degrees apart, with the same parameter range map as Delay 1 Time L.
  • Delay 2 Time R (Del2R) is mapped to use both LFO1B and LFO1A, with a 50% and 10% mix respectively
    • The tricky part here is that the LFO1A/B outputs go from 0 to 1 - for periodic signals like the sin type, this means the mean is 0.5. When scaling however, the mean is impacted, for example for Scale 1 set to 50% the mean becomes 0.25.
    • So we need to compensate with Offset to keep the same mean.
    • The measurements show the mean for Del2R LFO matches the mean for Del2L LFO.
  • We use the Scale parameter in the mapping section of the modifiers to simulate the measured depth of 46% for all (Delay 1 Time L/R, Delay 2 Time L/R)

Filtering
Saturation

Attached is a patch with all these parameters set.
Edit: Attached preset v3 which attempts to match saturation and filtering.

Here's a comparison between the Halo pedal and the Axe-Fx III - first is the Axe-Fx III, then the Halo pedal.



Edit: After matching filtering and saturation:
 

Attachments

  • Timmy Andons v2.syx
    48.2 KB · Views: 256
  • Timmy Andons v3.syx
    48.2 KB · Views: 370
Last edited:
You managed something I never did: That the second repeat in each group of them, is slightly louder than the rest of them (must be the negative feedback). Brilliant! How did you figure that out?

Regarding the theoretical cut off of the LPF, that was for the LPF inside the feedback loop. I could never get it to sound right with them that low though. I found that doing what you also did (higher LPF for the feedback ones, and lower LPF at the input) sounded closer to the pedal. Less high end degradation in the tail, and less swooshing in the high mids/high end.

FWIW, I recalculated the feedback LPF to be either 2925 kHz or 6425 kHz, depending on log or lin taper on the tone knob.

Interesting that you didn't use a drive block for the saturation. How come? Personally, I suspect a lot of the character comes from the saturation control on the pedal. I think that's where the bass boost comes from, and probably has some high end impact of itself even without all the LPF in the chain.
 
Last edited:
You managed something I never did: That the second repeat in each group of them, is slightly louder than the rest of them (must be the negative feedback). Brilliant! How did you figure that out?
I'm not hearing or seeing any sign of that, but it wouldn't be related to feedback settings since it's just the first "right" delay line repeat. The Level L and Level R parameters would be the only thing that affects the relative levels of the first and second repeat. In this preset they're both at 100%.
 
I'm not hearing or seeing any sign of that, but it wouldn't be related to feedback settings since it's just the first "right" delay line repeat. The Level L and Level R parameters would be the only thing that affects the relative levels of the first and second repeat. In this preset they're both at 100%.
It's clearly visible when looking at the waveform. Just messing with the levels will affect other stuff as well, so that's not it. There was always something "off" with the levels of the individual repeats with my attempts, which was done with normal feedback only. I think AlbertA cracked it. Note that I fiddled a bit with his preset for the picture below (mix, filters, drive), but not with the feedback structure.

Namnlös.png
 
Last edited:
You managed something I never did: That the second repeat in each group of them, is slightly louder than the rest of them (must be the negative feedback). Brilliant! How did you figure that out?
The second repeat, you mean the one at 480ms?


Regarding the theoretical cut off of the LPF, that was for the LPF inside the feedback loop. I could never get it to sound right with them that low though. I found that doing what you also did (higher LPF for the feedback ones, and lower LPF at the input) sounded closer to the pedal. Less high end degradation in the tail, and less swooshing in the high mids/high end.

FWIW, I recalculated the feedback LPF to be either 2925 kHz or 6425 kHz, depending on log or lin taper on the tone knob.
Yeah I spent most of the time yesterday just measuring the LFOs depth and phase - I'll see if I can test the cutoff of both filters and confirm the cutoff. I think I'll set tone all the way up, measure the low pass filter cutoff that's in front of the delay lines - then set saturation all the way down and measure the low pass filter in the feedback loop.

Interesting that you didn't use a drive block for the saturation. How come? Personally, I suspect a lot of the character comes from the saturation control on the pedal. I think that's where the bass boost comes from, and probably has some high end impact of itself even without all the LPF in the chain.
I just haven't measured how much saturation is happening - so for the moment I left it off - it seems like it's fairly subtle. Once I have a better idea of what the pedal is doing, I'll have to measure the Axe-Fx drive block with tape saturation and see if it can be matched a bit.
 
One really interesting thing to me is that listening to those initial percussive hits and their echoes, if I was looking for a halo-cloud sort of effect, I would think the discrete rhythmic repeats in both these samples would be too distracting. But actually, in the arpeggiated sections you don't hear those repeats really at all, just that "halo" of ambience. Very interesting, and very nice.
 
It's clearly visible when looking at the waveform. Just messing with the levels will affect other stuff as well, so that's not it. There was always something "off" when on the levels of the individual repeats with my attempts, which was done with normal feedback only. I think AlbertA cracked it. Note that I fiddled a bitt with his preset for the picture below (mix, filters, drive), but not with the feedback structure.

View attachment 105383

Oh that one....

So each loop, has 3 repeats, the one at 360ms(Del1), the one at 480ms (Del2), and the one at 840ms (Del1 ->Del2).

From there it's just the feedback for Del1/Del2, so next set would be at 720 ms, 960ms and 1680ms and so on.

So the level of the repeat highlighted above, is controlled by the path for Del1 feeding into Del2, which I measured at 50%. I measured Del1/Del2 feedback at 43%, so that's why the highlighted one is slightly louder.
 
Oh that one....

So each loop, has 3 repeats, the one at 360ms(Del1), the one at 480ms (Del2), and the one at 840ms (Del1 ->Del2).

From there it's just the feedback for Del1/Del2, so next set would be at 720 ms, 960ms and 1680ms.

So the level of the repeat highlighted above, is controlled by the path for Del1 feeding into Del1, which I measured at 50%.
The funny thing is, if you look at the repeat after the highlighted one, you can see that it's actually a bit loud on my version. Increasing the feedback feedback of 480 ms would increase that particular repeat as well. So you did something right, because yours look so close to the original! And the only thing I can see as the reason, is the negative feedback.
 
The funny thing is, if you look at the repeat after the highlighted one, you can see that it's actually a bit loud on my version. Increasing the feedback feedback of 480 ms would increase that particular repeat as well. So you did something right, because yours look so close to the original! And the only thing I can see as the reason, is the negative feedback.
Well it's due to the cross feedback of the output of Del 1 going into Del2 (in the preset it's Feedback L>R).

So without modulation, you get the following:

360ms (Del1) at 100%, 480ms (Del2) at 100%, 840ms (Del1->Del2) at 50% (Feedback L>R),
720ms (Del1) at 43%(L>L feedback), 480ms (Del2) at 43% (Feedback R>R), 840ms (Del1->Del2) at 21.5% (50% of 43%, L>R feedback) <---These set of repeats is due to Del1 and Del2 feedback
...and so on...

The way I measured that is, I set the feedback to 0 in the pedal, and fed a single click, which gives you the three repeats I mentioned above. Then compared the relative levels of the third repeat (which is Del1 going into Del2) to the first (Del1) and second(Del2) and measured -6dB, which is 50% - which was not specified in the block diagram.

To achieve the same thing in your preset, the output of Delay Block 1, would have to be split, the path feeding Delay Block 2 would have to be reduced 50%, compared to the path feeding into the output with the dry, so you would need some intermediate block (mixer, null filter) to reduce the level between Delay 1 and Delay 2 blocks.
 
Last edited:
It's not due to the value being negative, it's that the L>R feedback setting is a higher absolute value (50) than the others (43). The levels of the 3rd, 4th and 5th repeats are determined by L>L, L>R and R>R feedback values.

Well it's due to the cross feedback of the output of Del 1 going into Del2 (in the preset it's Feedback L>R).

So without modulation, you get the following:

360ms (Del1) at 100%, 480ms (Del2) at 100%, 840ms (Del1->Del2) at 50% (Feedback L>R),
720ms (Del1) at 43%(L>L feedback), 480ms (Del2) at 43% (Feedback R>R), 840ms (Del1->Del2) at 21.5% (50% of 43%, L>R feedback) <---These set of repeats is due to Del1 and Del2 feedback
...and so on...

The way I measured that is, I set the feedback to 0 in the pedal, and fed a single click, which gives you the three repeats I mentioned above. Then compared the relative levels of the third repeat (which is Del1 going into Del2) to the first (Del1) and second(Del2) and measured -6dB, which is 50% - which was not specified in the block diagram.

To achieve the same thing in your preset, the output of Delay Block 1, would have to be split, the path feeding Delay Block 2 would have to be reduced 50%, compared to the path feeding into the output with the dry, so you would need some intermediate block (mixer, null filter) to reduce the level between Delay 1 and Delay 2 blocks.
Thanks guys, now I think I'm grasping the concept of different feedbacks internally and to the other block/delay. Fascinating stuff!
 
I spent some time applying some log sweeps to the pedal to understand its frequency response.

I took a measurement of the pedal at the default preset, but Rhythm set to 1/4 note, saturation all the way down, feedback to 0 and depth to 0, so that I could measure the high pass and low pass filters in the delay loop at the values set for the default pedal preset.

The high-pass seem to have a cutoff at around 40Hz. The low-pass had around a 12dB/Oct slope at around 4.3Khz cutoff with a bit of lower Q, than the default set in the Axe-Fx III Delay blocks.
I found there is also a little bit of a tilt EQ in addition to the high-pass and low-pass filters.
I ended up configuring the Tilt EQ in the filter block to around 670Hz frequency and -2dB gain, that seem to match the response of the pedal.

I then reset the pedal back to defaults, set depth to 0 and feedback to 0. The low-pass filter after the non-linearity (as seen in the halo diagram) seems to be a first-order filter - so I used the high cut control of the filter block to emulate this - A cutoff of around 3.5Khz seem to match the response of the pedal.

I then used a 1KHz tone at a few different levels to try to match the non-linearity with the Axe-Fx III Drive block set to tape saturation. Setting the drive to 7 seems to approximate the amount of distortion from the pedal.

I then remeasured the frequency response of the setup in the Axe-Fx III and compared it to the pedal again - the highs where out of balance after introducing the drive block, so I balanced it out by using the High cut control in the drive block - setting that to around 4.5KHz did the trick.

Here's how it sounds with the updates - First Axe-Fx III then the Keeley Halo:


Attached is the preset with all the updated settings.
 

Attachments

  • Timmy Andons v3.syx
    48.2 KB · Views: 242
Back
Top Bottom