Arpeggiator that can play multiple arpeggios simultaneously

Hello! I’m working on an arpeggiator project that is meant to play a one-shot 3 note arpeggio for every note received. If a new note is played while an arpeggio is currently executing, the project should allow the 2 arpeggios to play simultaneously (with the 1st arpeggio continuing to execute and the 2nd arpeggio beginning). My project currently achieves this using 2 different timers, each with its own set of global variables. 2 arpeggios can play simultaneously but not yet 3. I would ideally like to be able to play an unlimited number of arpeggios simultaneously (although realistically, 4 is the max that would be played). I would also like to rework the project to reduce some of the redundancies in the code (e.g. the independent Timers and global variables for each arpeggio). Is this possible?
Arpeggiator.bmtp (4.1 KB)

If the timing is the same, you can use the same timer, and use multiple global variables to control sending of multiple notes. This type of thing can be a bit complex for what you are describing. I’ll peek at your project to see if there is some way that makes more sense.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hi @Declan.Diemer ,

Try the attached.

The arpeggiators all use the same timer, but the starting notes are different for each.
I use a bitmap variable ‘ta’. To determine which arpeggiator notes fire.

Bit 1 for the first, bit 2 for the second and bit 3 for the third.
The incoming note pressed toggles the bit of the given arpeggiator on or off and the other translators only fire if their arpeggiator bit is set. If ta==0 then we kill the timer and send and all notes off message.

For me I used the following aliases.

image

You can learn more about aliases from this tutorial.
Arpeggiator-Steve.bmtp (9.9 KB)

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz

Hi Steve, thanks for responding so quickly. I’m still taking some time to study your edits to the project and learn how these bitwise operations work. I like your approach with using only 1 timer and I think that’s going to help take this program to the next level. I am experiencing some buggy behavior with the Arpeggiator-Steve.bmtp project and I think there may be a disconnect with regard to the program’s intended behavior.

I made a quick video comparing how 2 overlapping notes are arpeggiating - first demonstrating the expected behavior using my original Arpeggiator.bmtp project, then with the Arpeggiator-Steve.bmtp project. You can hear that using Arpeggiator-Steve.bmtp, the arpeggios play simultaneously at some points but it also seems like sometimes new arpeggios kill the previously played arpeggio. Then the final note plays an infinite arpeggio instead of a one-shot 3 note arpeggio. The goal is to get the expected behavior from the 1st half of the video and then add a 3rd simultaneous arpeggio into the mix:

FYI my routing here for both tests in the video is: IAC Driver Out of Ableton → BMT Input = IAC Driver Bus 1 → BMT Output = Bome MIDI Translator 2 Virtual Out

Hi, yes this was for demonstration purposes only. You might need to play around with it a bit. All arpeggiators run on the same count so if you have overlapping notes, then you might get odd behavior. The timer only stops when there are no arpeggiators running. Also, when turning them off, there might be stuck notes until all get turned of when we sent and all-notes-off message. Not all devices understand this so you might need to create a timer that iterates through all notes individually turning them off one at a time.

Hopefully my sample will help guide you on the right path.

Steve Caldwell
Bome Customer Care


Also available for paid consulting services: bome@sniz.biz