Open303 - open source 303 emulation project - collaborators wanted

DSP, Plugin and Host development discussion.
Post Reply New Topic
RELATED
PRODUCTS
JC-303

Post

neotec wrote:I've uploaded a ... hmmm ... gimmick. A standalone synthesizer written in Java which was inspired by this (and some other) thread(s). It is more or less based on the TB-303 :D .

This is a WIP version and will run under linux and win32 with JRE 1.6 installed (and the PATH environment variable pointing to the JRE bin folder).
Linux users might have to install portaudio19 or jack.

Anyways ... have fun :)

CSTBJ (WIP)

PS: Mike, will this get me in trouble: CSTBJ allows im-/export of ABL2 pattern files?
i think not, i already asked Mike about the Freebee Pattern format before i released my beta version, so there shouldn't be any issues with that ;]

i just checked this out, real good job there ;]
had no problems loading it (winXP here)
i figured the sequencer, and did myself a pattern, nice, very nice

EDIT: is that your filter there? the one with the immense amount of HP filters?
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

antto wrote:EDIT: is that your filter there? the one with the immense amount of HP filters?
Yes, but I redesigned it a bit (it's now just like Robin's version of the Moog filter):

Code: Select all

public float process(float input)
{
    double fb = this.hpf2.process(this.hpf1.process(-input * 0.25 - this.k * this.buf[3]));

    this.buf[0] = this.buf[0] + this.a * (fb - this.buf[0]) + DENORM;
    this.buf[1] = this.buf[1] + this.a * (this.buf[0] - this.buf[1]) + DENORM;
    this.buf[2] = this.buf[2] + this.a * (this.buf[1] - this.buf[2]) + DENORM;
    this.buf[3] = this.buf[3] + this.a * (this.buf[2] - this.buf[3]) + DENORM;
    
    return (float)(this.buf[3] * this.gain);
}
hpf2 is at 80Hz, hpf1 at 60Hz.

Edit: Here's the filter code and here are the envelopes.
... when time becomes a loop ...
---
Intel i7 3770k @3.5GHz, 16GB RAM, Windows 7 / Ubuntu 16.04, Cubase Artist, Reaktor 6, Superior Drummer 3, M-Audio Audiophile 2496, Akai MPK-249, Roland TD-11KV+

Post

my synth failed to load a pattern exported from your synth
you got "comment" lines ;]
does ABL add comments with the ";" char too? i should change my sequencer to "ignore" these and "look further" maybe..

btw, any way to use bigger range in the sequencer? seems like it's only one octave?!
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

antto wrote:my synth failed to load a pattern exported from your synth
you got "comment" lines ;]
does ABL add comments with the ";" char too? i should change my sequencer to "ignore" these and "look further" maybe..
ABL2 uses these comment lines for parameters and length (example from an original ABL2 pattern):

Code: Select all

; ABL2 Meta tag: 16
; Tune: 0.500000 Cutoff: 0.585000 Resonance: 1.000000 Envmod: 0.625000 Decay: 0.620000 Accent: 0.685000 Waveform: 1.000000 Distort: 0.180000 Drive: 0.285000 Volume: 0.600000 DistType: 1.000000 HighPass: 0.000000 Tempo: 105.000000 
antto wrote:btw, any way to use bigger range in the sequencer? seems like it's only one octave?!
Yes, look into the readme.txt :D ... you may use the mouse wheel on the 'position line' on top of the sequencer window or the note itself to change the octave.
... when time becomes a loop ...
---
Intel i7 3770k @3.5GHz, 16GB RAM, Windows 7 / Ubuntu 16.04, Cubase Artist, Reaktor 6, Superior Drummer 3, M-Audio Audiophile 2496, Akai MPK-249, Roland TD-11KV+

Post

ok, i tested my ideas about the square symmetry

1 HP = failed
2 HP = closer, but failed too
1 HP + DC offset = even closer, i think this is it, but i gave up

it's too time consuming to tweak it

so i just "cheated" and threw away the HP filter
now i only use tanh((sawtooth + variable_offset) * -55) + sawtooth * something;
i calibrated the variable_offset value at different notes, from ~17.3 to ~146.6Hz
..and used a simple rational function approximitation

now the interesting/odd thing about the whole thing here was when i was tweaking the variable_offset value

because there is no longer any HP filter before the shaper, things are very simple, the sawtooth is pure, like a mathematical ramp thing, so if my variable_offset is 0, the result of the tanh() would always be perfect square (erm, with one edge smoother, but this has nothing to do with the symmetry)
if variable_offset is +1 or -1 the square will infinitely thin (and this is not useful, i'm just making myself clear)

ok, so at the lowest note there is on the audio sample (c1, tuning fully down) which is ~17.3Hz.. VO (variable offset for short) was 0.385 - quite assymetrycal, but this is how it is in the TB..
then, as the oscillator frequency goes up, VO gets lower and lower in a exponential curve
i knew the square had to become perfect or almost perfect at some point in the higher frequencies, this would require very low VO value (or simply 0.0)
at oscillator frequency of ~109Hz - VO was 0.0077
the next higher note (and actually the highest note in the audio sample) was ~146.6Hz looking at how fast VO was decreasing, i just entered 0.0 but it was not enough?!
then i started entering negative values and went up to -0.033 which was it

conclusion: the "1 HP + constant_offset" makes sense here.. but it's too hard to "tune" i would need an advanced oscilloscope* to do it faster/easier
i'm still gonna cheat with the variable_offset scheme

now one question floats around my head, is the VO gonna stop at some negative value close to 0.0 or will it continue down to -1.0

need to check out the other samples i got
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

i forgot the "*"

Robin, your oscilloscope VST helped me sooo much in this, thank you!
now if you ever mess with it again, here is my wishlist for a next version of it:

1. custom colors, i would love if i can enter RGB values for the background/left/right/grid colors, and this should probably be saved in the VST memory so i can make a preset and always use it ;]

2. this is more important, and maybe tricky
to compare something with something else (Left and Right channel) i zoom as much as i want and then i press the Freeze button on the oscilloscope to look at the waveforms of the two "things"
but for that to work, both things have to be synced, unfortunately this is not possible with what i'm doing
audio sample is always the same, but the synth oscillator is freeruning and i have to press the Freeze button quite a lot of times to "catch" both waveforms with (almost) the same phases

what i *think* would be the best solution in such a case is this:
only when the scope is freezed, a "slider" can add a little offset between the two signals, erm, just visualy, since both signals are in buffers, freezed
now if there is this slider i could simply freeze at any time and compensate the phase difference with this slider
when the scope is un-freezed, slider is reset to 0.0
this would be my dream scope ;P~
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

i was wondering wether there would be a problem if i have a HP filter runing at a fixed frequency and i switch the oversampling between 1x and 4x (for example) for economy, i just tested it in mIRC, no problems, the response of the filter is the same (i had doubts about the y1 buffer, no worries now)
:tu:

i made my mind about the sawtooth/square waveforms, i don't want to waste more time trying to get them perfect, i did a lot of HP Filter tweaking and i cheated in some places to get similar behaviour, i'm happy for now

now what i would like to do is figure a way to bandlimit the oscillator

first of all, i got a fairly good bandlimited wavetable for the sawtooth
it DOES have something similar to aliasing (i think it happens when the algorithm interpolates between two mipmaps of the table) but it's very quiet, so it's not a problem
tho, the "lookup" algorithm is kinda expensive
one more thing here, i've linked my VEG signal to the oscillator, it "knows" when the synth is audiable or silent
so, while the VEG volume is 0.0 (or really low) i switch to the "cheap" sawtooth, which is: (phase+phase-1.0)
you know how this aliases, but it's not a problem, it only needs to drive the main-filter

but what should i do with the square!?
i figured, there is no big difference wether i use the bandlimited or the "cheap" sawtooth there

run at 4x oversampling? leave the main-filter to attenuate the aliasing (which won't be enough i think) or should i add something like a 8th order bessel filter in the oscillator?
hm..
i could still run the whole square circuit in "cheap" mode in the silent gaps (no oversampling, no antialiasing)
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

i was messing with the moog filter, "updating" it with the new stuff
the most obvious differences between kunn's 303 filter and the moog ladder now are:
moog: no resonance > cutoff is actually higher compared to the 303 filter
303: resonance > gain drops a lot more compared to the moog

so i measured the gain-loss to make the moog filter behave like the 303 in this matter
it's a pretty strange curve ;]

// R is the resonance parameter (0 to 1.0)
double r1 = 1.0 - r;
double r4 = r1 * r1; // pow(x,2)
r4 = r4 * r4; // pow(pow(x,2),2) = pow(x,4) ;P~
double r7 = (1.1188249 * (r4 + -0.16184984));
double r72 = r7;
r7 *= r7;
r7 *= r7 * r7 * r72; blah, this equals pow(x,7) ;]

gain = ((r7 * 0.86745874) + 0.8250662 - 0.17277284 * (r * r + 2.238755));

scale the output with this..
output = y4 * gc * gain;

this is kinda expensive, but it's not dependant on anything else than the resonance parameter (erm, this is not the K feedback coefficient)
so it can be only calculated when user tweaks the resonance knob
i think it's fair ;]
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

hey antto, what i currently do is this: cut a single cycle out of the 303 sample under investigation, load it into straightliner (any synth with single cycle waveform import will do) and play the appropriate note on strainghtliner and Open303. i also put a simple delay in either of the two signal paths to match the phase visually. then i just let it run in sync-mode (don't need freeze here at all). however, the suggestion with the delay/offset between the two input channels certainly makes sense and i will keep it in mind for future versions.

i wonder if rv0 is still around? would like to go on with the feedback filter tuning for which i need some samples...
My website: rs-met.com, My presences on: YouTube, GitHub, Facebook

Post

yeah, but.. my oscillator has this "drift" .. i've added some LP-Filtered noise modulating the frequency, so it is never stable ;P~
i can remove it and do something similar to what you do, but it's complicated, and i like to be able to whatch 2 different parts of the same wavefile (two different notes) at the same time (as in my previous example tweaking the HP filters)

not that i didn't do it, but if there was a counter on the Freeze button, it was going to wrap-around a bunch of times ;]

rv0 - yeah, i would also like another sample to check out the square wave again, and the slide pitch-LPF frequency (since i've only roughly approximated it to 7.5Hz, might be slightly different)
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

sorry i've been really busy and totally forgot about this project.

still kinda busy now, but feel free to post your requests ( and sorry if you already did, don't have time to catch up with all that has been posted here now)

Whenever I'm away for a while you can always send me a PM.. I get email notification for that.

Post

rv0 wrote:sorry i've been really busy and totally forgot about this project.still kinda busy now, but feel free to post your requests
no problem. there's no rush or something. just do it on your own pace.
and sorry if you already did, don't have time to catch up with all that has been posted here now
O.K. - so i quote myself with a sample-request (from page 46):
next, i would like to fine-tune the resonance dependence on the cutoff frequency. currently, this is done via a highpass filter in the feedback path of the main filter but maybe this can be improved by some more fancy filter or by explicitely coupling the feedback gain to the cutoff frequency. in order to investigate this in more detail, i will possibly need some more samples...

...snip...

...waveform: saw, reso: max, envmod: min, decay: min, accent: min and cutoff should go through the 11 tick-marks on the panel. then for each tick-mark, play a long and low note (the lowest possible, so we can observe the frequency response at a dense spacing of the harmonics).

from these samples, i will be able to see, how the resonance changes according to cutoff frequency over the range of the cutoff knob (roughly 300-2400 Hz). to see it in the range above, i would like to have a sample like above but with cutoff, envmod and decay at max (everything else stays the same - slow continuous sweep through the high range of cutoff frequencies) and another one with cutoff at min to see it in the range below 300 Hz (sweep through the low range).
whenever you find the time, it would be great if you could recrod these samples. but as said - no need to hurry. i have enough other stuff to do in the meantime as well. :D

THX, robin
My website: rs-met.com, My presences on: YouTube, GitHub, Facebook

Post

uhm, i'm kinda happy with the my square circuit (even tho i cheated a little)

Code: Select all

x = pd+pd - 1.0; // <- my cheap sawtooth (pd is the phase)
		float xh;
		xh = x * 0.25f;
		double soff = (0.90412745 + -0.0082430065 * Fc) / (1.0 + 0.057837048 * Fc + 3.1131084e-005 * (Fc * Fc));
		x = tanh((x + soff) * -41.f);

		double c = -0.22708828 + 0.017383587 * Fc + 3.1665539e-005 * Fc * Fc;
		x = (x + xh) * 0.5f;
		x = HP1(x,19.55f);
		x = (x < -c ? -c : x) * 1.5f;
		x = HP2(x,7.f);
Fc == the oscillator frequency in Hz
soff == offset, this is the symmetry (aka PW)
c == hard clipper (the Bump)
the overall amplitude of this square wave and a sawtooth with amplitude of +/-1.0 is really close to the samples i got from rv0

this setup is correct when:
fb-HP ~= 122Hz
HP3 ~= 44Hz (the last HP filter, A/D convertor or whatever..)
and filter minimum resonance is ~= 0.025

EDIT: -41.f <- the amplification in the tanh() shaper.. i calibrated this value looking at a sample from (uh, i forgot who it was) "303 Tweaks.mp3" .. a guy who showed up and recorded a pattern on his TB-303..
i previously used -60.f here, so -41.f will give even less excitement to the filter on the negative peak..
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

i went thru this whole thread, i was trying to find something i might have missed..
i decided to try the gimmick circuit again (i was previously using some wierd peakfollowers)
rv0 wrote:
antto wrote: 16 steps: pitches should be all the same (doesn't matter, just something low like c (no U/D))
no slides for now
here are the accents:

- - - - - - A - - A - - A A A A


recording at a fast and slowish tempo is a good idea here, tho, i want to see the "fast" version, probably around 120 to 130BPM

init:

Reso = max
decay = min
envmod = min
cutoff = max
accent = max

while recording:

decay > max
cutoff > min
decay > min

you can also repeat all of this with EnvMod = max
http://users.pandora.be/darffader/rv0te ... nttest.ogg

1 is what you asked,
2 is same with envmod = max
3 is 1, but slower
4 is 2, but slower


EDIT: i hear the pitch fluctuating slightly.. maybe i'd better use the walwart next time.
this is on page 17

rv0: in samples #1 and #3 (where envmod=0) it seems at the begining that decay is not 0 but somewhere in the middle!?

and btw, if you have the time, i will like some new samples again

my previous post (about the HP filters and the waveforms) is probably in the right direction, but failed when i compared it to another one of rv0's samples, where resonance is at max (so, some HP filters must have different values)

i kinda got close results of the gimmick with 2 LP filters instead of my dumb peakfollower-mess, tho, i'm only looking at the envmod=min state
one LP filter smoothens the envelope to make the "wow" sound, and another (with a lower frequency) makes the "acceleration" effect (subsequent accented notes)
there is probably more in there, but so far it's looking on the right road..

EDIT: i'm doing something wierd in mIRC
gonna load up a screenshot of the sonogram of the audio file (a loop) with the accents warmed up and "simulate" my envelopes, then i'm gonna mess with the gimmick circuit there, only processing the cutoff envelopes (drawing them over the screenshot)
the reason for this madness is that i don't have a good sonogram (VST) that i can use in my daw, i use Spectroman, but i really can't see a damn thing (it's too small)
i only use it to "approximate" the gimmick, and then i export to .wav, then load into my wave editor to look at a bigger sonogram, it's killing me
so i decided to concentrate on this in mIRC instead, i won't need to recompile/rerun/reopen/test/export/load/open/look_at_sonogram <- grrrr
someone was asking what kind of tools i use, well.. "custom" ;P~
gonna upload some pictures when it's ready, i hope it helps in approximating the gimmick response
meanwhile, if anyone knows some good (or at least bigger) sonogram VST, which is freewave - let me know please!
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

http://www.kvraudio.com/get/1914.html

I use this all the time, it's easy on my cpu and big, don't know if it fits you.
Cerca almeno di essere l'uomo che il tuo cane immagina tu sia.

Post Reply

Return to “DSP and Plugin Development”