TheSlowGrowth contributions


#10

TSG/fx/tapedelay

A syncable stereo tape-style delay with all the bells and whistles. Need some antialiasing, though (turning the "time" knob creates artifacts)

parameters:

  • mix
  • tape age
  • low end
  • saturation
  • delay time
  • delay time symmetry (offsets the time on the left and right channel)
  • sync on/off
  • ping-pong amount
  • feedback

#11

9 posts were split to a new topic: Processing order issue?


#12

I worked around the execution order problems by shifting the objects around a bit. Now the reverb looks completely chaotic, but at least the bias towards the right channel is now gone (I don't hear it anymore, can someone confirm it?)


#13

I can confirm it's fixed here, I can also confirm awesomeness!
Really nice work you did here, thanks for making it :sunglasses:


#14

TSG/math/limit

limits an imcoming value to an upper/lower bound set by its attributes. As a companion to the /math/min and /math/max objects


#15

TSG/patch/modsource auto

A simple modsource that sends its value automatically, whenever it changes. Use this instead of the /logic/change and /patch/modsource combination.


#16

The tapedelay symmetry setting is now relative to the total delay time.
The reverbs now have parameter smoothing on their predelay and size parameters.


#18

Hey friend,we are sailing the same seas!
Check out rbrt/control/t2p and p2t....
I think I didn't document these yet...


#19

Hi @rbrt, thanks for pointing that out. I remember that I tried all different types of keywords to find this - I literally couldn't believe this wasn't available yet... I must have somehow missed your object.

Great, then I can remove mine!


#20

...nevermind,I believe there are a lot of functional duplicates...
and vice versa,probably also some objects with the same name but different functionality
I almost added a 'scale f' (which already exists but works quite differently)..
so it's 'scale' now..

you do max/msp as well ? because your object reminds me of some more I did that
pick up max's concept of 'bang'
interestingly,your object is using quite a different approach but also needs 8 CPU-cycles..


#21

Thanks @TheSlowGrowth, the allpass m and map objects are really great and useful :control_knobs:

By the way, did you tried to implement nested all pass filters. I used them in some of my JSFX plugins and they were quite efficient for "ensemble effects".


#22

Yes, nested all passes are on my to do list. The benefit would be that only one of the two delay lines really needs to be interpolated (that's the part that's most cpu intensive). The other can be a simple z^-x delay and it would (hopefully) still give enough blurring to be a good cpu light replacement for two series allpasses. That's my hope, anyway.


#23

It is possible to do it with the existing objects but in this case it is not easy to take care of the implicit 16 sample delay in the feedback loop...


#24

Hi, @TheSlowGrowth

Some time ago, i coded a small "helper" object that helps to make Schroeder feedback/feedforward noodles with limited headache. (i used it for "chorusing" delays)

It's in community/tiar/fx/APNoodle

It has two inlets and two outlets:

       inlets                        outlets
from delay (v) ------------- + ----> (y) output
                    |        ^
                    |        |
                   *+g      *-g
                    |        |
                    V        |
     input (x) ---- + -------------> (u) to delay

which can be seen as:

        /-----------< * g <----------\  Feedback
        |                            |
        V                            |
(x)---- + ----->(u)             (v)----- + -->(y)
            |                            ^
            |                            |
            \----------> * -g >----------/  Feedforward

u and v have to be connected to an external delay line:

        /--------------- *+g --------------\
        |                                  |
        V          implicit                |
(x)---- + --->(u) -> Z-16 -> delay -> (v)----- + -->(y)
           |         delay                     ^
           |                                   |
           \--------------- *-g ---------------/

In the editor it looks like:

Note that there is an implicit 16 sample delay in the feedback. That's mainly why i failed to implement proper all passes with objects.

Maybe you can use APNoodle to experiment with nested all passes before hardcoding and optimizing :smiley:

        /-------------------- *+g --------------------\
        |                                             |
        V          implicit           nested          |
(x)---- + --->(u) -> Z-16 -> delay -> allpass -> (v)----- + -->(y)
           |                                              ^
           |                                              |
           \--------------------- *-g --------------------/

#25

Ah great, I'll use that for my experiments! The implicit 16 sample delay won't hurt. At this point in the signal chain, there needs to be an additional delay anyway. And delay times in my reverb experiments were between 30ms and 180ms so +0,33ms doesn't change the picture much.


#26

Hi!
I really need a map with inlets to modify a and b from outside the object.
Is it posible to do?

Thanks!!!

Andrés


#27

TSG/patch/numVoices

A simple object that outputs nothing but the number of voices in the subpatch. I was surprised to find that this isn't there yet.

TSG/patch/polySpread

This object outputs a value between -64 and +64, depending on the voice number. The range is evenly spread across the voices.
For 3 voices the output would be:

Voice:   1     2    3   
Output:  -64   0    +64

For 5 voices it would be

Voice:   1     2    3    4    5
Output:  -64  -32   0   +32  +64

This is really useful to create a spread for stacking voices in unison or simply for creating some differences between voices in a polysynth. You can use the math/*c object to adjust the amount of spreading.
When the random distribution is selected, the possible values will distributed randomly across the voices when the patch loads. This helps a lot when you want to use spreading in different places around a patch (Without it, voice 1 will receive the lowest possible value everywhere, which is stupid).


#28

TSG/dist/diodeSat

A simple diode saturation circuit with a lot of gain. This circuit appears in many classic guitar overdrive boxes (e.g. MXR Distortion) and is also used to mimic the saturation characteristics of tape.
See here for details.

TSG/ctrl/potDemux 3

Can be used to control three parameters with a single potentiometer. It can easily be modified to have more outputs (layers), if required.
The object has some features that the other solutions don't have:

  1. Noise cancellation. Due to noise in the measurement, there can be value changes even if the potentiometer is not physically touched or turned. That's why I wrote the object so that after some time of inactivity, the pot has to be turned by a certain amount before new changes will be registered. This "deadband" is configurable. (This is a very common method used in many devices)
  2. You can load initial values (patch changes for example) with a trigger pulse
  3. The potentiometer response is configurable: After changing the layer, the corresponding output will be updated
    A) to the current poti value, immediately when the poti is touched (overwrite mode)
    B) to the current poti value, after the poti has passed the current value of the output (pickup mode)
    C) so that the remaining travel of the potentiometer spans all the remaining travel of the value (scale mode). Please note that scale mode assumes your input value will be between 0 and 64.

#29

I love this delay!
Thank you!


#30

Hey @SmashedTransistors

Is this for your parch only, the 16 samples delay or is this for all Axoloti patches?

Have been trying to mke a Karplus strong, but I am also hitting a limit when I try to make the delay time really short, it seems like it won't go all the way to 1 sample delay.

In Pure Data, you have to set a new block size for 1 sample, instead of the standard 64 samples to be abel to make 1 sample deay. kind of just figured it was about the same issue as in PD but never really got around to try to fix it.