So I've been looking at the source code trying to figure out how to implement swing time on the x0x. Does anyone have any brillant ideas before I get started? Right now the processing of events in the main while loop is basically locked into sixteenth notes...although I'm pretty certain the clock resolution would support good timing at higher note resolutions. Seeing as I normally write video games and not sequencers, what would the best way thing be to implement swing time? Increasing the frequency of the "event handling section" or adding some kind of adjustable delay before offbeat notes are sounded? Anyway...just looking for ideas before I start monkeying around
-jason
It don't mean a thing if it ain't got that swing...
Moderators: altitude, adafruit_support_bill, adafruit, phono, hamburgers
Please be positive and constructive with your questions and comments.
-
- Posts: 406
- Joined: Thu Jul 07, 2005 10:23 pm
-
- Posts: 186
- Joined: Sun Jun 19, 2005 8:51 pm
-
- Posts: 406
- Joined: Thu Jul 07, 2005 10:23 pm
-
- Posts: 406
- Joined: Thu Jul 07, 2005 10:23 pm
ok here is a demo pattern first unswung...then with some swing...I'm not sure how well it's going to sync up to midi...I'll keep people posted....currently I'm controlling the swing amount globally with the previous and next buttons in pattern play mode, but it would be nice to save the swing information in the pattern....
http://www.evilx.com/swung.mp3
http://www.evilx.com/swung.mp3
-
- Posts: 406
- Joined: Thu Jul 07, 2005 10:23 pm
-
- Posts: 47
- Joined: Sat May 28, 2005 11:28 pm
wow, that sounds great!!
keep it up, it definitely sounds like you're on the right track. I'm dying for swing too.
Actually, I just implemented swing on my Nord Micro Modular in an interesting fashion... I used to use a pattern on my MPC sending a C4 note at the start of every bar, then used a 'note detect' module in the Nord, sending the gate out of the note detect module into the 'reset' input of every sequencer module. Now I'm sending a C4 every 16th note, and a C#4 at the start of every bar, and two note detect modules... the C4 steps the sequencer forward, the C#4 resets the sequencer. The benefit is... if I swing the sequence, the Nord sequencers swing right along with it.
keep it up, it definitely sounds like you're on the right track. I'm dying for swing too.
Actually, I just implemented swing on my Nord Micro Modular in an interesting fashion... I used to use a pattern on my MPC sending a C4 note at the start of every bar, then used a 'note detect' module in the Nord, sending the gate out of the note detect module into the 'reset' input of every sequencer module. Now I'm sending a C4 every 16th note, and a C#4 at the start of every bar, and two note detect modules... the C4 steps the sequencer forward, the C#4 resets the sequencer. The benefit is... if I swing the sequence, the Nord sequencers swing right along with it.
- brandon daniel
- Posts: 160
- Joined: Sat Mar 12, 2005 12:46 am
-
- Posts: 150
- Joined: Wed Oct 26, 2005 3:46 pm
how are you implementing this? are you modulating the clock tempo? typically, swing is implemented by latching every other 16th note onto a late clock tick. midi = 24 ppq, that's 6 clock ticks per 16th note, giving 5 possible (positive) swing values. it should also be possible to swing those notes early for another 5 (negative) ticks. now, i know nothing about coding, so i can't be the one to do this, but that's the conceptual basis of the swing in the 707.
that sounds great. it's true, swung din clock out would be a neat function for swinging 808s and 606s. oh and 303s too.
that sounds great. it's true, swung din clock out would be a neat function for swinging 808s and 606s. oh and 303s too.
-
- Posts: 406
- Joined: Thu Jul 07, 2005 10:23 pm
I implemented it by doing a controllable fixed-time delay (from 0-256 milliseconds) on every other 16th note. This was due to the fact that the firmware is written to only process note events twice per 16th note, basically a note-off event handler and a note-on event handler. The consequence of doing it this way is that the tempo drops by 8 x whatever the swing delay is. This is why it imposes swing on whatever it is slaving because it delays sending midi clock signals too...it's fine for working with synths, but trying to sync up a sampled loop to it would be hellish, also it's not coupled to the tempo so if you changed the tempo you'd get a different swing amount. Anyway it was just a quick fix, because I wanted to hear my x0x swung...and I didn't feel like completely rewriting the timing & note handling code to deal with the finer note resolutions required for implementing swing time, but that's the obvious thing to do. I'll see if I can come up with a clever way to force it into 707 style swing by offsetting which clock pulse it processes notes on...
-jason
-jason
-
- Posts: 406
- Joined: Thu Jul 07, 2005 10:23 pm
ok I latched the swing onto a variable clock pulse, so now it keeps time properly, but the swing options have dropped to 1-5 pulses...like the 707...sounds pretty good though....the only problem right now is that it sometimes screws up the midi sync if you adjust the swing amount while it's playing, but I just need to adjust it to buffer the input until the loop starts again. I'm in the process of getting it to swing in midi sync mode...which is what I really need...but if anyone is dying for this feature now let me know and I'll post the .hex
-jason
-jason
-
- Posts: 47
- Joined: Sat May 28, 2005 11:28 pm
I'm interested in hearing the output!!
I was kinda hoping there could be 16 levels of swing... that'd make it really easy to implement the interface, maybe just like hold down a button and have one of the 16 steps show which of the 16 levels of swing is in use... just like the TR-707.
I'm greatly looking forward to this.
I was kinda hoping there could be 16 levels of swing... that'd make it really easy to implement the interface, maybe just like hold down a button and have one of the 16 steps show which of the 16 levels of swing is in use... just like the TR-707.
I'm greatly looking forward to this.
-
- Posts: 406
- Joined: Thu Jul 07, 2005 10:23 pm
-
- Posts: 406
- Joined: Thu Jul 07, 2005 10:23 pm
ok...here's a demo of the new swing
http://www.evilx.com/swung2.mp3
first unswung then increasing swing values 1 ->5 , then tweeking the tempo knob with the swing set at 2.
-jason
http://www.evilx.com/swung2.mp3
first unswung then increasing swing values 1 ->5 , then tweeking the tempo knob with the swing set at 2.
-jason
-
- Posts: 406
- Joined: Thu Jul 07, 2005 10:23 pm
ok I got MIDI swing working now...but the only problem is there are only 3 swing values now...including off...this is due to how MIDI sync is being handled...I can also swing DIN sync the same way...if people are interested I can make a user mode that implements the forced swing clock for slaving other devices...or I can post the .hex as it is....but anyway here is a demo of the midi sync swing, I'm gonna try making more values for this but it's already good enough for my purposes...
http://www.evilx.com/swung3.mp3
http://www.evilx.com/swung3.mp3
-
- Posts: 150
- Joined: Wed Oct 26, 2005 3:46 pm
c'mon drew!
the 707 only has 5 swing values (it's been too long for you!), based on the 24 ppq midi clock resolution. to get 16 levels of swing you would need at least 64 ppq.
greg
the 707 only has 5 swing values (it's been too long for you!), based on the 24 ppq midi clock resolution. to get 16 levels of swing you would need at least 64 ppq.
greg
I was kinda hoping there could be 16 levels of swing... that'd make it really easy to implement the interface, maybe just like hold down a button and have one of the 16 steps show which of the 16 levels of swing is in use... just like the TR-707.
Please be positive and constructive with your questions and comments.