Sometimes I use Reaper as a DAW. I recently discovered that you can write your own effect code fairly easy with something called JSFX. Not javascript, btw. You have to use (?) instead of IF statements.
So, I managed to get something working, and this is what I came up with. Some bit crusher effects.
I call this The Crushinator.
.
desc:Crushinator
slider1:0<0,50,1>boost
slider2:1<1,16,1>posterize
slider3:0<-0.4,0.4,0.05>offset
slider4:1<0.05,1,0.05>dry / wet
slider5:1<0.05,1,0.05>out volume
in_pin:left input
in_pin:right input
out_pin:left output
out_pin:right output
@init
boost_val = 0;
poster_val = 1;
offset = 0;
drywet = 1;
out_vol = 1;
@slider
boost_val = (slider1/10) + 1;
poster_val = slider2;
offset = slider3;
drywet = slider4;
out_vol = slider5;
@sample
dryL = spl0 * boost_val;
dryR = spl1 * boost_val;
dryL += offset;
dryR += offset;
//spl0 == 0 ? dryL = 0;
//spl1 == 0 ? dryR = 0;
dryL > 1 ? dryL = 1;
dryL < -1 ? dryL = -1; dryR > 1 ? dryR = 1;
dryR < -1 ? dryR = -1;
wetL = dryL;
wetR = dryR;
poster_val == 1 ? (
wetL >= 0.01 ? wetL = 0.8;
wetL <= -0.01 ? wetL = -0.8;
wetR >= 0.01 ? wetR = 0.8;
wetR <= -0.01 ? wetR = -0.8;
);
poster_val > 1 ? (
wetL = (wetL * poster_val) + 0.5;
wetL = floor(wetL);
wetL = wetL / poster_val;
wetR = (wetR * poster_val) + 0.5;
wetR = floor(wetR);
wetR = wetR / poster_val;
);
wetL > 1 ? wetL = 1;
wetL < -1 ? wetL = -1; wetR > 1 ? wetR = 1;
wetR < -1 ? wetR = -1;
inverse = 1 – drywet;
wetL2 = wetL * drywet;
wetR2 = wetR * drywet;
dryL2 = dryL * inverse;
dryR2 = dryR * inverse;
spl0 = (wetL2 + dryL2) * out_vol;
spl1 = (wetR2 + dryR2) * out_vol;
.
So, with the input of a sine wave

with posterize (bit crush) set to 2, you get

Which sounds very much like a retro computer system.
.
And I made a much simpler effect, called Squared.
.
desc:Squared
slider1:0<0,50,1>boost
slider2:0<-0.5,0.5,0.05>offset
slider3:1<0.05,1,0.05>out volume
in_pin:left input
in_pin:right input
out_pin:left output
out_pin:right output
@init
boost_val = 0;
offset_val = 0;
out_vol = 1;
@slider
boost_val = (slider1/10) + 1;
offset_val = slider2;
out_vol = slider3;
@sample
spl0 = spl0 * boost_val;
spl1 = spl1 * boost_val;
spl0 += offset_val;
spl1 += offset_val;
spl0 >= 0.01 ? spl0 = 1;
spl0 <= -0.01 ? spl0 = -1;
spl1 >= 0.01 ? spl1 = 1;
spl1 <= -0.01 ? spl1 = -1;
spl0 *= out_vol;
spl1 *= out_vol;
.
Which gives this for the output.

Turning the sine wave into a square wave. Well, it turns everything into a square wave.
If you adjust the “offset” slider, you can get a more interesting sound.

Anyway, consider these Open Source and free to use.