I'll have a look at the patch tonight. I have to work soon.
So far, the MIDI sync works as it should. I've added a [+ x] to the MIDI clock counter to fine tune the timing, so the beats of the Rhythmboy and Traktor are in sync.
The last bug I have to fix are some performance problems: When I switch pages (tracks 1-4 or 5-8) the redrawing of the LEDs causes the Rhythmboy to stutter for a moment. You can see how the beats are delayed, for example when you look at the result of the timer that measures the time between two beats. Usually it is around 125 ms for 120 BPM, but when I switch pages, the value drifts a lot for on second.
I've already tried to add small delays to the redrawing of the different tracks, but this didn't help. The redrawing only occurs of the MIDI output to the QuNeo (the LED output) is activated, else it doesn't stutter.
Do you have any idea how to reduce this stutter?
@rjp9: My setup basically is the following:
I have an Allen&Heath Xone4D mixer, which has an built in audio interface and some MIDI controllers. The mixer also sends a clock signal to sync up all decks and the Rhythmboy/QuNeo. The Xone is the main mixer, and the midi controllers control the first two decks in Traktor, which are normal decks to play tracks like usual.
The other two decks are set up as remix decks, which each offer 4 columns with 16 cells each (so 2 * 4 * 16 = 128 cells total), which can play one-shots or loops. These are controlled by the Rhythmboy.
My goal is to not only play normal tracks in Traktor, but to enhance them with my own samples and drums, and even do some live remixing by playing/looping non-electronic tracks on the first two decks and backing them up with my own drum loops from the QuNeo/Rhythmboy, to give my DJ sets a special touch that not everyone offers.
The Xone is the new component in this setup, until now I did all mixing in Traktor (on 2 normal decks) with my QuNeo. Now that I have this new mixer, which has enough buttons/faders etc. to render the QuNeo useless, I still want to use the QuNeo in my setup in some way. This is why I looked for step sequencers for the QuNeo and found the Rhythmboy. And the rest of the story happened more or less here.
I hope this answers your question...
Have you looked at my modifications to the rhythmboy? What do you think? Sorry for not commenting, I hope you still get what does what...
The samples in Traktor only trigger with the length of the note that comes out of the Rhythmboy, so especially for longer samples, the length should be high enough, something like 5000 ms.
But if the length of one note is longer than it takes to play the next note, the next note will not be played, or at least it seems like some notes are randomly skipped, whereas the chance to be faulty rises with the length:
10 ms -> everything fine, but even the base drum is just some ticktickticktick
5000 ms -> the base drum is a whoompf, as it should be, but is only triggered once per every few sceonds
So I need to make sure that the note length is always long enough to play the sample as long as it should (sample is over, or same sample triggered again), but still short enough to not disturb the triggering of the next sample. The problem is that we can't use fixed or calculated lengths, because sometimes the rhythm could not be absolutely straight, and we need the exact time at the moment the first note ist played, and then we don't know yet when the next note will be triggered.
Because of this I think it is better to concentrate on properly retriggering the notes.
Here's the modified patch, my modifications are mainly on the first layer (MIDI clock in, metronome, syncing "play" and "reset" with the clock), and on the track layers (the part you already made a screenshot from, adapted to the midiclock, the [send subdivision_track] part is only responsible for triggering the lights and thus is not that time critical).
Furthermore, I've flipped the rotaries upside down (the QuNeo sends volumes like a watch, 0 and 127 is at the top, not like a normal rotary, where both is on the bottom. I flipped this), and changed the output notes and ranges to work with Traktor.
Maybe I didn't not find the cleanest solutions, but at least it works.
Yep, it works as it should! Thank you for showing me the way!
Now the problem with the note length remains, but you said you maybe have an easy solution for that?
Oh, and one more thing, but this is only a detail:
I want the "reset" and "play" button only to trigger on a downbeat. I tried this by filtering the button signal through a [spigot] with the MIDI clock and [mod] and [sel 0] on the right inlet, but this doesn't work as intended, no signal passes through then. Do you have any idea? To be more exact, I want to store the "play" and "reset" triggers until the next time the [mod 24] from the MIDI clock is 0.
I'm pretty serious about getting this patch up and running. Until now, while discovering the patch and finding out how it works, I always discovered new problems that made me want to quit and go on without a step seqeuncer, but I think that now I have found all the "bugs" I need to get rid of to make this thing work with Traktor. And the idea of using my QuNeo, which would else be rather unused, in my actual setup is very tempting.
But, to be honest, I'm not that much into programming (I only know about pd for one week), and I think I could not program my own sequencer from scratch, at least in an acceptable amount of time and work. Plus, the Rhythmboy already has already 90% of the work I need done, and I'm a lazy person, in the techy meaning of lazy, which means not to do any work that is already done. For example, the story of this guy made me smile.
So yes, I'd love to fix the Rhythmboy, and put some work and learning into it, but I don't think I'd build a new step sequencer from scratch. Yet, I know that your help here already gave me a lot of ideas to work with, and I'm not one of those guys who expect someone else to solve the whole problem for me. I love to find my own solutions if someone points me into the right directions, which you already did, and my main goal is not a perfect program, but something that at least works as it should.
Now for the technicals: Yes, the Rhythmboy isn't polyphonic, but neither are the remix decks in Traktor. The remix decks in Traktor are multiple cells in multiple slots, that can be triggered by a MIDI command, and can be a loop or a one shot. So in other words, it's a very simple sampler.
Thanks a lot for you help! I think I understand where you want me to go, and I will look into it.
I found another problem with the interaction between Rhythmboy and Traktor that may or should be solvable, but right now it is big enough to make me stop going further.
The problem is as follows:
Rhythmboy outputs a certain note with a certain volume and length. This length is internally set to 125 ms. Traktor then plays every sample only an 8th of a second, which is okay for kicks and snares, but problemativ for longer samples like cymbals, rides or vocals.
If I set the length longer, to 5000 ms for example, to cover loooong cymbals and vocals, shorter notes won't get triggered properly.
I need to convince the Rhythmboy to trigger the note correctly, otherwise some sounds that should be triggered won't play in Traktor.
Setting the timing different and dependend on the triggered notes won't work, as one can only tell the time between two notes after the second note was played, and maybe the rythm is shuffled or not that monotone, so you can't just use the time of the two notes before. Rhythmboy really needs to send another note.
Maybe one workaround would be to send the notes always with a velocity difference of -1 (127, 126, 127 and so on).
What do you think? Is this problem solvable? If yes, how?
Otherwise it wouldn't make sense to dig deeper into the MIDI syncing bits.
PS: I already checked if Traktor treats CC messages differently, but they are time dependent, too...
This is the third time I rewrite this post, as I am digging deeper and deeper into the Rhythmboy, to understand how it works. And I am learning a lot.
Lesson 1: The Rhythmboy is deeply rooted into using [receive metro_set], which is a float number, and represents the length of a quarter note in milliseconds. Changing this is nearly impssible, so I need to live with that, and work around it.
Lesson 2: The sync between the Rythmboy and an external clock seems a bit jittery. When I use the bangs of the MIDI clock to trigger a timer, the value jumps the a lot, for example between 499.2 ms and 500.2 ms for 120 bpm (500 ms). When I raise [mod x], the accuracy rises, but also the inertia, meaning the timer will react slowly to suddenly changing bpm. When I lower [mod x], it reacts quickly, but the values jump like crazy.
So after trying a lot, I think it's time to do something else... I just got some kind of "sync" up and running, at least with the restraints mentioned above, and it sounds terrible. So, off to new projects! Thanks for your help anyways!