Help me see the light....(IOW, I think this plugin stinks, change my mind)

VST, AU, AAX, CLAP, etc. Plugin Virtual Instruments Discussion
RELATED
PRODUCTS

Post

let's do this again, for the clowns

this is cruddy dsp, but it's dsp that works.

this is the *entire* dsp barrel of fauna.


OMG division!!!! :scared:


if (*in3 != lb) {
l = *in3 * samplerate; // volts in to segment length in cm
if (l < 1.f) l = 1.f;
else if (l > 4094.f) l = 4094.f;
li = l;
d = l - li;
lb = *in3;
}

// interpolate buffer positions
r = p - li;
q = r - 1;
if (q < 0) q += 4096;
if (r < 0) r += 4096;

o0 = b0[r] + (b0[q] - b0[r]) * d;
o1 = b1[r] + (b1[q] - b1[r]) * d;
o2 = b2[r] + (b2[q] - b2[r]) * d;
o3 = b3[r] + (b3[q] - b3[r]) * d;
o4 = b4[r] + (b4[q] - b4[r]) * d;
o5 = b5[r] + (b5[q] - b5[r]) * d;
o6 = b6[r] + (b6[q] - b6[r]) * d;
o7 = b7[r] + (b7[q] - b7[r]) * d;
o8 = b8[r] + (b8[q] - b8[r]) * d;
o9 = b9[r] + (b9[q] - b9[r]) * d;

o4 *= *in4;
o4 -= *in10 * (o4 - fb);
o5 -= *in10 * (o5 - fc);

fb = o4;
fc = o5;


// soft limiting at +-1 never passes +-2
if (o1 > 1.f) o1 = 1.f - ((1.f / o1) - 1.f);
else if (o1 < -1.f) o1 = -1.f - ((1.f / o1) + 1.f);

if (o3 > 1.f) o3 = 1.f - ((1.f / o3) - 1.f);
else if (o3 < -1.f) o3 = -1.f - ((1.f / o3) + 1.f);

if (o5 > 1.f) o5 = 1.f - ((1.f / o5) - 1.f);
else if (o5 < -1.f) o5 = -1.f - ((1.f / o5) + 1.f);

if (o7 > 1.f) o7 = 1.f - ((1.f / o7) - 1.f);
else if (o7 < -1.f) o7 = -1.f - ((1.f / o7) + 1.f);

if (o9 > 1.f) o9 = 1.f - ((1.f / o9) - 1.f);
else if (o9 < -1.f) o9 = -1.f - ((1.f / o9) + 1.f);


if (*in5 + *in6) r2 = (*in6 - *in5) / (*in6 + *in5);
if (*in6 + *in7) r3 = (*in7 - *in6) / (*in7 + *in6);
if (*in7 + *in8) r4 = (*in8 - *in7) / (*in8 + *in7);
if (*in8 + *in9) r5 = (*in9 - *in8) / (*in9 + *in8);

t2 = (o0 - o6) * r2;
t3 = (o1 - o7) * r3;
t4 = (o2 - o8) * r4;
t5 = (o3 - o9) * r5;


sd1 = *in1 - o5;
sp1 += sd1 * rate;
sp1 -= *in2 * (sp1 - sb1) * rate;

if (sp1 > 1.f) sp1 = 1.f - ((1.f / sp1) - 1.f);
else if (sp1 < -1.f) sp1 = -1.f - ((1.f / sp1) + 1.f);

sc1 = .5f + (sp1 * .25f);
sc2 = 1.f - sc1;
sc1 *= sc1 * 2.f;
sc2 *= sc2 * 2.f;

b0[p] = (*in1 * sc1) - (o5 * sc2);
sb1 = sp1;

b1[p] = o0 + t2;
b2[p] = o1 + t3;
b3[p] = o2 + t4;
b4[p] = o3 + t5;
b5[p] = o6 + t2;
b6[p] = o7 + t3;
b7[p] = o8 + t4;
b8[p] = o9 + t5;
b9[p] = o4;



*out1 = o4;
*out2 = o5;

p++;
p %= 4096;



you can stick your sorries in a sack mister
you come and go, you come and go. amitabha neither a follower nor a leader be tagore "where roads are made i lose my way" where there is certainty, consideration is absent.

Post

xoxos wrote:let's do this again, for the clowns

this is cruddy dsp, but it's dsp that works.

this is the *entire* dsp barrel of fauna.


OMG division!!!! :scared:


if (*in3 != lb) {
l = *in3 * samplerate; // volts in to segment length in cm
if (l < 1.f) l = 1.f;
else if (l > 4094.f) l = 4094.f;
li = l;
d = l - li;
lb = *in3;
}

// interpolate buffer positions
r = p - li;
q = r - 1;
if (q < 0) q += 4096;
if (r < 0) r += 4096;

o0 = b0[r] + (b0[q] - b0[r]) * d;
o1 = b1[r] + (b1[q] - b1[r]) * d;
o2 = b2[r] + (b2[q] - b2[r]) * d;
o3 = b3[r] + (b3[q] - b3[r]) * d;
o4 = b4[r] + (b4[q] - b4[r]) * d;
o5 = b5[r] + (b5[q] - b5[r]) * d;
o6 = b6[r] + (b6[q] - b6[r]) * d;
o7 = b7[r] + (b7[q] - b7[r]) * d;
o8 = b8[r] + (b8[q] - b8[r]) * d;
o9 = b9[r] + (b9[q] - b9[r]) * d;

o4 *= *in4;
o4 -= *in10 * (o4 - fb);
o5 -= *in10 * (o5 - fc);

fb = o4;
fc = o5;


// soft limiting at +-1 never passes +-2
if (o1 > 1.f) o1 = 1.f - ((1.f / o1) - 1.f);
else if (o1 < -1.f) o1 = -1.f - ((1.f / o1) + 1.f);

if (o3 > 1.f) o3 = 1.f - ((1.f / o3) - 1.f);
else if (o3 < -1.f) o3 = -1.f - ((1.f / o3) + 1.f);

if (o5 > 1.f) o5 = 1.f - ((1.f / o5) - 1.f);
else if (o5 < -1.f) o5 = -1.f - ((1.f / o5) + 1.f);

if (o7 > 1.f) o7 = 1.f - ((1.f / o7) - 1.f);
else if (o7 < -1.f) o7 = -1.f - ((1.f / o7) + 1.f);

if (o9 > 1.f) o9 = 1.f - ((1.f / o9) - 1.f);
else if (o9 < -1.f) o9 = -1.f - ((1.f / o9) + 1.f);


if (*in5 + *in6) r2 = (*in6 - *in5) / (*in6 + *in5);
if (*in6 + *in7) r3 = (*in7 - *in6) / (*in7 + *in6);
if (*in7 + *in8) r4 = (*in8 - *in7) / (*in8 + *in7);
if (*in8 + *in9) r5 = (*in9 - *in8) / (*in9 + *in8);

t2 = (o0 - o6) * r2;
t3 = (o1 - o7) * r3;
t4 = (o2 - o8) * r4;
t5 = (o3 - o9) * r5;


sd1 = *in1 - o5;
sp1 += sd1 * rate;
sp1 -= *in2 * (sp1 - sb1) * rate;

if (sp1 > 1.f) sp1 = 1.f - ((1.f / sp1) - 1.f);
else if (sp1 < -1.f) sp1 = -1.f - ((1.f / sp1) + 1.f);

sc1 = .5f + (sp1 * .25f);
sc2 = 1.f - sc1;
sc1 *= sc1 * 2.f;
sc2 *= sc2 * 2.f;

b0[p] = (*in1 * sc1) - (o5 * sc2);
sb1 = sp1;

b1[p] = o0 + t2;
b2[p] = o1 + t3;
b3[p] = o2 + t4;
b4[p] = o3 + t5;
b5[p] = o6 + t2;
b6[p] = o7 + t3;
b7[p] = o8 + t4;
b8[p] = o9 + t5;
b9[p] = o4;



*out1 = o4;
*out2 = o5;

p++;
p %= 4096;



you can stick your sorries in a sack mister
It is kind of sad that you can't understand that for some of us, even those of us with a programming background, look at what you posted above and it's Greek to us. I have no idea what any of that means.

I guess it's like Sheldon Cooper on Big Bang. He just can't understand how some people are just incapable of doing certain things. And I guess when you're really smart like you are, that's what happens.

Do you know my wife had kids in school who still couldn't learn how to do long division?

But it's pointless arguing this because like I said, some people don't get this stuff and the people who do don't get why the people who don't, don't.

And the cycle continues.

Post

In contrast, I find that coding both inspiring and befuddling in equal measure. Not got a clue what it means yet but I'll definitely try mess around with it further.
So thanks Rurik for the insight (I've also bought most of your synths, which are very good).

Back, sort of, to the OP: I wish Noatikl could be developed further. It had / has the promise of a really great concept which seems to have not been fully realized yet (despite the update last year).

Post

As the above people said: that code is just math operators and numbers slammed together to my eyes. Even if you explained what every single variable represented in the real world, I still wouldn't be able to think through it. I am not remotely alone in this.

Thanks for demonstrating the way that DSP experts think about how other people think, Xoxos :-D
- dysamoria.com
my music @ SoundCloud

Post

readers should ask themselves at this point,

why is it so important to these people to state what my opinion of people is?

someone i know who i consider to be extremely intelligent took *years* to remember control-c = copy. this is why i compare use of c to driving a car - almost everyone has the skills for elementary competency. where you drive to is your business. what can frustrate people is the desire to do so and be faced with a culture that tells you you cannot.

the code i posted is for what i think most people would consider an esoteric, "advanced synthesis concept", not a simple example. it's definately a complex example but the point is that it's *legible* and not obscured by api or oo calls. my dsp pdf provides examples of filters et c. in one line.

certainly some introduction time is apt for thinking programmatically, but it is laughable to assert that these basic blocks are unachievable.


let's consider linear interpolation, which is also a 6dB low pass filter....

if you want to blend two sources together, say a and b, then you need a blend value. say from 0 to 1.

you might eventually write

output = (blend * a) + ((1 - blend) * b);

this may take a bit of concentration to interpret for someone not used to math or algebraic representation, but if you wanted to get it, with some time, it's sensible. (you'll also note it's backwards for ergonomic design... when blend is 1, a is passed... when blend is 0, b is passed... and probably, if you designed a circuit in use, you'd make a the one passed by zero)

if you were to write this a dozen times, say perhaps from regular practice, you would eventually remember your algebra class, or, in some other way, probably accidentally, realise there is a simpler way to write the same thing ...

output = a + blend * (b - a);

if you stare at that for a long time, you'll see it accomplishes the same output, yet is a simpler form. congratulations, i've tricked you into reading perfectly valid c statements (to suggest that the kind of c++ you need for audio plugins takes years to learn is pure lies, industrial sabotage. you can be writing basic audio in about 50 easy pages of schildt).

that's not just programming, that's efficient programming, and it's fine to do it the first way, if the point is just to do it. (blend is cutoff, b is input, a is a buffer that is initialised at zero... voila, 6dB lowpass!)
you come and go, you come and go. amitabha neither a follower nor a leader be tagore "where roads are made i lose my way" where there is certainty, consideration is absent.

Post

xoxos wrote:readers should ask themselves at this point,

why is it so important to these people to state what my opinion of people is?

someone i know who i consider to be extremely intelligent took *years* to remember control-c = copy. this is why i compare use of c to driving a car - almost everyone has the skills for elementary competency. where you drive to is your business. what can frustrate people is the desire to do so and be faced with a culture that tells you you cannot.

the code i posted is for what i think most people would consider an esoteric, "advanced synthesis concept", not a simple example. it's definately a complex example but the point is that it's *legible* and not obscured by api or oo calls. my dsp pdf provides examples of filters et c. in one line.

certainly some introduction time is apt for thinking programmatically, but it is laughable to assert that these basic blocks are unachievable.


let's consider linear interpolation, which is also a 6dB low pass filter....

if you want to blend two sources together, say a and b, then you need a blend value. say from 0 to 1.

you might eventually write

output = (blend * a) + ((1 - blend) * b);

this may take a bit of concentration to interpret for someone not used to math or algebraic representation, but if you wanted to get it, with some time, it's sensible. (you'll also note it's backwards for ergonomic design... when blend is 1, a is passed... when blend is 0, b is passed... and probably, if you designed a circuit in use, you'd make a the one passed by zero)

if you were to write this a dozen times, say perhaps from regular practice, you would eventually remember your algebra class, or, in some other way, probably accidentally, realise there is a simpler way to write the same thing ...

output = a + blend * (b - a);

if you stare at that for a long time, you'll see it accomplishes the same output, yet is a simpler form. congratulations, i've tricked you into reading perfectly valid c statements (to suggest that the kind of c++ you need for audio plugins takes years to learn is pure lies, industrial sabotage. you can be writing basic audio in about 50 easy pages of schildt).

that's not just programming, that's efficient programming, and it's fine to do it the first way, if the point is just to do it. (blend is cutoff, b is input, a is a buffer that is initialised at zero... voila, 6dB lowpass!)
:sigh: You just don't get it.

Oh well, I'm going back to my simple life. All you future synth programmers, have fun.

Post

I like turtles.

Post

To return to the topic of the OP, I got a "free" Sonnovox VSTI after buying a new midi controller keyboard. It didn't do much and was actually a demo. I could not register it. I could only use it in demo mode and that ran out after thirty days. Thanks Sonnovox. :o

Post

powermat wrote:And Enzyme: :oops: :help: :bang:

I mean, it does produce sound... but ... I'd rather drop a sample on a track and place my own effects chains.

However, I hold on to it in case I live in a different plane of existence from the people who enjoy it and one day I'll fall off of my plane and onto theirs.
I've tried to like Enzyme. But it feels like a swing and a miss. I've got usable sounds out of it (that haven't just involved simply opening up one of Julian Ray's presets) but the results are often those I can get by other, simpler means.

I think there are several issues with the synth. One is simply that the nature of scanned synthesis tends to make for decent pads and drones but not a lot else because of its focus on relatively low modulation rates. Verplank and Matthews, who developed the initial idea for scanned synthesis, argued the slow rate is consistent with normal instrument playing but, when you think about it, physical instruments tend to move between impulse and sustain modes. Something that shifts between audio-rate and low-rate modulation might yield more usable results, such that a sudden movement is interpreted as a pluck and the system quickly responds before it settles down to what they called the 'haptic rate'.

Enzyme compounds the problem by limiting the interaction with the masses that manipulate the wavetable itself. But Verplank and Matthews' original idea was that you interact with the moving masses in different ways. In Enzyme, you pretty much only have the hammer to hit things with which at first seems OK because you can change how the masses interact with each other and alter the damping. Except for most settings hardly anything seems to change. You can see/hear this in Dan Worrall's tutorial video in which he moves various knobs around...and more or less the same drone comes out of the speakers.

The Wablet app, which seems to have disappeared completely now, I think had a better idea. Though I admit I never got around to trying it before it did disappear. Even then the videos tend to suggest what you get out isn't that different from analogue PWM/sync modulation.

One other problem with Enzyme may be that the core samples aren't 'wavetabley' enough and you just don't hear the movement that maybe it's capable of because the focus is on fairly static samples, which aren't going to yield that much movement. But as it's hard to tell what the synth is doing at any one time, it does't make experimentation easy.

Post

Bubbamusic wrote:To return to the topic of the OP, I got a "free" Sonnovox VSTI after buying a new midi controller keyboard. It didn't do much and was actually a demo. I could not register it. I could only use it in demo mode and that ran out after thirty days. Thanks Sonnovox. :o
I can see this thread returning to Sonivox many times.

Post

xoxos wrote:let's do this again, for the clowns

this is cruddy dsp, but it's dsp that works.

this is the *entire* dsp barrel of fauna.


OMG division!!!! :scared:

you can stick your sorries in a sack mister
First of all, that's C, not C++. C is a very small subset of C++. What you know is about 5% of C++. For the record, I've been programming C++ professionnally for more than 15 years. I've written algorithms for medical imagery, missile command, compression/decompression in real time inside phones, 3D video games, financial software, etc, so this kind of code is my bread and butter. And I stand by what I wrote in my previous post. Being able to write code doesn't mean that you write good code. Being able to speak doesn't mean that you are fluent.
I know that in a couple of months I can write a VST synth that's as good as most free synths, but I also know I can't write something like Diva or Bazille, even if I commit 2 years of full time work, because this requires a lot more knowledge.

Post

Image
http://www.kvraudio.com/kvr-developer-challenge/2007/

:)

so people who aren't wagner shouldn't try to write music eh.

stupid bully.

you're only proving my point by pointing out how limited my use of c++ is ;) i'm still releasing plugins companies like NI have never dreamed of. my user base is composed of knowledgeable, experienced synthesists. you can talk as much bullshit as you want, and chances are the inexperienced readers will believe you. doesn't mean shit.
you come and go, you come and go. amitabha neither a follower nor a leader be tagore "where roads are made i lose my way" where there is certainty, consideration is absent.

Post

xoxos wrote:Image
http://www.kvraudio.com/kvr-developer-challenge/2007/

:)

so people who aren't wagner shouldn't try to write music eh.

stupid bully.

you're only proving my point by pointing out how limited my use of c++ is ;) i'm still releasing plugins companies like NI have never dreamed of. my user base is composed of knowledgeable, experienced synthesists. you can talk as much bullshit as you want, and chances are the inexperienced readers will believe you. doesn't mean shit.
Thanks for pointing out your 2007 entry. Cool!

Post

lolilol1975 wrote: First of all, that's C, not C++. C is a very small subset of C++. What you know is about 5% of C++.
In that case, how about you write an efficient equivalent that is "proper" C++? From what I've seen of processor-friendly DSP code, it often looks pretty gnarly and this is clearly the insides of a single function call so I wouldn't expect to see a whole lot of templating going on. Though I might think about ways to cut down on the if() statements – from a pipeline efficiency standpoint rather than one of writing oh so elegant C++, which doesn't seem that relevant in this instance.

Post

In other news, I may have figured out a way to put Enzyme to good use. As it says on the tin marked "Scanned synthesis" it is quite good for creating reasonably organic sounds and some of them get close to physical modelling. The problem with Enzyme for me at least continues to be trying to make sounds with a hard attack with a controllable timbre - so I think I'm going to resort to layering it with something that can do that and basically make a lot more use of the filters.

Using highly asymmetric waveforms for the masses also seems to yield more interesting results for a given hammer shape and masses configuration, especially when playing with the stretch parameter.

However, I'm steadily getting more convinced that the sample start/end markers don't really do anything.

Post Reply

Return to “Instruments”