outputJack odd behaviour

Post Reply
User avatar
PoohBear
Posts: 4
Joined: Mon Jul 13, 2020 2:06 pm

outputJack odd behaviour

Post by PoohBear » Mon May 03, 2021 11:02 pm

Hi,
I'm new to VMD and Java however I do have a programing background from years back so if my code looks backwards then please excuse me.

Now I just came across this thread and the main part being "You should always write a new value to every output jack on every call to ProcessSample()."
viewtopic.php?f=9&t=592

So prior to seeing that thread I was testing to see if I had to write out the same value every time to the outputJack and this is where things got odd.

Code: Select all

public void ProcessSample()
{
    // add your own code here
    double tempout = outputJack1.GetValue();
    if (tempout!=2.5 || count<1)
    {
        outputJack1.SetValue(2.5);
        textLabel1.SetText(count+"");
        count=count+1;
    }
 }
Using the above code.
1st pass, the loop is executed (as expected) tempout=0
2nd pass, the loop is bypassed (as expected) tempout=2.5
3rd pass, the loop is executed (hmm) tempout=0
4th pass, the loop is bypassed (oh) tempout=2.5
and so on and on. I did not expect this.

If I change the "count" from count<1 to count<2
1st pass, the loop is executed (as expected) tempout=0
2nd pass, the loop is executed (as expected) tempout=2.5
3rd pass, the loop is bypassed (as expected) tempout=2.5
and from here on out it's always bypassed. Interesting..

Is there a technical reason to why when setting the out value twice in a row it's taken?

Cherry Dan
Site Admin
Posts: 223
Joined: Fri Jul 27, 2018 5:36 pm

Re: outputJack odd behaviour

Post by Cherry Dan » Tue May 04, 2021 12:32 am

PoohBear,

As you mentioned, you need to write a value to a jack with one or more cables plugged in to it at every ProcessSample() call. If you don't, as you're seeing, the results are undefined. Worse, you're calling GetValue() on an output jack, which also has undefined behavior.

Just like with hardware, you always want to output a new value on ever ProcessSample() call, regardless of what the previous value was. Among other reasons, cables can be added, moved, or removed at any time, so you never want to assume that the last value written is 'good enough.'

- Dan @ Cherry Audio

User avatar
honki-bobo
Posts: 143
Joined: Sat Nov 09, 2019 1:18 pm

Re: outputJack odd behaviour

Post by honki-bobo » Tue May 04, 2021 7:13 am

Hi PoohBear,

one more thing:

Don't update GUI elements in ProcessSample()!
Write the content you want to display in the text label to a variable and then use the GUI_Update_Timer to update the text label. This has WAY better performance since you don't update GUI elements at audio rate.

Best regards,
Martin
Image
Monkey Business Audio
Modules - Forum

User avatar
PoohBear
Posts: 4
Joined: Mon Jul 13, 2020 2:06 pm

Re: outputJack odd behaviour

Post by PoohBear » Tue May 04, 2021 9:11 am

Cherry Dan wrote:
Tue May 04, 2021 12:32 am
As you mentioned, you need to write a value to a jack with one or more cables plugged in to it at every ProcessSample() call. If you don't, as you're seeing, the results are undefined. Worse, you're calling GetValue() on an output jack, which also has undefined behavior.
That's cool, just wanted to make sure my system was not playing up or I was not going mad (more mad LOL)..
Also, Good to know I can't use\trust the data from GetValue on the output jack.
FYI I only was doing it this was for this post, originally it was going off to another input jack and just wanted to simplify it.
honki-bobo wrote:
Tue May 04, 2021 7:13 am

Don't update GUI elements in ProcessSample()!
Point noted however I was doing that purely for debugging only.... :D


BIG Thank you....

Post Reply