First time here? Check out the FAQ!

What are the different ways to upsample control-rate to audio-rate? I've got a bad case of VCS-fader Zipper dysfunction.

+1 vote


"how the hell do I eliminate the zipper sound when tweaking parameters in the VCS?!"

I've got a Saturator, and I want to adjust the curve in real-time while recording the audio output in my DAW. For this example audio is running out of my DAW, into Kyma to be processed by my patch, and back into my DAW. one audio input, one saturator and thats it. A quick in-and-out. 

I know about smooth: and smoothed, but neither will completely eliminate zipping when used in the Curve parameter field of a Saturator—unless a high value like !Curve smooth: 500 ms is used, but 500 ms is not the kind of long, slow interpolation i'm looking for. I understand that some parameter fields, like the Envelope of an Oscillator, accept full audio-rate signals. I understand how to upsample CapyTalk to audio-rate with a CapytalkToSound object—but if i do that, and run my new CapytalkToSound object into the Curve parameter field, It's got an L behind it, and i obviously can't just delete the L and have it run at audio rate, if the Curve parameter won't accept audio rate signals.

So what should I look into in order to solve zipper issues? I'd love it if people could just chime in with their own tips n tricks on successfully translating control-rate to audio-rate to eliminate the dreaded zipper.... Things I know work sometimes: smoothed/smooth:, CapytalkToSound, typing a capytalk expression into the Left and Right channels of a Level object with a constant (value: 1) in the input field.. what else? 

I'm looking for either an extensive list of different ways to solve this, or at least a good set of generalized rules for interpolating control-rate signals to audio-rate. Specifically when tweaking VCS controls assigned to a sound parameter when the parameter field doesn't allow audio-rate signals? What are the limitations? am i just gonna have to deal with zipper sounds or am I doing it wrong on a fundamental level and making this all too complicated? sweet hey-zeus, help!

asked Sep 29, 2017 in Using Kyma by aaron-zimmermann (Practitioner) (940 points)
"typing a capytalk expression into the Left and Right channels of a Level object with a constant (value: 1) in the input field"

That's cool! Thank you for starting the list!

1 Answer

0 votes
Have you tried putting a Gain prior to the Saturator in the signal flow and changing that Gain instead of the Curve parameter in the Saturator (which you could fix at 4))?
answered Sep 30, 2017 by ssc (Savant) (119,300 points)
That *does* seem like a workaround, but was I naive to assume that I could assign the Curve parameter to a VCS fader in some way and not hear a zipper sound?

I don't know a lot about DSP—is assigning a fader to the Curve parameter in a saturator the kind of thing that a programmer "just wouldn't do"? My first reaction when I get a zipper sound like this is to try pasting an audio-rate sound into the parameter field, and deleting the "L" just to see what would happen—and I get an error. That obviously doesn't work though.

I'm trying to understand why I keep doing things in kyma that result in VCS faders making zipper sounds. It's not every time or anything that seems broken, but more about some situation where I feel like i'm doing something wrong. Is there a DSP book you could point me towards, or something that would help me understand some fundamental audio concept better—or is something like this more a limitation of the system? Is it a limitation of DSP in general, or does it have something to do with adjusting amplitude on the fly?

I guess I just feel like i keep running into these individual little quirks, yet I don't always see a connection between these quirks and it leaves me feeling like i'm missing something blatant.

It's not enough for me to just change the way I patch together objects, or make capytalk expressions—I need to know *why* it's happening.

sorry if I come across as frustrated— I love kyma, and sometimes when I think i've figured something new and complicated out (to me), it drives me crazy to bump my head up against a problem that I thought I understood enough to avoid, in an entirely new context.
It sounds like you are doing all the right things: you have an arsenal of patterns you already use (smoothed/smooth:, CapytalkToSound, typing a CapyTalk expression into the Left and Right channels of a Level object with a constant (value: 1) in the input field) and when you ran into a wall, you asked the community for ideas or suggestions. Another pattern we could add to the list is that sometimes using the Product to multiply one Sound by another is the best way to compute amplitudes at the full sample rate.

DSP programming, like all programming, is partly an art. We try to systematize as much of it as we can, but there are still elements that one picks up through experience and patterns that one starts to notice and internalize (and usually forget that there was ever a time when you didn't know it) until it starts to become intuitive.

But we're all learning and discovering new tricks all the time. It seems like you have learned a tremendous amount in a short time and are doing just the right thing by asking the community for input when you hit a wall. I'd like to second Alan in thanking you for starting this list of amplitude patterns that are helpful for everyone to know.
So that I don't misunderstand this, what would be advisable in this case to place Gain to the left or right of the saturator?
Gain on the left side of the saturator does something like a drive knob and on the right would be the normal output knob.