Old 02-25-2020, 03:41 PM   #41
danerius
Human being with feelings
 
Join Date: Oct 2018
Posts: 98
Default

Hi all following this thread

Heres a weird thing. Ive been trouble shooting for hours and hours. And I finally got the Oversampled Sinner/Clipper to work when I duplicated SaulTs 4xlimiter-file and changed that to the code that I couldnt get to work earlier. I did it section by section to make sure that it would compile.

So its working now and theres significantly less aliasing - just like I wanted. Still cant figure out why the "regular way" didnt. I placed the library in all kinds of folder locations but no...

On another note regarding the JSFX editing window:
Is there a keyboard shortcut to comment out large chunks of marked code?
Is there a way to change the size of the code/text?

Many thanks + best regards /danerius

Last edited by danerius; 02-25-2020 at 03:45 PM. Reason: typos
danerius is offline   Reply With Quote
Old 03-12-2020, 05:16 PM   #42
danerius
Human being with feelings
 
Join Date: Oct 2018
Posts: 98
Default

Guys

I just noticed that my code doesnt null properly. So I made this simple gain thing to double check and indeed it doesnt. Theres a phasey treble happening instead

Any ideas what might be happening?

Many thanks + best regards /danerius

Code:
desc:Sinner Upsampled 0.3

// Oversampling library by Sault + Tale

slider1:1<0.5,2,0.01>Gain

import st-oversampler.jsfx-inc

@init

function process(spl,slider) 
  ( 
    spl * slider1; 
  );

@slider
//threshold = 2 ^ (slider2/6);

@sample

s0 = spl0;
s1 = spl1;

os0.os_up4(s0);
os1.os_up4(s1);

os0.y3 = process(os0.y3,slider1);
os0.y2 = process(os0.y2,slider1);
os0.y1 = process(os0.y1,slider1);
os0.y0 = process(os0.y0,slider1);
s0 = os0.os_down4();

os1.y3 = process(os1.y3,slider1);
os1.y2 = process(os1.y2,slider1);
os1.y1 = process(os1.y1,slider1);
os1.y0 = process(os1.y0,slider1);
s1 = os1.os_down4();

spl0 = s0;
spl1 = s1;
danerius is offline   Reply With Quote
Old 03-12-2020, 10:17 PM   #43
SaulT
Human being with feelings
 
Join Date: Oct 2013
Location: Seattle, WA
Posts: 806
Default

St-oversampler does not null completely, maybe 20-30 dB depending on material. I have been searching for the correct technique to achieve that but I haven't found it yet.

Add

Code:
pdc_bot_ch = 0; pdc_top_ch = 2;
pdc_delay = 7;
To your @init section. This is the correct pdc_delay for the 4x code.
SaulT is offline   Reply With Quote
Old 03-13-2020, 02:26 AM   #44
danerius
Human being with feelings
 
Join Date: Oct 2018
Posts: 98
Default

Ooohhhh... of course. I forgot about the latency. That explains the phasing and that I couldnt really hear it when I wasnt nulling. Thats what comes from meandering to much with the code

Big thanks SaulT

Best regards /danerius

Quote:
Originally Posted by SaulT View Post
St-oversampler does not null completely, maybe 20-30 dB depending on material. I have been searching for the correct technique to achieve that but I haven't found it yet.

Add

Code:
pdc_bot_ch = 0; pdc_top_ch = 2;
pdc_delay = 7;
To your @init section. This is the correct pdc_delay for the 4x code.
danerius is offline   Reply With Quote
Old 03-14-2020, 09:18 AM   #45
SaulT
Human being with feelings
 
Join Date: Oct 2013
Location: Seattle, WA
Posts: 806
Default

When I first coded everything a few years ago I didnít know what I know now, so while there are solid design choices there are also missteps. Thereís room for improvement. I need to do a major update across the board... not necessarily a complete rewrite, but Iíve written a lot more code, canít even find some of it anymore, some of what Iíve written never found a use... and almost none of it has correct pdc_delay.

So I guess that will be a thing at some point. Iím starting to realize just how much I still need to learn. If anything, the list has gotten longer over the last few years...
SaulT is offline   Reply With Quote
Old 03-14-2020, 01:54 PM   #46
danerius
Human being with feelings
 
Join Date: Oct 2018
Posts: 98
Default

Regardless. Youre miles ahead of me

/danerius

Quote:
Originally Posted by SaulT View Post
When I first coded everything a few years ago I didn’t know what I know now, so while there are solid design choices there are also missteps. There’s room for improvement. I need to do a major update across the board... not necessarily a complete rewrite, but I’ve written a lot more code, can’t even find some of it anymore, some of what I’ve written never found a use... and almost none of it has correct pdc_delay.

So I guess that will be a thing at some point. I’m starting to realize just how much I still need to learn. If anything, the list has gotten longer over the last few years...

Last edited by danerius; 03-14-2020 at 03:56 PM.
danerius is offline   Reply With Quote
Old 03-22-2020, 04:17 PM   #47
danerius
Human being with feelings
 
Join Date: Oct 2018
Posts: 98
Default

Hi guys

Heres my progress so far. Ive been experimenting with two different waveshapes and this is the one that works. The other one distorts weirdly and I need to investigate further.

Ive also checked some other waveshaper/compressor plugins with nulling and Fabfilters Saturn was interesting. Most of the character options sounded like there was something time based going on. Im guessing like SaulT suggested with using an RMS window for processing. Ive been staring at that code but havent tried using it yet. Gonna get going with it asap

Best regards /danerius

Code:
desc:Sinner Upsampled 0.41

// Oversampling library by Sault + Tale

//slider1:1<0.5,2,0.01>Glue
//slider2:12<1,24,1>Peak Clip
slider3:2.6<1,3,0.1>Character
slider4:0.99<0,1,0.01>Headroom

import st-oversampler.jsfx-inc

@init
pdc_bot_ch = 0; pdc_top_ch = 2;
pdc_delay = 7;

function process(spl,slider)
(
spl = sin ($pi * spl / slider3) 
);
@slider
//headroom = 2 ^ (slider4/6);

@sample

s0 = spl0;
s1 = spl1;

os0.os_up4(s0);
os1.os_up4(s1);

os0.y3 = process(os0.y3,slider1);
os0.y2 = process(os0.y2,slider1);
os0.y1 = process(os0.y1,slider1);
os0.y0 = process(os0.y0,slider1);
s0 = os0.os_down4();

os1.y3 = process(os1.y3,slider1);
os1.y2 = process(os1.y2,slider1);
os1.y1 = process(os1.y1,slider1);
os1.y0 = process(os1.y0,slider1);
s1 = os1.os_down4();

spl0 = s0 * slider4;
spl1 = s1 * slider4;

//Glue Experiment to be placed under "function process"
//  ( 
//s = abs(spl);
//spl = pow(s,slider1) * sign(spl);
//  );
danerius is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -7. The time now is 04:41 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2020, vBulletin Solutions Inc.