Announcing rytm: The first MaxMSP external for Analog Rytm!

The long awaited (for some) MaxMSP object for controlling Analog Rytm with sysex messages is here! :partying_face:

For readers who are not familiar with MaxMSP

MaxMSP is a visual programming platform which makes audio related programming accessible to many creatives. It also powers the Max for Live devices you may have used in Ableton Live.

An external is a third party object which could be used in MaxMSP extending the tool set of the MaxMSP programmer.

Being able to communicate with rytm through sysex with a MaxMSP interface would allow creatives who are not software engineers to build useful patches or Max for Live devices for you to use in your workflow.

For readers who are familiar with MaxMSP

Please give it a test run! :slight_smile:

I don’t own a MK1 so I only tested this on MK2 but theoretically most of it should work with MK1 also.

Beta testers are really important for:

  • Refining the UX of the object by refining the API design.
  • Improving the documentation.
  • Finding the relevant usecases so I can develop it further to cover those.

The external is very comprehensive and heavily documented but still not complete. I’ve been busy with rytm related development for over a month now and need a break so I left the last parts for later :slight_smile:
In the beta:

  • You can not parameter lock or set machine parameters.
  • Few minor rarely used rytm functions are not exposed.
  • You can not save or load projects to the external.
  • You can not set the sysex device id with the external yet so it will currently only work with a single device.

but a lot of functionality is there and ready for you to use.

I hope you’ll make great use of it and make interesting patches or devices :sparkles:

For readers who are software engineers

Please read the contributing section.

Notes

  • This external would only work with Analog Rytm Drum Machines running FW 1.70.
  • It will not work with any of the other Elektron products.
  • This is not an official release from Elektron and has no connection to the company. It is a third party development effort.
  • Elektron didn’t publish their sysex documentation and do not officially support it. This external is built upon the reverse engineering efforts from the community.
  • Yes a Pure Data external can be made with not so much effort since it uses a similar API to a Max external. If the need arises I can make it some time later.

Wrapping up

This external is powered by rytm-rs which you can get familiar here.

The history of the rytm sysex discussions could be viewed in this thread.

In these kinds of posts, I’d also want to appreciate the work of a few people in the community which have contributed a great deal to sysex reverse engineering efforts. You may check them here.

For issues, bug reports and usage questions you may use this thread or github issues.

For feature requests or design discussions, I’d suggest that you open another topic and tag me if you see fit.

I hope you find it useful and have a great christmas and upcoming new year :sparkles:


Ah, if you read it this far here is a MaxMSP patch for you if you don’t have christmas lights already.
Instead you can use your rytm :wink:

rytm-christmas.maxpat (32.5 KB)

26 Likes

This is crazy good thank you!

1 Like

Wow !!!
Will test in Max ASAP
Thanks so much….

1 Like

Sounds super interesting.
Can somebody tell me a use case?
Is it real-time?
Is it about UI automatization?
Is it Autechre meets Elektron?

Let me know how it goes!

There could be many use cases since now a person can know the state of Elektron at a time and modify it freely and at once. I can think of applying generative music techniques to the rytm so I don’t get occupied with it all the time through improvisational sessions for me but use cases may go far beyond that.

It depends on what you mean by real time. It uses sysex messages to communicate with the device. Sysex messages are rather low priority in the device.

Here is my empirical knowledge:

  • Query responses from the device is instant.
  • Sysex messages are large in size (bytes)
/// Pattern sysex response size for FW 1.70.
pub const PATTERN_SYSEX_SIZE: usize = 14988;
/// Kit sysex response size for FW 1.70.
pub const KIT_SYSEX_SIZE: usize = 2998;
/// Sound sysex response size for FW 1.70.
pub const SOUND_SYSEX_SIZE: usize = 201;
/// Settings sysex response size for FW 1.70.
pub const SETTINGS_SYSEX_SIZE: usize = 2401;
/// Global sysex response size for FW 1.70.
pub const GLOBAL_SYSEX_SIZE: usize = 107;
/// Song sysex response size for FW 1.70.
pub const SONG_SYSEX_SIZE: usize = 1506;
  • If you flood elektron with too many frequent queries or transfers it may queue your messages internally. Avoiding sending perpetual messages or queries of large quantity constantly below 750ms is not advised.

I think these are pretty relaxed constraints. It is not hard real time but you can use it in many real time cases.

The main subject is not about UI automatization but you can automate some parts of the UI with it. This is what the christmas patch does :slight_smile:

Yes, Autechre can meet Elektron with this tool! I hope they’d use it :slight_smile:

4 Likes

Excellently written post! Such a delight to read, especially when it shows that you have really thought about the different audiences. Keep up the good culture and work!

3 Likes

This is amazing! Will try over the xmass holiday.

One thing I ve wanted for long is utilitary: fix the gap between AR (and all other elektrons except for OT) that don’t have a CC for requesting parameter settings by a MIDI controller with endless encoders or motorized faders so that these can show the current values. With this Max external in between to do the interfacing it should be possible now, for AR.

2 Likes

Oh sure the external can do that easily.
What you need in other words is fetching the state of analog rytm.
This is perfectly possible for the external to handle.

Happy that it works for you, let me know how it goes and if you face any issues along the way.

1 Like

Just made a quick test, christmas.maxpat working here !
That’s encouraging !

2 Likes

This is good to hear.
Please give feedback when you can about your project it will help to improve the external :sparkles:

For your purpose probably you would
query kit or query kit_wb

Then use the many getters provided for it which also includes the getters of kit sounds.
Then map the data to your controller to update it.

You may safely do your queries with |metro 1000| and update your controller continuously every second.

Also keep the max window open while working errors are quite informative I put a lot of work into them :laughing:

3 Likes

Added to maxobjects.com db.
Max Objects Database

1 Like

Ah sorry I think this was meant for @dtr, I don’t know your usecase yet :slight_smile:

indeed !! the printed errors are a great help as they basically tell me how it should have been done.
That’s INCREDIBLE work you’ve done here…

2 Likes

Happy to hear that!
I think getting familiar with the output format is essential also to avoid bugs in your patch.
Just dropping it here to make things easier for all.

You’re welcome :sparkles:
Checking out your music btw (side tracking from the thread topic a little :slight_smile: ) it is definitely my cup of tea :heart_decoration:
Pretty nice track :clap:

1 Like

Oh man thank you so much! İt means a lot to me 🫂 yeah i used to work on that sound very much i wish i could find the project file for that track. Thanks 🫂🫂🫂

1 Like

By the way, out of curiosity did any of you got value out of this thing in the end?

Sadly I’ve been tied up with more urgent matters. I definitely intend to test out that Bcr2000-AR bridge idea when I can.

2 Likes