Processing order issue?


#1

Mod note: I've moved this from a contributors post, as it discusses a bug , possibility due to exec order

I just checked it out and think I have to agree, great reverb!

I think I noticed an issue with it though, cause for some reason it seems to be biased towards the right channel. Thought it was my ears at first, so I played a basic saw, first through the reverb, then direct to audio out. Everything was fine direct to audio out. Then I played it through the reverb again, and this time physically switched my headphones L to right ear and R to left.

Sure enough, the reverb then seemed to have a bias towards the left. It's as if some step in the reverb process is disconnected for the left channel. I should point out that I had a cold recently, but I don't think it's my ears, not after trying what I pointed out above.


TheSlowGrowth contributions
TheSlowGrowth contributions
#2

Yes, I remember having that suspicion as well at some point, but I thought it would be my headphones. I listened a little closer again now - and indeed, there is a bias towards the right channel. What surprises my is that this bias is even there if the Mix knob is entirely to the left (only the dry signal passes through). This is the relevant section of the patch:

With "mix" at 0 I don't understand why there should be a level difference between the two channels...
BTW; the left channel is attenuated with respect to the input signal. The right channel stays the same level when passed through.


#3

Here are some more thoughts:

please download this patch: levelDifferenceBug.axs (1.9 KB)

Plug in a mono source into the two inputs like this:

You will hear the level difference.

If you change the routing to this, its all fine again:

@johannes, do you know what's happening here?

EDIT: It gets worse. I created a subpatch with two inlets that directly go into two outlets. Then I placed it into a main patch like this:

Turning the crossfader to the left makes it sound okay, turning it to the right, makes the left channel slightly louder. Seems like a bug to me.


#4

Yup, same here, looks like a bug on the mix/xfade object then. If you feed the output to i1 of both x-faders, there's a problem, but if you feed i2 of both x-faders, the levels stay even.

On the plus side, at least it's not your headphones, or my ears!


#5

Yes, there have been previous reports about the crossfader being buggy. Several other have had this problem and it has been described in here somewhere, that it SOMETIMES has an issue. Are you guys having the problem all the time? Or is it only once in a while when going live?


#6

Can it be just execution order issue?


#7

It might be. I got a report from another user who mentioned that the stereo mixers from my community library(jaffa) had the problem sometimes. Check it out for yourself. It might be related to that.


#8

Hey there, I'm currently trying to reproduce this in a minimal example to forward to @johannes. It turns out, it's not a problem with the xfade, but with the processing order of objects (which somehow seems to be determined by the x,y position in the patch!).

Check out this patch: processing_order_bug_test.axp (2.2 KB)

Positioning the oscillator between the two math/-c-objects makes everything work as expected:


Putting the oscillator above or below the math/-c-objects seems to result in an invalid processing order, where one math/-c is processed before the other and the math/- gets the current buffer from one and the old buffer from the other, resulting in a glitch:

This is the most minimal example I can think of. Removing the math/-c-objects destroys the bug, but that is to be expected, as the math/--object gets the same buffer on both of its inputs then.

Looking at the version with the glitch, this is the execution order:

instancescope__2_i.dsp(net2Latch, net0Latch, (int8_t *)(&displayVector[3]));
instancesquare__1_i.dsp(0 , 0, net0, PExch[PARAM_INDEX_square__1_pitch].finalvalue);
instancescope__4_i.dsp(net1Latch, net0, (int8_t *)(&displayVector[35]));
instance_dash_c__1_i.dsp(net1Latch, net3, PExch[PARAM_INDEX__dash_c__1_c].finalvalue);
instance_dash___1_i.dsp(net3, net4Latch, net2);
instance_dash_c__2_i.dsp(net1Latch, net4, PExch[PARAM_INDEX__dash_c__2_c].finalvalue);
instancesaw__1_i.dsp(0 , net1, PExch[PARAM_INDEX_saw__1_pitch].finalvalue);

It seems weird to me why the scope_2 should be processed first?! It does the upper math/-c first, then the math/- and then the lower math/-c. Which is exactly what we see on the scope.

EDIT: Maybe a mod can split this into a separate topic on the helpdesk-subforum? @thetechnobear maybe?


#9

Objects are executed left to right, top to bottom
So this is correct - no?

This comes up frequently ... it may change one day, but like many things, once you get used to it, it does have its 'own logic'
The main thing is not to think of data flowing down the wires ... this is where the visual representation is not really consistent with reality :slight_smile:
There are a few posts on this.... here is one.


#10

Wow, I never knew that!

When talking about processing order, I always assumed it was decided strictly by the patch cables between objects. I had no idea the actual on-screen position of the objects played a part in it. Glad I read about this!

Actually, this might explain a problem I was having the other day. I scratch-built a quick sequencer with pitch inputs, noticed the timing started out ok but got very erratic. Couldn't figure out what I'd done wrong, so I practiced some obligatory head-scratching, thought WTF, then scrapped it :smile:

I reckon it must have had something to do with the positions of objects after reading this!


#11

12 posts were split to a new topic: Migrating to graph-based execution order


#24

A post was split to a new topic: Crossfader issue?