Open303 - open source 303 emulation project - collaborators wanted

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

Post

and i got another idea
let's try to figure a plain-text pattern format, which is consistent with the way the TB-303 works
it must be easy to read for a human, easy to program into a TB-303
also, it should be easy for parsing/generation/convertion (by software synths/programs)
rv0: i noticed how you write patterns here, it looks kind of good
i don't like the d#(UDAS) <- notation, could we probably have the pitches (keys) and the UDAS sepparate? or would that be confusing to 303-guys like you?
i imagine something simple like this:

Code: Select all

PM: c   C       c       f#  b       d#
TM: G   G   -   G   O   G   G   O   G
??: UAS DA      -   D   AS  U       -
i aligned the stuff to the TimeMode, otherwise i kind of lose it

now, about the (GO-) i guess it can be changed with something like (@o.)
@ = filled circle (Gate/note on, you know)
o = tied
. = silent/rest

also, maybe TimeMode should be written on the first line?
what do you think? i think having something like this would be helpful
i could write some batch-like pattern convertors, i currently work with my own NSP format (pretty human-unreadable binary data) and FreeBee(ABL) which is plain-text, but now it figures it would be "inconsistent" with a TB-303 (in other words - confusing)

or am i going off topic here?
Robin: say something, are you going to make a sequencer at all?
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

antto, if you didn't know, Ravi Shankar is a famous sitar player who introduced sitar music to the west, taking advantage of his influence on George Harrison. Totally kick-ass player.

Swing is the difference between a drum machine and a sex machine.

Post

I also have PW in my synth and have been experimenting with various speeds of PWM. For instance it's cool to change the pulse width the same way on every note.
Last edited by mistertoast on Sat Sep 26, 2009 4:02 pm, edited 1 time in total.
Swing is the difference between a drum machine and a sex machine.

Post

oh, well, sitar is way too out of the range of the 303.. ;]
mistertoast: yeah, you can actually achieve the different PW for different notes naturaly by adding a HP filter on the sawtooth right before you feed it to the tanh() (or whatever) shaper that shapes it into a "square"
this instead of the DC offset
i had that setup but i didn't try to make a guitar sound with it (now i'm using DC offset in the shaper)

EDIT: after i made that demo, i tweaked the distortion a little bit, and the synth, and used another pattern (an old one, which was intended for acid or something, but definately not for a bass-guitar-like..) .. which had some nice slides going on
i managed to get something that i *think* is called a slap-bass
and it sounds pretty guitarish to me ;]
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

antto wrote:oh, well, sitar is way too out of the range of the 303.. ;]
mistertoast: yeah, you can actually achieve the different PW for different notes naturaly by adding a HP filter on the sawtooth right before you feed it to the tanh() (or whatever) shaper that shapes it into a "square"
this instead of the DC offset
i had that setup but i didn't try to make a guitar sound with it (now i'm using DC offset in the shaper)
That's cool, but I meant changing the PW during each note, if I wasn't clear. Like start it at 50% and end it at 20% on every note.
Swing is the difference between a drum machine and a sex machine.

Post

Really eager for you next release, antto, by the way. Sounding great.
Swing is the difference between a drum machine and a sex machine.

Post

oh, that's interesting, tho, you could also do it with the HP filter, you'll need to modulate the frequency, all wierd ideas going on here ;]

yeah, it starting to sound great, only a few things are still annoying me out of my skin.. like the way the norma>accented slides sound (grrrr)

i also have that insane idea of redoing the whole GUI this time in 3D (well, probably orthographic, but i'll do nice materials+lights)
i first have to finish the DSP part (the circuit) then optimize here and there (and i have to stop changing/adding new stuff) and figure what new knobs/buttons there must be
but i'll probably have to make enough changes to the GUI so it'll be easier to redo it from ground-up
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

antto wrote: "Ravi Shankar sitar" <- haven't heard of that, is it some specific distortion or an instrument (eek)
haha no you couldn't be more far off, offtopic, but i mean this:
once got pretty close with a sherman fb
wouldn't say it is out of the 303 range, the only problem is the 303 is a monophonic instrument.

antto wrote: btw2: got another question about the sequencer
i am thinkering more and more about what to do - keep my old "modern" editing style, or switch to a 303-style..
i am afraid that having both at the same time won't work somewhere (probably the memory..)
so, here's my question:
you program a pattern, you enter the pitches first
you cannot enter more than 16.. that's the maximum steps of a pattern
actually you CAN enter more than 16.. if you enter A LOT more, you'll overwrite the 'first' notes again.. its cyclic and huge: that is related to how the memory is mapped. it think there are 64 positions,4*16.. that would explain why the max length of a chain is 4 patterns, 1234 and 5678 can be chained, but not 3456.. understand?
antto wrote: you can enter less, no problem..
let's say you enter 4 notes:
PM: c d# f e
at this moment, this doesn't mean in any way that the pattern is 4 steps long
now enter the time mode
TM: G O G
so, the pattern would be 3 steps long
a long C note to, then a D#, and that's all
the F and E keys will not be used, tho they're probably saved into the memory for this pattern
well yeah, they end up in the unexplainable cycle of notes :) somehow it works with pointers from each pattern to notearray index 1, 17, 33 and 49.. hope i'm making sense here.. this is an assumption, i should check it out later
antto wrote: now what happens if you edit the Time information of this pattern? (actually, can you do so, i'm not sure)
if you want to enter new TimeMode info for this pattern, without touching the pitches
TM: G O O G
because the O is a "tie" it won't take a "pitch"
yes, you'd get PM: c d#, TM: GOOG
antto wrote: so i guess the pattern will be a (3 times) long C note, then a D# again
Noo.. it will be just a long note C.. not "3 times", you are stuck in the rebirth paradigma
antto wrote: blah, i got confused myself already..
now if you add a slide on the first "C" key..
erm, slides are programmed per each note (in PitchMode) right?

i think i got lost now, will post this anyway
unless where noted, all your assumptions are correct.. you're not lost, you're starting to get it:)
if you add a slide on the c you wil get a nice long note with slide.. I will record some for you
antto wrote:and i got another idea
let's try to figure a plain-text pattern format, which is consistent with the way the TB-303 works
it must be easy to read for a human, easy to program into a TB-303
also, it should be easy for parsing/generation/convertion (by software synths/programs)
rv0: i noticed how you write patterns here, it looks kind of good
i don't like the d#(UDAS) <- notation, could we probably have the pitches (keys) and the UDAS sepparate? or would that be confusing to 303-guys like you?
i imagine something simple like this:

PM: c C c f# b d#
TM: G G - G O G G O G
??: UAS DA - D AS U -

i aligned the stuff to the TimeMode, otherwise i kind of lose it
yeah exactly how i write it down..
antto wrote: now, about the (GO-) i guess it can be changed with something like (@o.)
@ = filled circle (Gate/note on, you know)
o = tied
. = silent/rest
no, the GO stuff is great imo
first of all because it reads GO :)
second of all because @o. looks like shit, and G0- is much nicer .. the G stands for gate, so there's a reason for it
really dont like this suggestion

the "d#(UDAS)" might not be the best notation either, but it doesnt have a need for a fixed width font
and it is the easiest way of typing out patterns i have ever used myself (i 'invented' it in this very thread)
it might not read as easy, but it reads easy when you are programming it into a 303..
antto wrote: also, maybe TimeMode should be written on the first line?
what do you think? i think having something like this would be helpful
i could write some batch-like pattern convertors, i currently work with my own NSP format (pretty human-unreadable binary data) and FreeBee(ABL) which is plain-text, but now it figures it would be "inconsistent" with a TB-303 (in other words - confusing)


Why not XML?
Could be parsed and displayed any way the user wants.. You could transform it easily to any format you want

You know, I have made an XML standard myself a few years ago.. Lost all the stuff, but I have a printout of an example pattern (please not it is made to represent the exact contents of the 303, so there are things there you dont wanna care for):

Code: Select all

<patterns>
   <pattern location="B,2" bank="1">
      <timemode tripplets="no">
         <step length="1">
         <rest />
         <step length="2">
      </timemode>
      <pitchmode>
         <note id="A#" transpose="up" accent="on" slide="off" />
         <note id="B" transpose="down" accent="off" slide="on" />
      </pitchmode>
   </pattern>
</patterns>
and i have something similar for the track mode.. i made this for a pattern archiver in java, but never finished it

Post

btw i took this picture of a filled in pattern sheet:

on the first row it is 3 different patterns (to save space on the pattern sheet)

2nd row is a full pattern

Image

Post

"TM: G O O G
because the O is a "tie" it won't take a "pitch"
so i guess the pattern will be a (3 times) long C note, then a D# again.."

(PM: c d# f e)
i meant that the C (GOO) would be "tied" and will have a duration of 3 steps, the GOOG pattern would be 4 steps long actually
erm, i'm talking in "steps" as in "duration" not as in "memory" or something
not sure where i got it all wrong, i might just have misspelled something

i never knew XML.. i am thinking of a more simple plain-text format, that is easy to parse with plain C++ (no libraries or fancy STL/boost stuff)
i might try to write a pattern convertor in mIRC right now

ok, i agree about the GO- vs @o. thing.. you're right
but i _love_ monospaced (fixed-width) fonts
the c#(UDAS) notation is tricky (for me) to parse
that's why i suggested the UDAS to be written sepparately

one more question got into my head

what if the "last" note in the pattern is slided to the next (which happens to be the "first" one
.. or just "tied" <- which should have the same behaviour, only that the pitch won't be changed, and there won't be any Accent/Slide changes on the "second part" of the tied note (which happens to be where the first step is)
darn, not sure if you understand my question again

first, is it "legal" to have such a pattern programmed into the 303? (i think "yes" tho, who knows?)
then, i guess when you first play the pattern, the synth will play a "rest" as the first step, but when it comes to the last note (which is either slided or tied) everything's gonna be normal

i'm talking about something like this:

Code: Select all

TM: O G G G
PM:   c C f
??: - - - -

<or>

TM: G G G G
PM: d c C f
??: - - - S
ok, just as i had to wrote that, i figured that the second version might be different? it has a G and a "note" so it will probably play it right away, then it'll slide the last note to it
is that it? ;]
but the first version i guess it won't play nothing for the first step, the first time the pattern is played?
It doesn't matter how it sounds..
..as long as it has BASS and it's LOUD!

irc.libera.chat >>> #kvr

Post

@antto
about xml:
its great you know, every programming language has xml libraries.
xml patterns can be parsed, validated, autocorrected. etc
you could even make it so it opens in a webbrowser totally structured like a html page with layout.. the possibilities are great, and it's not that hard (i could do it after a knowledge refresh)
navigation in an XML tree is superfast, and beats textformat bigtime.

about the pattern input:
TM! OGOGO is illegal, but corrected by the 303:
if i enter TM: OOOG, I will get TM: GOOG

about slides and long notes:
TM: GOOG
PM: c(S), c(U)
the slide will only be heard in the last part of the pattern;.. should record, computer down again so maybe later

Post

I'm 100% in favor of XML, except where it's possible to use JSON. I prefer JSON, but XML is my second choice. Either is much better than an ad hoc text format, in my opinion. And there are nice small JSON parsers, and pretty small XML parsers, in source code many places.
Swing is the difference between a drum machine and a sex machine.

Post

just for the record, this is how i made the track mode xml format:

Code: Select all

<tracks>
   <track location="1">
      <bar pitch="c#" source="B,2" />
      <bar pitch="c#" source="B,3" />
      <bar pitch="c#" source="B,1" />
      <bar pitch="c#" source="B,3" />
      <bar pitch="c#" source="B,4" />
      <ds />
      <bar pitch="c#" source="A,2" />
      <bar pitch="c#" source="A,3" />
      <bar pitch="c#" source="A,1" />
      <bar pitch="c#" source="A,3" />
      <bar pitch="c#" source="A,4" />
   </track>
</tracks>
the ds tag is for the D.S. sign, view manual, advanced 303 programming ;)
no actually it is a pointer that you can go to anytime in the track, in realtime
very handy feature
e.g.: you can put the D.S. on a pattern with full slide (so it fades out).. if you keep tapping the D.S. in playback, it will fade out untill you stop tapping it...

oh, i will not claim my xml tag choice/structure is excellent, i wrote it all down during a train journey.
its confusing because normally DS is tied to a bar. (and so is DC = the end of the pattern
i know, 303 lingo is confusing


btw antto, if you put a slide on the last note, it will slide nicely to the next pattern
i have posted an example here earlier: son_slide.ogg .. if you missed it, its still online.

Post

Why would modifying the highpass filter be the same as changing the duty-cycle of a pulse width?
Swing is the difference between a drum machine and a sex machine.

Post

mistertoast: if you can, load SynthEdit (or anything similar) and input a sawtooth/ramp oscillator into a 1 pole HP filter, and watch the output
look where the zero crossing is, that's where your pulse middle is gonna be after you put it thru the tanh() shaper

because you got a HP filter, this midpoint will change depending on the oscillator frequency, and on the HP filter frequency too

rv0: i guess if i am able to do a 1:1 clone of the sequencer (pattern programing and memory stuff) i won't be able to have some of my modern editing tools, like shift-the-whole-pattern-left/right, randomize-accents, randomize-slides..
that's sad..

this XML thing, it has too many words/tags, my own NSP format just takes 41 bytes space! (and 8 of them are for a silly header, which can be ignored)
the XML thing still looks like it needs monospaced fonts to look OK (tho, most programing languages do)
i still find it hard to understand, i've never been deep into web-programing
it also looks hard for a human to open up a text editor and write down a pattern in this format (he has to write the tags and stuff)
this is why i suggested something really simple, no additional <>() chars, no =
but it seems there are more things in the 303 that make up the pattern/track
damn
this whole idea was stupid, i'll leave it
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”