Syncing Digitakt Pattern Changes with Event Processor

I’m trying to get my Digitakt to change patterns immediately when it receives a Program Change, so that it is in sync with all my other gear when they all receive a Program Change from my current master sequencer, a Squarp Pyramid. On the Pyramid the Program Change is set on each of my patterns and is sent immediately when a pattern begins to play. All my other gear is able to follow that Program Change perfectly but the Digitakt waits till the end of the current pattern before making the change. I know that you can adjust that delay to be lower, but only as low as two steps, which seems completely useless as the Digitake would then be out two steps every time you send a Program Change.

Regardless, after reading all the posts on this topic I could find on this forum and on the Squarp one I learned that the solution is to use a MIDI processor between the Squarp and the Digitakt. The idea is that when a Program Change arrives at the processor it should store the value of the Program Change, then send a Stop, then send the Program Change using the stored value (i.e. the same value originally sent) and finally a Start.

The MIDI messages happen fast enough (MIDI operates at a data rate of 3125 bytes/sec) that this should work seamlessly by stopping the Digitakt then changing the pattern immediately (which works when it is stopped) and then starting it playing again.

Two options for doing this kind of thing are the Bomebox and the MIDI Solutions Event Processor. The Bomebox is more power than I needed so I went with an Event Processor which there is lots of anecdotal evidence of people using for this task.

The thing is, I’m not having any success with it. I assume I am doing something wrong, but I majored in electrical and computer engineering, work as a software developer and have been using MIDI for over 25 years and I feel like I understand what I’m doing… I have no problem programming the Event Processor for all manner of other things, but for this particular task I am stumped. Clearly I must be missing something.

Has anyone on this forum successfully programmed a MIDI Solutions Event Processor for this specific task? If so, could you share how you did it?

Thanks!

The Squarp people seem keen to add a lot of features to the Pyramid - I think the best solution might be to ask them to add a delay setting to the Program Change events. If you set a negative delay of about 20-40ms the PC should be sent in time for the Digitakt to cue up the pattern and change when desired. Maybe this is already possible?

(The reason why it works like this from the beginning is that it ensures that the changes always occur in perfect sync, something that is not feasible with immediate pattern- via program- change without some sort of hiccup.)

4 Likes

I think possibly the best approach is to create a track on Pyramid with your PC commands embedded, not too difficult to do:

Select a track, set midi channel same as DT, leave PC setting blank, set it to patterns mode, set length of your first pattern - eg if you want the PC to occur after 8 bars set it for 8 bars, select step mode CC on Pyramid, scroll encoder to PC, set zoom so that you have 8 pages of 16 (assuming 8 bar length) then arrow to last page, on second from last step of page insert you PC command. Copy pattern as necessary and just adjust PC numbers accordingly (copying saves a lot of scrolling)

Then you just store these patterns in you sequences, remembering that if say you want DT to change pattern on bar 32 the Pyramid pattern should be placed to start at bar 24 (again assuming 8 bar pattern length)

Untested but it should work, you might need to experiment with settings.

2 Likes

I like the idea of being able to set a negative offset for when the PC set for a pattern on the Squarp is sent. I may submit that as a request.

I understand the reasoning you describe but I disagree that engineering it this way is necessary. Most other pieces of gear I have experience with, including Elektron’s other boxes, are all able to switch patterns immediately when they receive a PC while playing so that the PC can be sent with each pattern at its beginning which is by far the easiest workflow.

The reason the other devices are able to do this is because the data rate of MIDI is 3125 bytes/second and as it is only a few bytes of MIDI data to stop the sequencer, send a PC and then start it again it can all be done in a couple thousandths of a second.

The Digitakt should in theory be able to be modified through a firmware update to function like the Octatrack or Analog Four or Roland TR-8, or Pioneer SP-16 or any number of other devices that do this seamlessly. Elektron even claimed to have fixed this issue (in v1.07 I think) but it didn’t work and they haven’t addressed it since.

Anyway, just my opinion. Thanks very much for the input and the idea you propose for the Pyramid. It would ensure a wider range of gear would be able to be perfectly timed and synced with program changes from it. :wink:

Thanks, yes, this is exactly the route I have had to go down to have my Pyramid Sequences keep the Digitakt in check. I have a track dedicated to Digitakt Program Changes, and I use patten mode and have to set a PC on the last step of any pattern.

This accomplishes the goal, but I think it is a problematic solution for several reasons.

This forces you to couple information about the next pattern into the current one. This is inflexible because that pattern with the PC is then tied to that next pattern. If you don’t always want that pattern to trigger that next one you need to make multiple copies of the pattern with different PC at the end.

It also means that your patterns must all be the exact length that you want them to play in your sequence. If I have an 8 bar pattern that I want to repeat 4 times before changing to another pattern then the only way to do it in this scenario is to actually make that 8 bar pattern into a 32 bar pattern. All of this is far more work than just setting the PC on the info screen on the Pyramid for the pattern and having it work.

All my other gear works perfectly with the Pyramid, just not the Digitakt, and having to do a special workaround just for it, while totally possible, adds a layer of cognitive load that I would prefer to avoid if I can. This is why I’m trying to solve the issue with an event processor which would permanently make this a non-issue.

I’ve found several references to people who have solved this with the Bomebox and I should in theory be able to do the same thing with the MIDI Solutions Event Processor, but so far I’m not having any luck.

I’ll update this thread when I figure out a working solution or determine that this actually isn’t possible with the Event Processor, in which case I’ll get a Bomebox. :wink:

1 Like

I got the Event Processor doing exactly what I wanted. The code below programs the Event Processor to respond to any Program Change it receives by sending a Stop, then sending the received Program Change, and finally a Start message.

Unfortunately, even with the correctly programmed Event Processor the Digitakt still plays a full extra pattern length of the current pattern before moving to any pattern it has been sent a message to switch to.

I am considering going back to an Octatrack as when I had it I never had this issue. I really like the small format and other features of the Digitakt though…

I’ll first try a Bomebox to see if it will work with it, but I don’t feel too hopeful as I can see the MIDI being sent from the Event Box is what should work…

Here is the code for the Event Processor in case anyone else wants to try it.

    F0 00 00 50 28 00 F7
{ Clear All Settings - allow all MIDI events not specified below to pass through unchanged }

F0 00 00 50 28 02 00 00 02 00 7F F7
CF 00
FC
{ Setting #1: Map all Program Change events on MIDI channel 16 to MIDI Stop events. Continue to process settings  (control-click to edit) }

F0 00 00 50 28 02 01 00 02 00 7F 02 02 00 7F F7
CF 00
CF 00
{ Setting #2: Map all Program Change events on MIDI channel 16 to Program Change events on MIDI channel 16, with the incoming Program Change value mapped to the outgoing Program Change number. Continue to process settings  (control-click to edit) }

F0 00 00 50 28 02 02 00 02 00 7F F7
CF 00
FA
{ Setting #3: Map all Program Change events on MIDI channel 16 to MIDI Start events. Continue to process settings  (control-click to edit) }

This sounds horrible. All he wants to do is have his pattern on the Pyramid have the PC for the pattern on the Digitakt. Your method is some sort of Frankenstein song track which will won’t work when he’s writing individual patterns and will require redoing if he makes changes.

I’ve got 5 Elektrons they all work that way, they need a pc before the end of the current pattern to cue the next

I finally my pattern changes perfectly synced using the same method I outlined above but not with the MIDI Solutions Event Processor. I got it working by using Bome MIDI Translator Pro running on my computer. When I get the BomeBox I’ll be able to put the program I made for MTPro onto it and should be good to go.

It is odd that the Event Processor didn’t work. The MIDI being sent by it and by MTPro are identical but for some reason the Digitakt didn’t follow those messages from the Event Processor, only from MTPro.

I hope this thread helps others who are looking to have their Digitakt follow another sequencer’s Program Changes.

TL;DR Bome is the better way to go for Digitakt rather than MIDI Solutions.

3 Likes

Maybe slightly off topic but I cannot for the life of me get my Digitakt to change patterns in sync with my Digitone. I have both set with a pattern chain of 16steps and both with a maximum of 64steps. Without fail the Digitakt always changes patterns 16steps behind the Digitone. I have the Digitone as the master clock and both send/receiving program changes. Whats the deal? I have tried many other settings in the pattern settings page and nothing seems to work…

I’m not sure if it off topic. :slight_smile:

If you do some searching you will find a lot of people having a similar issue with the Digitakt changing patterns later than they expect. Elektron even issued a bug fix for that in firmware 1.07 (you can still see that listed as a fix on their site) but it did not actually get fixed.

I’m not sure if the pattern syncing between Elektron boxes happens with Program Change messages, but if it does then the best workaround I’m aware of is the one I’ve described above using a BomeBox to remap any Program Changes to have a Stop before them and a Start after them.

There is more than enough time in the MIDI stream for this to happen and not at all interrupt the flow. I really cannot understand why Elektron wouldn’t fix this themselves. It seems to me that they could fix this in their firmware with only a couple lines of code…

1 Like

Well I guess it’s both reassuring and upsetting that others are experiencing this issue. I found a temporary (or maybe permanent?) workaround by sending both the Digitakt and Digitone program messages from a MIDI controller. Hopefully they get around to fixing this. I sent them a bug report.

Been down this road…gave up.
I don’t send PC to DT.

I’ve now got this working with Bome MTPro and also with the MIDI Solutions Event Processor. I got in touch with MIDI Solutions and they suggested I insert a SysEx message after the Stop and another before the Start to see if that would help the Digitakt respond correctly. It worked. I’ve attached my Event Processor program if anyone with an Event Processor needs help with this.

I still may end up sticking with Bome if I can find a way to only conditionally do the mapping when the sequencer is playing as if the sequencer is not playing the Digitakt responds correctly already and I don’t need to be sending it a Start after every Program Change it receives. :wink:

Digitakt Incoming Program Change Fix.rtf (1.9 KB)

1 Like

Can you share the BMTP file? I have a BomeBox myself and am interested.