hehe, thx. i thought you were aware of this one already. ahh, i remember earlier in this thread Dave from muon reporting a bug related to sample-rate changes ...i'm actually working with an unreleased newer version of it myself...i will take a lookantto wrote:Robin's Signal Analyzer is great! very fast update rate, both for the scope and the FFT
aah, thanks ;]
only if i could change the colors a little..
anyway, better than what i had before ;]
Open303 - open source 303 emulation project - collaborators wanted
-
Music Engineer Music Engineer https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=15959
- KVRAF
- Topic Starter
- 4379 posts since 8 Mar, 2004 from Berlin, Germany
-
- KVRist
- 251 posts since 24 May, 2009
Ah well, The Blue Cat scope isn't nearly as good as I'd hoped. Basically there are two triggering modes: 'Flow' ("update as fast as it can" or, as I call it, "useless") and 'Loop' ("update once per second or so", AKA "jerky"). A lot of twiddling with the zoom/freeze controls can get you nice snapshots of the input waveform, but it's not what I'd consider a full-featured scope by any stretch of the imagination.
- KVRAF
- 2569 posts since 4 Sep, 2006 from 127.0.0.1
it made my life easier..
i had a lot of problems calibrating my synth (sawtooth actually) with all the new stuff around
and now with this new scope, here's what i did
my main problem was - matching a lowish note, then switching to a higher note - wrong phases, and vice-versa
so, i loaded another instance of both the synth, and the audio sample
now these two pairs i sent to 1st and 2nd FX tracks (left/right = synth/sample)
added an oscilloscope for each track
and i looped 1 single note as before, but this time, i added a time offset to the second "pair" so that first pair plays the lower note, and the second pair plays the higher note "dun dun dun dun dun dun, all day long"
and i can watch both scopes now (forget the sound, it's crazy, i just need to look at the scopes and output levels)
and the next part was adding 6 "Formula Controlers"
erm, these are special controlers of the DAW (FL) which can be "linked" to any VST's automatable parameter
so i link each HP filter knob on both instances of the synth to one Formula Controler, and also the input/output volume (zoom/scale)
and i kind of got the hang of it, the order of the HP filters is important, i understand it now
if you concentrate on one note only, having 3 HP filters, you could get fooled by the curves/phases looking very close, altho the DC offset doesn't match <- wrong, change the note and it'll start looking different than the sample
and another thing is the amplitude peaks, combined with the phases/looks
the sawtooth tends to look better and better (closer to a saw) the higher the note is (due to the HP filters) but lower notes also have weaker amplitude peaks, there are quite a bunch of combinations where i can match the looks kinda close, but the amplitude peaks of the low vs high note don't match the audio <- fail ;]
but now i can tweak the whole thing while watching both situations, and when i think it's close, i can go thru all notes to see closer, and check the FFT too..
real big thanks for this plugin Robin (and deraudrl)
i had a lot of problems calibrating my synth (sawtooth actually) with all the new stuff around
and now with this new scope, here's what i did
my main problem was - matching a lowish note, then switching to a higher note - wrong phases, and vice-versa
so, i loaded another instance of both the synth, and the audio sample
now these two pairs i sent to 1st and 2nd FX tracks (left/right = synth/sample)
added an oscilloscope for each track
and i looped 1 single note as before, but this time, i added a time offset to the second "pair" so that first pair plays the lower note, and the second pair plays the higher note "dun dun dun dun dun dun, all day long"
and i can watch both scopes now (forget the sound, it's crazy, i just need to look at the scopes and output levels)
and the next part was adding 6 "Formula Controlers"
erm, these are special controlers of the DAW (FL) which can be "linked" to any VST's automatable parameter
so i link each HP filter knob on both instances of the synth to one Formula Controler, and also the input/output volume (zoom/scale)
and i kind of got the hang of it, the order of the HP filters is important, i understand it now
if you concentrate on one note only, having 3 HP filters, you could get fooled by the curves/phases looking very close, altho the DC offset doesn't match <- wrong, change the note and it'll start looking different than the sample
and another thing is the amplitude peaks, combined with the phases/looks
the sawtooth tends to look better and better (closer to a saw) the higher the note is (due to the HP filters) but lower notes also have weaker amplitude peaks, there are quite a bunch of combinations where i can match the looks kinda close, but the amplitude peaks of the low vs high note don't match the audio <- fail ;]
but now i can tweak the whole thing while watching both situations, and when i think it's close, i can go thru all notes to see closer, and check the FFT too..
real big thanks for this plugin Robin (and deraudrl)
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
-
Music Engineer Music Engineer https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=15959
- KVRAF
- Topic Starter
- 4379 posts since 8 Mar, 2004 from Berlin, Germany
i just implemented and tried it this way and over here, the actual resonance occurs at a frequency approximately 1.6 times higher than in the moog filter with the same setting. would you and/or kunn mind to give more details how this data and approximation was obtained?antto wrote:kunn gave me some tuning data and i did these approximitations, which are very good, also the gain-compensation for resonance at high cutoffs:
double fx = o * 0.25 * coeff_sqrt05;
// o is omega, 0.25 because of 4x oversampling, coeff_sqrt05 is sqrt(0.5)
a0 = (0.00045522346 + 6.1922189 * fx) / (1.0 + 12.358354 * fx + 4.4156345 * (fx * fx));
k = fx*(fx*(fx*(fx*(fx*(fx+7198.6997)-5837.7917)-476.47308)+614.95611)+213.87126)+16.998792;
double gc = k * 0.058823529411764705882352941176471; // 17 reciprocal
gc = (gc - 1.0) * r + 1.0; // R is 0 to 1.0 ;]
gc = (gc * (1.0 + r));
k = k * r; // K is ready now
- KVRAF
- 2569 posts since 4 Sep, 2006 from 127.0.0.1
uh?!
with these coefficient approximitations, and 4x oversampling - the filter is *almost* perfectly tuned
the data came from kunn, i guess he used some rocket science voodoo math to calculate the data
my approximitations were done in CurveExpert..
you are using the filter from the post on page 30-something (that i linked) right?
both versions of the filter behave the same way (or similar enough) with these coefficients
and the coeff_sqrt05 thing i added scales the tuning so that it matches nyquist when r=1.0 (as opposed to the original data from kunn, where the tuning was "correct" for the no-resonance state)
i did this because i need the filter with tuned resonance, since i've modeled my envelopes based on frequency measurements
this way i can replace the filter with any other filter as long as it's correctly tuned when resonance is high (and it'll sound the same way at different sampling rates, just like this one)
if it still doesn't work, i can "gather" the whole filter code in one place?
with these coefficient approximitations, and 4x oversampling - the filter is *almost* perfectly tuned
the data came from kunn, i guess he used some rocket science voodoo math to calculate the data
my approximitations were done in CurveExpert..
you are using the filter from the post on page 30-something (that i linked) right?
both versions of the filter behave the same way (or similar enough) with these coefficients
and the coeff_sqrt05 thing i added scales the tuning so that it matches nyquist when r=1.0 (as opposed to the original data from kunn, where the tuning was "correct" for the no-resonance state)
i did this because i need the filter with tuned resonance, since i've modeled my envelopes based on frequency measurements
this way i can replace the filter with any other filter as long as it's correctly tuned when resonance is high (and it'll sound the same way at different sampling rates, just like this one)
if it still doesn't work, i can "gather" the whole filter code in one place?
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
-
- KVRist
- 77 posts since 18 Nov, 2007 from Estonia
kunn wrote:the cutoff response (to a) is very different compared to moog. in a moog filter the effective cutoff fc=a always. in a tb-303 fc=2*a when k=0 and fc=sqrt(2)*a when k=17.
-
Music Engineer Music Engineer https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=15959
- KVRAF
- Topic Starter
- 4379 posts since 8 Mar, 2004 from Berlin, Germany
haha, yeah probably. more specifically, i'd guess some numerical algorithm to solve the tuning/feedback-gain equations (if not soluble analytically)...that would probably the way i would go about it if i have to.antto wrote:uh?!
with these coefficient approximitations, and 4x oversampling - the filter is *almost* perfectly tuned
the data came from kunn, i guess he used some rocket science voodoo math to calculate the data
page 40you are using the filter from the post on page 30-something (that i linked) right?
it matches nyquist? how do you mean that?both versions of the filter behave the same way (or similar enough) with these coefficients and the coeff_sqrt05 thing i added scales the tuning so that it matches nyquist when r=1.0
yes, that's waht i want too: correct tuning for the resonance frequency. i'm not particularly interested in the -3 or -12 dB point when resonance is zero.(as opposed to the original data from kunn, where the tuning was "correct" for the no-resonance state). i did this because i need the filter with tuned resonance
maybe i did just some typing error or something. i'll check and post the full source code here later (don't want to upload that errorneous code to the repository)if it still doesn't work, i can "gather" the whole filter code in one place
-
Music Engineer Music Engineer https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=15959
- KVRAF
- Topic Starter
- 4379 posts since 8 Mar, 2004 from Berlin, Germany
ahh. that would be the explanantion. but 'a' - should that be the coefficient here?! i don't guess so, since fc=2*a ...that does not seem to resemble my sin/cos/tan stuff.kunn wrote:kunn wrote:the cutoff response (to a) is very different compared to moog. in a moog filter the effective cutoff fc=a always. in a tb-303 fc=2*a when k=0 and fc=sqrt(2)*a when k=17.
-
Music Engineer Music Engineer https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=15959
- KVRAF
- Topic Starter
- 4379 posts since 8 Mar, 2004 from Berlin, Germany
i think i have it now:
first, your (antto's) equations contained the 0.25 factor which i don't need (because inside my filter, the samplerate variable is already the oversampled one) and second, the was some factor of 2*pi ...you said o is omega - which in my book - is 2*pi*frequency/samplerate. you seem to be talking about normalized frequency here instead of normalized radian frequency (with the factor 2*pi).
so - if i scrap the 0.25 and divide by 2*pi, the resonant frequency matches
edit: and 0.25*2*pi is pi/2 = 1.5707... which is approximately 1.6 - ahem, very approximately.
problem solved.
first, your (antto's) equations contained the 0.25 factor which i don't need (because inside my filter, the samplerate variable is already the oversampled one) and second, the was some factor of 2*pi ...you said o is omega - which in my book - is 2*pi*frequency/samplerate. you seem to be talking about normalized frequency here instead of normalized radian frequency (with the factor 2*pi).
so - if i scrap the 0.25 and divide by 2*pi, the resonant frequency matches
edit: and 0.25*2*pi is pi/2 = 1.5707... which is approximately 1.6 - ahem, very approximately.
problem solved.
- KVRAF
- 2569 posts since 4 Sep, 2006 from 127.0.0.1
oh, yeah, i call omega Fc/Fs
and the exp(-2*pi*Fc/Fs) i call the "x" or "cutoff" coefficient (refering to dspguide)
um, maybe it's confusing, all the time i was thinking that "omega" is not something special because it's always Fc/Fs and goes from 0.0 to 0.5, this way it's easier for me
anything that has something to do with the filter is somehow a "coefficient" and is specific to each filter, but the Fc/Fs thing is always the same
not sure if this is a good name for it
this filter is solid
and the exp(-2*pi*Fc/Fs) i call the "x" or "cutoff" coefficient (refering to dspguide)
um, maybe it's confusing, all the time i was thinking that "omega" is not something special because it's always Fc/Fs and goes from 0.0 to 0.5, this way it's easier for me
anything that has something to do with the filter is somehow a "coefficient" and is specific to each filter, but the Fc/Fs thing is always the same
not sure if this is a good name for it
i mean that kunn's data was "correct" for the non-resonant state, and when i increased resonance, at omega=0.5 (where even with the 4x oversampling the filter had to go up to nyquist) it was far above, and i had to scale the whole thing down to ~0.707 which i figured is actually sqrt(0.5) ;]it matches nyquist? how do you mean that?
this filter is solid
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
-
Music Engineer Music Engineer https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=15959
- KVRAF
- Topic Starter
- 4379 posts since 8 Mar, 2004 from Berlin, Germany
in common dsp-lingo, (lowercase) omega denotes the normalized radian frequency which is 2*pi*frequency/sampleRate. it typically goes from 0 to pi where pi corresponds to the nyquist-frequency. if you start looking into the z-plane, all this will probably make more sense because there, 'omega' can be interpreted as an angle. and with unit radius, an angle of pi corresponds to z=-1 on the unit circleantto wrote:all the time i was thinking that "omega" is not something special because it's always Fc/Fs and goes from 0.0 to 0.5
up to what frequency is your approximation valid? can i use it also with only 2x oversampling or even without any oversampling?i mean that kunn's data was "correct" for the non-resonant state, and when i increased resonance, at omega=0.5 (where even with the 4x oversampling the filter had to go up to nyquist) it was far above, and i had to scale the whole thing down to ~0.707 which i figured is actually sqrt(0.5) ;]
this filter is solid
- KVRAF
- 2569 posts since 4 Sep, 2006 from 127.0.0.1
i tested both the moog ladder and kunn's filter with only 2x oversampling
both worked, tho, if i remember correctly there was some resonance-loss close to nyquist in either one of them or both (can't remember)
i already made my whole synth to work with 4x oversampling (because of my first bandpass-feedback filter) and now i don't want to change everything, so i stick with 4x, but i think 2x works too
they both sound beautiful at 4x ;]
both worked, tho, if i remember correctly there was some resonance-loss close to nyquist in either one of them or both (can't remember)
i already made my whole synth to work with 4x oversampling (because of my first bandpass-feedback filter) and now i don't want to change everything, so i stick with 4x, but i think 2x works too
they both sound beautiful at 4x ;]
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
-
Music Engineer Music Engineer https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=15959
- KVRAF
- Topic Starter
- 4379 posts since 8 Mar, 2004 from Berlin, Germany
...and i didn't mean to suggest that. i'll probably stick with 4x as well since, at some later stage, there will probably also be distortion. just wanted to know, because if i don't add distortion, 2x would be sufficient.antto wrote:i already made my whole synth to work with 4x oversampling (because of my first bandpass-feedback filter) and now i don't want to change everything...
- KVRAF
- 2569 posts since 4 Sep, 2006 from 127.0.0.1
so i approximated the response of the sawtooth by tweaking the HP filters and having a little feedback already (resonance "ground" thing)
it's not idealy perfect, but it's very close
the overal amplitude level doesn't match (the tb-303 sawtooth peaks drop on lower notes, mine drop too, but not as much)
also, the "weigth" of the sawtooth (due to the highpass filtering) is not exact, but close
anyway, i switched to square, and i can confirm that it was looking good too
this was my whole idea about the HP filters, that in the TB-303 these elements are "passive" or something, i mean - if something in there is acting as a HP filter, it's "cutoff frequency" shouldn't change
and so if i get the sawtooth to look/behave the same way as the sample, i would see the same behaviour/look when i switch to square and compare it with the sample
btw, i still haven't got the hang of the damn square, especialy the "bump" with the positive/negative peaks at different frequencies
and i'm starting to think that my first HP filter in the square circuit (the one that is before the tanh() shaper, which determines the symmetry) is wrong
the assymetry behaviour of my 14.7Hz HP there seems to match the audio sample at lower and middle notes, but it seems that for higher notes (and especially when the TUNE knob goes high too) the TB-303 square get's more symmetrical faster than mine
i first noticed this when i was listening to the same notes played by my synth and the TB-303 sample (sepparately) and the TB-303 sounded more square-ish
i looked up closely in the wave editor, and mine still had visible assymetry as opposed to the TB, where it was almost perfect square there
why is it like that? i can think of a bunch of possibilities:
1) 2 HP filters (with even lower cutoff freqs) before the tanh() instead of 1
2) still 1 HP filter, with a lower cutoff AND some (constant) DC offset into the tanh() shaper
3) i'm totaly wrong about the symmetry of the square*
* i've alread mentioned about the positive vs negative peaks at different frequencies, i'm still now sure how they happen
i'm currently using a simple square circuit, no "bump" and stuff
only the hpf(tanh(hpf(sawtooth)*-45) + sawtooth * amp) part
yeah, i have an additional HP filter for the square, it is placed after the combined square signal and before the first HP filter in the main-filter (the one that i call the DC-Killter)
it's not idealy perfect, but it's very close
the overal amplitude level doesn't match (the tb-303 sawtooth peaks drop on lower notes, mine drop too, but not as much)
also, the "weigth" of the sawtooth (due to the highpass filtering) is not exact, but close
anyway, i switched to square, and i can confirm that it was looking good too
this was my whole idea about the HP filters, that in the TB-303 these elements are "passive" or something, i mean - if something in there is acting as a HP filter, it's "cutoff frequency" shouldn't change
and so if i get the sawtooth to look/behave the same way as the sample, i would see the same behaviour/look when i switch to square and compare it with the sample
btw, i still haven't got the hang of the damn square, especialy the "bump" with the positive/negative peaks at different frequencies
and i'm starting to think that my first HP filter in the square circuit (the one that is before the tanh() shaper, which determines the symmetry) is wrong
the assymetry behaviour of my 14.7Hz HP there seems to match the audio sample at lower and middle notes, but it seems that for higher notes (and especially when the TUNE knob goes high too) the TB-303 square get's more symmetrical faster than mine
i first noticed this when i was listening to the same notes played by my synth and the TB-303 sample (sepparately) and the TB-303 sounded more square-ish
i looked up closely in the wave editor, and mine still had visible assymetry as opposed to the TB, where it was almost perfect square there
why is it like that? i can think of a bunch of possibilities:
1) 2 HP filters (with even lower cutoff freqs) before the tanh() instead of 1
2) still 1 HP filter, with a lower cutoff AND some (constant) DC offset into the tanh() shaper
3) i'm totaly wrong about the symmetry of the square*
* i've alread mentioned about the positive vs negative peaks at different frequencies, i'm still now sure how they happen
i'm currently using a simple square circuit, no "bump" and stuff
only the hpf(tanh(hpf(sawtooth)*-45) + sawtooth * amp) part
yeah, i have an additional HP filter for the square, it is placed after the combined square signal and before the first HP filter in the main-filter (the one that i call the DC-Killter)
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
-
- KVRist
- 239 posts since 22 Jan, 2007 from Germany
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
.
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)
Edit: A screenshot:

I'm willing to answer any questions and post portions of the source code
(if anybody is interested)
PS: Mike, will this get me in trouble: CSTBJ allows im-/export of ABL2 pattern files?
Edit2: small update, same link.
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)
Edit: A screenshot:

I'm willing to answer any questions and post portions of the source code
PS: Mike, will this get me in trouble: CSTBJ allows im-/export of ABL2 pattern files?
Edit2: small update, same link.
Last edited by neotec on Tue Feb 16, 2010 6:12 pm, edited 2 times in total.
... 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+
---
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+
