SynthMaker

T-Ladder Filter conversion

Archive · 2008 31 old posts

From the original SynthMaker forum (2004–2014), with its members’ names and dates.

aliasant ·

Here is something I made that sounds interesting but could use some more work to be efficient enough.

Its a Ladder filter. The original is from Reaktor and it uses about 87cycles right now. It is hopped by 64. This cold be in green but I wanted it in stream and I think that when it is all asm'd and hopped it wont be that slow any way. Right now it is divided into several code blocks + some primitives.

Good luck with it. 🙂

infuzion ·

Neat, thank you!

BTW, it is best not to use any hops at all until the near the final version; you cannot find the difference between an original module and an faster version. I just wasted 20 minutes finding that out.

Also, you do not need to .RAR OSMs; SM automatically ZIPs them very well. cheers!

aliasant ·

infuzion wrote: Neat, thank you!

BTW, it is best not to use any hops at all until the near the final version; you cannot find the difference between an original module and an faster version. I just wasted 20 minutes finding that out.

Also, you do not need to .RAR OSMs; SM automatically ZIPs them very well. cheers!

oh. ok. Ill think about that in the future 😉

MichaelBenjamin ·

i must say as dr infuzion already mentioned you gain nothing by the (surely well-meant) packing to rar, since the osm is already compressed, and on the downside we must take the extra step of unpacking to the disk before opening, instead of instant opening. but this is only minor compared to your effort of putting this filter together, so thank you dr zoidberg:)

infuzion ·

MichaelBenjamin wrote: ...as dr infuzion already mentioned....but this is only minor compared to your effort of putting this filter together

Dr.? LOL Yes, thanks for putting it together. I'm only saving you time by suggesting no need for the RAR 😇

As you can see, there is 99.99% no difference in the Code merging I've done so far, the only blip is in the beginning from the hopped sqrps I forgot.

aliasant ·

MichaelBenjamin wrote: i must say as dr infuzion already mentioned you gain nothing by the (surely well-meant) packing to rar, since the osm is already compressed, and on the downside we must take the extra step of unpacking to the disk before opening, instead of instant opening. but this is only minor compared to your effort of putting this filter together, so thank you dr zoidberg:)

OK. I got to clearify this. I dont pack it with rar to save space. I pack it because rar uses error correction. zip files sometimes gets messed up but if the file is "rared" the error correction prevents this. Works well for me.

aliasant ·

infuzion wrote: MichaelBenjamin wrote: ...as dr infuzion already mentioned....but this is only minor compared to your effort of putting this filter together

Dr.? LOL Yes, thanks for putting it together. I'm only saving you time by suggesting no need for the RAR 😇

As you can see, there is 99.99% no difference in the Code merging I've done so far, the only blip is in the beginning from the hopped sqrps I forgot.

Well Dr. Infuzion 🙂

That was nice. When the TIRs are done the ladder part can be put together 🙂

Then those 2 parts can be put together and finally it all can be ASM'd =)

What do you guys think of the sound?

MichaelBenjamin ·

the sound very nice, similar to the reaktor lp2 - creamy but with a bit more juice than the lp2. i have a look later, no asm and code for me for some days.

infuzion ·

Here is what I have so far, but I need to move on to other projects, so I'll let you guys have an attempt to improve what I have so far. The "merging" version is 100% the same, but not "TIR Code Lower HF" nor "TIR Code Aliasing?". The "Lower HF" might be better, since the peaks near 16kHz are not as pronounced, though the original does seem to have a slightly steeper slope.

Also, the first 20% of the Freq knob is dead, so I think the Freq Algorithm 2 green maths need to be altered to use the full [0..1] modulation range IMHO.

Have fun!

aliasant ·

Ill have a look tomorrow.

I think the freq algo is a bit too exact in the lower end. Can easily be adjusted with the exponent.

Update: I set the Exponent in the Freq Algo to 3 and that feels better.

The "T-Ladder TIR Code Aliasing?" has a problem. Havnt found what yet but the freqs are wrong. If I want say 200Hz it actually gives me about 400Hz And if I set it at 400 it gives me about 800 so its doubled I guess. Wonder why? If you remember doing something that could have caused that let us know.

Update 2: haha. (feeling like a nutty professor) If you change the double Pi (6.2831898) to Pi in the green math the freq is back to normal with an interesting side effect The aliasing above nyquist ( I think) is gone and it looks more like a traditional filter. But.... It is not as accurate above 1kHz

Check the difference between the "T-Ladder TIR Code Lower HF" and the "T-Ladder TIR Code NOT Aliasing?"

infuzion ·

Thanks for the replies. I goofed with the Stream-primitives math conversion into Code with the TIR calculations. I think it should be: streamin TIRfeed;streamin w; float TIRa0; streamout TIRb1; streamout TIRc0; streamout TIRd1; float denorm=0.00000001; TIRa0 = TIRfeed+TIRb1; TIRb1 = (TIRa0+denorm)-denorm; TIRc0 = (w*TIRa0)+TIRd1; TIRd1 = (TIRc0+denorm)-denorm; I think I did not understand fully the "Delay by 1 sample". However, it is still the cause for the filter being off from the original. So, I'll still need help there, unless my Code version is more desirable.

Also, I think the Frequency Analysis Graph II.1 should switch off that Tick100 when no notes are being played. When ever I load that graph, my system CPU% on my laptop jumps up to 90%. Just think of all the electricity you'd save! cheers.

aliasant ·

Ok. I changed to the new code but the aliasing version still has double the freq. I dont understand why.

I did make a new analyzer. It has selectable update rate. from 1 / sec to 100/ sec Will use that from now. I dont have any problems like you mentioned and the latest beta6 feels much faster.

infuzion ·

infuzion wrote: ...the "Delay by 1 sample". However, it is still the cause for the filter being off from the original. So, I'll still need help there, unless my Code version is more desirable.

We still need help/advice here; anyone please?

aliasant ·

OK. I made some pictures from Reaktor that describes how the parts inside this thing works.

I made this into a 1 sample delay because that was what I thought would be correct at the time.

rl ·

right, z^-1 or 1/z is just another notation for a one sample delay (z-domain transfer function)

infuzion ·

rl wrote: right, z^-1 or 1/z is just another notation for a one sample delay (z-domain transfer function)

Then this should be the same thing, correct? TIRa0 = TIRfeed+TIRb1; TIRb1 = (TIRa0+denorm)-denorm;

aliasant ·

Well.

in reaktor it might no9t 1 sample but 1 control rate.

It seems to me to be something like the hop we have here in code.

You can set the control rate from the slowest 25Hz to the fastest 3200Hz. The faster the more cpu usage.

That "Zpower-1" thing responds to that control rate and not to the sample rate.

But it might still work as a one sample delay since most is driven by the control rate in Reaktor.

rl ·

depends: the 1/z only makes sense at sample rate - except in the case the control signal needs to be filtered, e.g. for a de-zipper.

@infuzion: I would leave out the denormal calculation. It's not needed in any one-sample delay - only once when the feedback path returns.

infuzion ·

rl wrote: @infuzion: I would leave out the denormal calculation. It's not needed in any one-sample delay - only once when the feedback path returns.

Thats for advice, but there is a feedback in that filter. Could you look into the file please? 🙂

Klentock1 ·

How would I modulate the cutoff with this kind of filter?

Klentock1 ·

Okay, i looked in the ADSR which was modulating the lfo and saw the stream multiplied by 1200.

I hooked up an LFO to the freq cutoff but when I try and modulate it with a saw waveform it smooths it out a lot and makes it appear to be modulating with a sine.

What would be causing this...?

aliasant ·

Klentock1 wrote: Okay, i looked in the ADSR which was modulating the lfo and saw the stream multiplied by 1200.

I hooked up an LFO to the freq cutoff but when I try and modulate it with a saw waveform it smooths it out a lot and makes it appear to be modulating with a sine.

What would be causing this...?

Please. For answers. Post a .osm with your thing so that others can test it. That is the quickest way to answers.

Klentock1 ·

Sorry, here's an OSM to demonstrate my point.

aliasant ·

Ok. Well. Its not a Saw anymore. You multiplied it with itself. If you look at the osm. I placed a Oscilloscope to show it.

Klentock1 ·

ah okay. when i remove that - the filter does some major clipping..how can i stop this?

aliasant ·

Klentock1 wrote: ah okay. when i remove that - the filter does some major clipping..how can i stop this?

Well. Now you have a waveform that is ranging from -1 to +1

If you multiply say 1 with the frequency 1200. you will get. yes. 1200. But when the wave is in its neg phase, say -1 you will get a negative freq and that will screw up the filter. It needs absolute values within its freq range.

One way is (ellaborate on this) Freq x Mod(lfo) + Freq There are several other ways.

Just make sure that that final frequency never goes under 0 ( make that 20 or so since you shouldnt need frequencys that low) or above the specific filters frequency max. For a synth Id say 12000 is high enough.

Klentock1 ·

Superb!

thanks for your reply!

I knew that becuase the signal was going into the negative that it was messing up the filter..i just didn't know how to get it out of the negative!

thanks for your simple solution - i feel like kicking myself know.

aliasant ·

Klentock1 wrote: Superb!

thanks for your reply!

I knew that becuase the signal was going into the negative that it was messing up the filter..i just didn't know how to get it out of the negative!

thanks for your simple solution - i feel like kicking myself know.

GOOD =). Dont kick your self. We all have those moments. Me more then most I think....

BertAnt ·

aliasant wrote: Well.

in reaktor it might no9t 1 sample but 1 control rate.

It seems to me to be something like the hop we have here in code.

You can set the control rate from the slowest 25Hz to the fastest 3200Hz. The faster the more cpu usage.

That "Zpower-1" thing responds to that control rate and not to the sample rate.

But it might still work as a one sample delay since most is driven by the control rate in Reaktor.

it has SR.C connected at the input, so it's not running at control rate, instead it runs on sample rate (it's inside the audio core cell, right ? ) so it is one sample delay 🙂

MegaHurtz ·

Yea, it`s basicly a comb filter, but you can alter the delay times..

MegaHurtz ·

but this is only What do you guys think of the sound?

I like it 😍

Wrote something here? To have a post removed or your name hidden, write to [email protected].

Before your first post

A few rules keep this a friendly place. You agree to them once.

Shown next to what you post, here and in the app. It doesn’t have to be your real name: 3–24 lower-case letters, digits or _ (capitals become lower case, spaces become _).

    Then your post goes up straight away.

    Delete this reply?

    Open it in SynthMaker?

    It goes on the track you’re editing there, in place of that track’s sound, and into My sounds. Your other tracks stay as they are.

    Want to keep that track’s sound? Start a new song in SynthMaker first (Song › New song), then open this.

    Report this reply?

    Only the developer reads reports. The person isn’t told who reported them.

    What’s wrong with it?

    Block this person?

    You won’t see their posts and replies here any more. They aren’t told, and you can unblock them at any time.

    People you’ve blocked

    Their posts and replies are hidden from you. Unblock someone to see them again.

    The community rules

    A few rules keep this a friendly place. Everyone agrees to them once, before their first post.