Open303 - open source 303 emulation project - collaborators wanted

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

Post

"and also, the TB-303 gets detuned"

Have you measured the detuning yet? Is that something we want to model, philosophically or practically?
Swing is the difference between a drum machine and a sex machine.

Post

well, this is what i asked before too, i'm not sure, tho i can measure it (it'll take me some time)

here's the comparison:
vb303_rv0_slide02.wav (1MB)
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

btw, you can see the slide here, it's 99% the same as the original (with my 7.5Hz LP filter)
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

i tested the same square-tweak thing, only this time i used the "perfect" sawtooth wave (no phase-mish-mash)

now it's even closer

i did my phase mishmash in the beta version, because i didn't had the right filter like i do now, and my sawtooth didn't looked like it should at all

now i'm thinkering there is a 3rd HP filter, not sure if it's in the TB-303 itself, or the A/D converter
or hm.. before the filter? (after the osc)

this is probably a question for the 303-schematics-geek that rv0 told us about ;]
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

:idea: just a small idea, not related to the above comments:
I figured, thinking along the lines of dc coupled soundcards and motu volta, that a REAL cv gate in/out on your software tb303 clone is relatively easy to implement.. how cool is that :shock:

Post

rv0 wrote::idea: just a small idea, not related to the above comments:
I figured, thinking along the lines of dc coupled soundcards and motu volta, that a REAL cv gate in/out on your software tb303 clone is relatively easy to implement.. how cool is that :shock:
Hehe. So you could actually drive a bunch of old synths, right? :o
Swing is the difference between a drum machine and a sex machine.

Post

antto wrote:i tested the same square-tweak thing, only this time i used the "perfect" sawtooth wave (no phase-mish-mash)

now it's even closer

i did my phase mishmash in the beta version, because i didn't had the right filter like i do now, and my sawtooth didn't looked like it should at all

now i'm thinkering there is a 3rd HP filter, not sure if it's in the TB-303 itself, or the A/D converter
or hm.. before the filter? (after the osc)

this is probably a question for the 303-schematics-geek that rv0 told us about ;]
Isn't your phase mishmash a perfect square at 50% duty cycle anyway? Or maybe not, since you're bandlimiting. Interesting! I don't bandlimit my oscs, currently, so I had not looked at that.

Also, are your oscs currently using the theoretical multipliers when you build them up? Or are you modifying them to get rid of the ringing wiggles (like I used to do with the Fejer and Hamming windows).
Swing is the difference between a drum machine and a sex machine.

Post

rv0 wrote::idea: just a small idea, not related to the above comments:
I figured, thinking along the lines of dc coupled soundcards and motu volta, that a REAL cv gate in/out on your software tb303 clone is relatively easy to implement.. how cool is that :shock:
was that question pointed at me? ;P~ (i didn't understand)

mistertoast: no, the phase mishmash thing is about the sawtooth (since my oscillator has only 1 table, for a sawtooth, and there is no square wavetable)
.. you know, i generate the square by two sawtooths ;]

the "perfect" saw i was talking about can be found here: http://musicdsp.org/showArchiveComment. ... hiveID=268
read the comment too, i had a typo

my "phase mishmash" was just a little bit of 1 additional variable here, which i removed now (turning the algo back to the code you see on that page) to generate a pure sawtooth
oh, i got a screenshot of it actually
http://www.box.net/shared/3mb9joyk2s
LEFT: the simplest sawtooth with ugly edges (ringing)
RIGHT: my code (edges look elegant)
ploted in mIRC, i used the same number of harmonics to generate both

my mish-mash thing was the second image but with some of the harmonics dephased a little bit (same sound, different waveshape)
now i changed back the phases, and my osc now generates the same thing you see on the second image (i just don't like the first one, with these ugly edges)

blah, anyway.. now i was measuring the frequencies of rv0's TB-303 (looking at the longnotes.ogg sample, where all C keys are played)
i'm doing rough calculations (counting cycle length in samples, converting samples to midi note number in mIRC..)

so here's some data:

Code: Select all

key  ::: ??? / cycle -  Freq        ::: correct!
c(D) ::: C-1 / 1392s -  31.681034Hz :::  30.867706!
c(-) ::: C-2 /  682s -  64.662757Hz :::  61.735413!
C(-) ::: C#3 /  335s - 131.641791Hz ::: 123.470825!
C(U) ::: C#4 /  164s - 268.902439Hz ::: 246.941651!
let me explain now :-o
first i measure 1 cycle length (in samples) from the audio file
then i convert this to frequency (Hz) so i can convert it to the closest MIDI Note
i've also printed the "correct" frequencies of the original keys (where 246Hz is for a real C-4 note)
WARNING: mIRC floating point precision is kind of wierd, tho it should give you an idea
you can always take the audio file and measure it yourself with better tools ;]
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

mistertoast wrote:
rv0 wrote::idea: just a small idea, not related to the above comments:
I figured, thinking along the lines of dc coupled soundcards and motu volta, that a REAL cv gate in/out on your software tb303 clone is relatively easy to implement.. how cool is that :shock:
Hehe. So you could actually drive a bunch of old synths, right? :o
yeah, and vice versa, use analog sequencers to control the software 303.
I had my TB303 cv gate modded because it's useful sometimes.. or just send cv from one 303 to the other, leave gate unconnected and program time mode to 'trigger' the cv, the separation of time and pitch def makes sense when using cv gate ..

cv could also be used to drive the filter or something.... it would be cool if you had some sort of virtual cv gate patch-ability between instances of the 303 softsynths (using virtual audio ports).. I can imagine loading a giant display full of instances and have fun for lots of hours :) a framework like that could easily be used for eventual plugin add-ons in the future

sorry, i'm always ful of ideas :D

Post

antto wrote:
rv0 wrote::idea: just a small idea, not related to the above comments:
I figured, thinking along the lines of dc coupled soundcards and motu volta, that a REAL cv gate in/out on your software tb303 clone is relatively easy to implement.. how cool is that :shock:
was that question pointed at me? ;P~ (i didn't understand)
uhm no it was totally unrelated to the ongoing conversation.

unrelated idea...

Post

@antto. Oh OK. The only phase mishmash I could think of in my head was generating the pulse from the saw.

This is currently my ramp oscillator (actual code):
osc0ramp = 1.0f-(2.0f*(float)tb_phase0);
//(tb_phase0 is a double in range 0-1)
That's the whole thing, and yeah, I know it's not optimized yet. Who knows if the compiler is converting that multiplication by two to an addition or not? :-)

I guess an interesting question would be what would I do if we got raw oscillator data from a modified 303 and the ramp was not strictly linear? And what would I do if we got data and found out that the shape of the ramp changed through time as the note were played? And what would I do if we got data and found that the shape changed based on the note value?
Swing is the difference between a drum machine and a sex machine.

Post

not sure, but i'll have the same problem, because my sawtooth is pretty much like yours (only that it's bandlimited)

btw, i was thinking on optimization of my synth
i was going to shut down the oscillator when there is no AMP envelope (when it's zero) to save CPU, but only for realtime "cheap" processing (because it will make difference with the filter

then i figured, i can still run the osc during the "silent" gaps between the notes, but without reading from the tables, just a pure mathematical saw that roughly looks like the bandlimited one (the filter doesn't mind the aliasing)

the osc will still keep cycling it's phase (i find this important) and the filter will still resonate while the synth is silent (this IS important)
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

@antto, all those things like whether you try to get rid of Gibbs with multipliers and whether you slightly change phases, etc. can affect the filter response. That's one reason I bailed on band-limited oscs for this current project of mine. I wanted the filter to actually hit the RAW osc, no matter what the note. I'm trying to sound as analog as possible. That's actually more important to me than matching the 303.

You'll end up sounding more like the 303 than I will, because you care about matching it more than I do.

That's the great thing about this whole project, to me. All of us (you, me, Robin, mystran, and anyone who starts with Robin's code) will end up with different synths because we will make different trade-offs and have different areas of exploration and pickiness.
Last edited by mistertoast on Sat Sep 19, 2009 4:33 pm, edited 1 time in total.
Swing is the difference between a drum machine and a sex machine.

Post

antto wrote:not sure, but i'll have the same problem, because my sawtooth is pretty much like yours (only that it's bandlimited)

btw, i was thinking on optimization of my synth
i was going to shut down the oscillator when there is no AMP envelope (when it's zero) to save CPU, but only for realtime "cheap" processing (because it will make difference with the filter

then i figured, i can still run the osc during the "silent" gaps between the notes, but without reading from the tables, just a pure mathematical saw that roughly looks like the bandlimited one (the filter doesn't mind the aliasing)

the osc will still keep cycling it's phase (i find this important) and the filter will still resonate while the synth is silent (this IS important)
Yeah, you can keep the phase running (like when you make a special osc for osc sync) all the time. It's just an add and some kind of wraparound (an if, or a modulo or an and).
Swing is the difference between a drum machine and a sex machine.

Post

floor ;]
...
omega = freq / sampling_rate; // erm, this is always done via reciprocal, no division here
phase = phase + omega;
phase -= floor(phase); // keeps it in the range 0..1.0
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post Reply

Return to “DSP and Plugin Development”