Firmware Mod Requests

Discuss mods, hacks, tweaks, etc.

Moderators: altitude, adafruit_support_bill, adafruit, phono, hamburgers

Please be positive and constructive with your questions and comments.
Locked
mux
 
Posts: 47
Joined: Sat May 28, 2005 11:28 pm

Firmware Mod Requests

Post by mux »

I don't see any other threads discussing this, but I think there are definitely some improvements to be had to the current sequencer. :)

I guess what it all comes down to is hardware capability - can the key interpreter handle modifier keys, like holding down one and hitting another? If so, we're in business.

Four mods I would *really* like to see on the x0x are:

- pattern rotate. hold down 'chain' and hit 'prev' or 'next' to rotate the pattern by single steps; ie, the pattern starts with the first note in the first step of the sequence, but after holding down 'chain' and hitting 'next' three times, the first note of the pattern is now in the fourth step of the sequence.

- pattern copy - not sure how this would best be implemented. might be just a new function of the 'done' key, if you hold down 'chain' and hit 'done', and LED blinks to ask you what bank and pattern slot you want to write it into.

- sequence transpose - while in edit mode, transpose the whole pattern up or down. not sure how best to do this, maybe hold down 'chain' and use the "d" and "u" keys?

- ability to switch from pattern write to pattern play without stopping the sequencer... I have zero idea how this would be done, or if it's even possible.

See, the problem is, I'm not a programmer... I've taken C classes way back in school, and I'm a Unix guy by trade, so it's not unfamiliar to me, but when it comes to actually writing code, I'm pretty useless.

Is anyone out there a fantastic programmer, just looking for projects? I love my x0xb0x, but I think the sequencer firmware is a little limited, especially coming from a FR-777 (*very* well thought out sequencer!). What kind of OS space is available in the x0x, are we pushing the limits of the processor, or barely scraping the surface of what the x0x sequencer could do? A close friend of mine is a very experienced user interface designer who's done a bunch of work for Clavia, and I'm a live-pa guy - add a coder to the mix and maybe we could push the little silver box to a new level. :)

Jonnay
 
Posts: 142
Joined: Thu Jun 02, 2005 12:28 pm

Post by Jonnay »

These are on my wishlist:

- Slightly erratic timing. Maybe even a user adjustable value? (I am not sure where that could be saved. perhaps the note value of Note 1 Pattern 8 Bank 16?)

- A reverse mode. Play the pattern in reverse. Hopefully without having to stop the sequencer.

The Pattern Rotate/shift... are you talking while editing the pattern, or while playing?

It is my intention to do a CVS checkout and look at the code. I'll get right on that after I am finished getting a clearer understanding of the x0xb0x, doing the overdrive mod, making the c0ntr0l app go and finish seeding the x0xd0x wiki with content.

Guest
 

Post by Guest »

Jonnay wrote:These are on my wishlist:

- Slightly erratic timing. Maybe even a user adjustable value? (I am not sure where that could be saved. perhaps the note value of Note 1 Pattern 8 Bank 16?)
I'm not sure what benefit this would have... can you explain better? Do you mean per-note, like a shuffle function, or offsetting each note in a sequence by a random value?
- A reverse mode. Play the pattern in reverse. Hopefully without having to stop the sequencer.
Totally. From the current step in the pattern, hit a key and the sequencer starts going backwards. Good one - idea for that below.
The Pattern Rotate/shift... are you talking while editing the pattern, or while playing?
Actually, I was thinking of step edit mode, but while playing would be awesome as well, maybe during pattern playback you could hit the 'prev' or 'next' buttons to rotate the pattern, or hit both of those buttons at once to reverse the sequencer...

Man. I have a show next Thursday, and I'm nowhere near ready for it - I'm currently taking all my SH-101 patterns out of my MPC and manually porting them into the x0xb0x sequencer, and it's *painful*! Like, most of the 36-or-so patterns are four or eight bars long, which means four or eight patterns in the x0x, chained together. Even though most of those patterns are very similar, I still have to input each note manually, instead of being able to write one pattern, copy it to eight pattern slots, and then vary each one slightly. Pattern copy is definitely the top of my list.

Hey, while we're at it - what about if while a pattern is playing back, if you hit 'done', that sets the loop point of that pattern, sets the 'done' LED blinking, and lights up the step of the pattern where it's looping - then if you hit 'done' again, the loop point resets to the original value.

Maybe all these ideas could be incorporated into one of the 'user' slots, making it a 'performance mode'...

mux
 
Posts: 47
Joined: Sat May 28, 2005 11:28 pm

Post by mux »

*sigh*. ^^^ that was me.

Jonnay
 
Posts: 142
Joined: Thu Jun 02, 2005 12:28 pm

Post by Jonnay »

There was an old thread awhile back about adding a shuffle to the sequencer, because someone thought the original TB-303 had it. LadyAda checked it out and came back with:
i had to ask what [shuffle was]...apparently this was caused in the original by the poor-quality of the RC oscillator of the original synth.

unfortunatly, we use a high quality (16.00MHz) crystal oscillator.

i assure you that adding shuffle is completely possible. basically, theres an interrupt thats twice for every 16'th note, which turns the note on and off. to add shuffle, just put in "delay_ms(10)" for a 10ms shuffle . or you can generate a random value between 0 and 9ms (for example), by calling "delay_ms(rand() % 10)"
So no, I'm not after shuffle, just slightly erratic timing like the original.
I'm currently taking all my SH-101 patterns out of my MPC and manually porting them into the x0xb0x sequencer, and it's *painful*
I haven't played with c0ntr0l yet, so I don't know how well it works, but it might make the job easier.

BANNED, the done loop sounds hella awesome.

I say screw putting it on a user slot. Make em part of the main firmware., these ideas all make the x0xb0x a true force to be reckoned with.

adafruit
 
Posts: 12151
Joined: Thu Apr 06, 2006 4:21 pm

Post by adafruit »

Jonnay wrote:There was an old thread awhile back about adding a shuffle to the sequencer, because someone thought the original TB-303 had it. LadyAda checked it out and came back with:
i had to ask what [shuffle was]...apparently this was caused in the original by the poor-quality of the RC oscillator of the original synth.

unfortunatly, we use a high quality (16.00MHz) crystal oscillator.

i assure you that adding shuffle is completely possible. basically, theres an interrupt thats twice for every 16'th note, which turns the note on and off. to add shuffle, just put in "delay_ms(10)" for a 10ms shuffle . or you can generate a random value between 0 and 9ms (for example), by calling "delay_ms(rand() % 10)"
So no, I'm not after shuffle, just slightly erratic timing like the original.

upon further verification, it appears that this is probably not true after all. anybody who can provide proof of it is welcome to...

mux
 
Posts: 47
Joined: Sat May 28, 2005 11:28 pm

Post by mux »

ladyada wrote:i assure you that adding shuffle is completely possible. basically, theres an interrupt thats twice for every 16'th note, which turns the note on and off. to add shuffle, just put in "delay_ms(10)" for a 10ms shuffle . or you can generate a random value between 0 and 9ms (for example), by calling "delay_ms(rand() % 10)"
Nice, ok, that's an excellent step towards a proper "shuffle" function.

Shuffle, in the traditional Roland sense, is the variable delay of every odd 16th-note step in the sequence, while all the even steps are unchanged. In, say, the MPC, shuffle is represented by a percentage - in an un-shuffled sequence, say, you have step one, step two, step three. With shuffle set to 50%, you basically get no shuffle; step two is exactly 50% of the way between step one and step three. With a shuffle of 60%, the second step is 60% of the way between step on and step three.

Here's a poor ascii art representation:

Code: Select all

(* = note, - = no note)
unshuffled:
*-------*-------*-------*-------*-------*-------*-------*

shuffled:
*---------*-----*---------*-----*---------*-----*---------*
Adding shuffle to a drum sequence changes the entire feel of it. Playing with the shuffle on a 909, it's immediately obvious where house music came from.. just a little bit of shuffle can turn a boring generic drum sequence into a groove that makes you shake your ass. :)

Roland made it really simple; instead of 50% thru 75% shuffle like the Akai MPC, the old 707/808/909 crew had six available levels of shuffle, ranging from none to lots. OTOH, the Elektron MachineDrum, arguably the finest x0x drum sequencer on the planet(*), has variable levels of shuffle per step! I would *love* to see shuffle on the x0xb0x - I personally really like the Roland method, where shuffle for a sequence is set by holding down the 'shuffle' button, then an LED over one of six buttons in the sequence lights up... picking one of those six buttons changes the shuffle setting. I didn't personally find the Elektron shuffle method to be musically useful.

See, tho, what you're talking about with erratic timing... I guess I don't personally see a value in that feature, but hey, that doesn't mean it's not valuable to you. I'm just wondering how it could be implemented if the machine is slaved to a MIDI clock...? I guess 10ms isn't that big a deal, even at high BPMs, so if you randomized the start and end point of the note by <10ms, maybe it'd be fine.

FWIW, the 303 never had a shuffle function, and I don't believe it was a crystal problem either. I wonder if it's a function of the DIN SYNC output on the 808 and 909... people often talk about the mystical vibe that those machines can have, maybe *they* have a slightly unstable clock driving the clock pin on the SYNC output?

Oh, btw - if we're thinking about doing a reverse sequence function during playback, it's probably worth doing two others at the same time, as found in the Doepfer MAQ 16/3 MIDI sequencer:

- pingpong: sequence plays through normally until it hits the end of the sequence, then plays backwards until it hits the start of the sequence, then forward again.

- random: play random steps from the sequence.

I'm particularly interested in the reverse and pingpong modes; as I understand it, slides are stored per-step, so reverse would not be a perfect reverse of the sequence, but rather notes with the slide set would slide to the note in the previous step in the sequence. Trippy!

(*: the elektron machinedrum is the ultimate x0x drum sequencer, but currently the ultimate 303-style bassline sequencer is the FR-777 or FR Moebius... there's no reason why the x0xb0x couldn't usurp that role. :)

evilxsystems
 
Posts: 406
Joined: Thu Jul 07, 2005 10:23 pm

Post by evilxsystems »

I'm a pretty good programmer and need shuffle timing...so I'll probably implement this, if nobody gets around to it before I get #113 built.

-jason

moogah
 
Posts: 186
Joined: Sun Jun 19, 2005 8:51 pm

Post by moogah »

Count me in for the code. I'm quite good in C and I understand thats what this is written with. I'm sure I can bring any feature thats possible to fruition. First, I need to get my x0x working tho.

On the list of things to add:
Pattern Play Mode: Forward, Reverse, Ping-Pong, Random (any others?)
Realtime loop setting
Shuffle
Patten copy
Patten startpoint offset

How about a 909-like flam? Not useful for your average pattern, but could be nice for weird Aphex Twin style loops

mux
 
Posts: 47
Joined: Sat May 28, 2005 11:28 pm

Post by mux »

Flam, interesting idea - I bet a flam on an accented note would sound cool, but I don't see any easy way to implement it. It would need to have the ability to mark a step in the sequence as being flammed... do we have any extra bits we could flip on/off per step, or are they all described? I'm downloading the source now, hoping it's well documented. :)

Ok - I put a lot of thought into this last night, and I think if we're going to start modding the OS, we should probably figure out some conventions. I'm thinking I'm going to do up a first draft design document (ie, future features and how they could/should work), and post it here for discussion and critique. I figure we should be able to get most or all of our feature requests into the OS without overlapping, even if they don't get implemented all at once.

I'll post here when I've got something written up.

Jonnay
 
Posts: 142
Joined: Thu Jun 02, 2005 12:28 pm

Post by Jonnay »

K, i've added all of this to the wiki. If you guys start hackin some code, feel free to create your own pages documenting ides, sections of code, or whatever.

also, if ive missed some items, or misinterpreted some, go ahead and change it:

http://wiki.jonnay.net/x0x/firmwarerequests

Mux, maybe you could document on the wiki? Easier to share/modify that way.

What exactly is flam? If it is a shortening of the gate, I can see how that might work without having to modify the synth section. Anything beyond that however....

kokoon
 
Posts: 165
Joined: Tue Oct 04, 2005 4:09 am

Post by kokoon »

flam = a few multiple shorter note hits (gate on & offs) instead of just one - i think flam is set per-tick.

i could have mixed it with something else though :oops:

moogah
 
Posts: 186
Joined: Sun Jun 19, 2005 8:51 pm

Post by moogah »

"flam = a few multiple shorter note hits (gate on & offs) instead of just one"

yup, thats it. It's a 2-stroke drumroll. I hadn't actually thought about how this would effect the gate time, thinking about it more I believe this would be a nice feature for more expressive loops. Accent and slide do this already tho...

User avatar
controlvoltage
 
Posts: 242
Joined: Tue Aug 09, 2005 12:17 am

Post by controlvoltage »

There is a feature I had really wanted... let me try to remember it...

Oh yes!

I am assuming the "User" A, B, and C modes are set aside for future expansion... I was thinking it would be absolutely key for live use, if one of them could be a mode that acts like Pattern Edit but is Sync'd to incoming MIDI clock.

Basically, so that you could have the sequencer running and slaved to your external MIDI host, but still have full ability to to edit pitch, slides and accents on a per-note basis. Additionally it would be nice to be able to switch patterns from memory while in this Sync Edit mode without stopping the clock (a la pattern[MIDISYNC]) but since this conflicts slightly with the UI for the EDIT mode, a creative workaround might be needed.

Any thoughts?

PS) Re: flam on an accented note... the accent voltage would build up even higher/faster than the normal "2 accented notes in a row" behaviour, could be very cool indeed.

Jonnay
 
Posts: 142
Joined: Thu Jun 02, 2005 12:28 pm

Post by Jonnay »

Pattern rotate and reverse during playback should be hella hella easy. I am not so sure about the flams, that looks a whole lot more difficult. The first problem that I am seeing is that note data is stored in 8 bits of data. The first 6 are the actual note, with slide and accent making the last 2 bits. A flammed note could be stored in the lowest range of the notes, because they don't seem to output the right voltage.

The second problem is the gate timing. do_tempo (in main.c) handles the playback of notes, but it only seems to be called every 16th note, so i am not sure how we would do a multi-pulse action here. I'll look deeper into this later.

Locked
Please be positive and constructive with your questions and comments.

Return to “x0xm0dz”