Open303 - open source 303 emulation project - collaborators wanted
-
- KVRAF
- 3404 posts since 15 Sep, 2002
"and also, the TB-303 gets detuned"
Have you measured the detuning yet? Is that something we want to model, philosophically or practically?
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.
- KVRAF
- 2569 posts since 4 Sep, 2006 from 127.0.0.1
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)
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
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
- KVRAF
- 2569 posts since 4 Sep, 2006 from 127.0.0.1
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
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
- KVRAF
- 2569 posts since 4 Sep, 2006 from 127.0.0.1
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 ;]
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
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
-
- KVRist
- 161 posts since 15 Jun, 2009
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
-
- KVRAF
- 3404 posts since 15 Sep, 2002
Hehe. So you could actually drive a bunch of old synths, right?rv0 wrote: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
Swing is the difference between a drum machine and a sex machine.
-
- KVRAF
- 3404 posts since 15 Sep, 2002
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.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 ;]
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.
- KVRAF
- 2569 posts since 4 Sep, 2006 from 127.0.0.1
was that question pointed at me? ;P~ (i didn't understand)rv0 wrote: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
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!
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
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
-
- KVRist
- 161 posts since 15 Jun, 2009
yeah, and vice versa, use analog sequencers to control the software 303.mistertoast wrote:Hehe. So you could actually drive a bunch of old synths, right?rv0 wrote: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
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
sorry, i'm always ful of ideas
-
- KVRist
- 161 posts since 15 Jun, 2009
uhm no it was totally unrelated to the ongoing conversation.antto wrote:was that question pointed at me? ;P~ (i didn't understand)rv0 wrote: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
unrelated idea...
-
- KVRAF
- 3404 posts since 15 Sep, 2002
@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):

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?
This is currently my ramp oscillator (actual code):
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?osc0ramp = 1.0f-(2.0f*(float)tb_phase0);
//(tb_phase0 is a double in range 0-1)
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.
- KVRAF
- 2569 posts since 4 Sep, 2006 from 127.0.0.1
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)
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
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
-
- KVRAF
- 3404 posts since 15 Sep, 2002
@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.
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.
-
- KVRAF
- 3404 posts since 15 Sep, 2002
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).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)
Swing is the difference between a drum machine and a sex machine.
- KVRAF
- 2569 posts since 4 Sep, 2006 from 127.0.0.1
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
...
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
..as long as it has BASS and it's LOUD!
irc.libera.chat >>> #kvr
