MIDI arpeggiator?

Hello,

Is it possible to program an arpeggiator in .lua for the E1? If not, it would be a really good feature.

We also can imagine other “MIDI FX”, but this one is the most important in my opinion.

Thank you.

3 Likes

Technically, I think it’s possible to implement this in LUA, but it will require a fair amount of scripting.

It might be more feasible to use a third-party arpeggiator (eurorack module or MIDI plugin) and control that with the E1. But that highly depends on your use case.

Thanks for your response.

The best option would be an integrated arpeggiator or something that we could call quickly to integrate into a preset page.

The amount of work to create one from scratch and handle all the usual needs would take a tremendous amount of time for (IMHO) little gain. As @Mint-Gecko pointed out, there’s so many excellent hardware and software arpeggiators and sequencers out there with all kinds of features that would be better to use/integrate.

I don’t think most folks are approaching the E1 as a MIDI FX/processor type of box. Rather, it excels at providing a great UI to things that are otherwise difficult to edit or use in real time.

Part of the challenge is that there are no higher-level abstractions to make development of something like that easier. If you wanted to add skipping/pausing of steps and racheting (for example), you have to manage all the low-level logic and changes to the clocking or working the interrupt timing and buffering yourself.

Again, it certainly can be done, but it would have to be a dedicated labor of love to take on that task. It’s not something anyone can knock out in a weekend.

2 Likes

You’re completely right. Nowadays, arpeggiators are often part of the MIDI keyboard itself. And for the MIDI FX box, or step sequencer, hardware like Hapax or Polyend Play are very good in that matter. Maybe I have to split my needs and choose hardware to meet specific ones.

Okay, I understand that it’s complex. I just expected maybe one or two native/user-friendly features in the side panel editor (conditional faders, MIDI LFO, MIDI envelope, transfer functions, etc.) in addition to sending MIDI messages (even if that’s already a huge amount of work, I admit).

The focus was a MIDI controller that was able to handle simple note/CC/NRPN messages as well as complex sysex dumps to and from external hardware.

For this purpose, it is the best thing I have used by far. I’ve been messing around with MIDI since the late 1980’s and this is a dream box for that use.

Industrious users in the community have extended the possibilities far beyond the original purpose and this has also been very cool.

But, it does require user engagement to get the extra functionality implemented.

1 Like

I am, that’s the primary reason I got it, to do programmatic MIDI manipulations on the fly.

That said timing based stuff is always a pain and I’ve focused more on event driven actions so far.

2 Likes

I completey agree and I am aware of that. This is why we are discussing in the FR topic.

Do you have something to share with the community?

@NewIgnis made amazing stuff. He was presenting it as the Superbooth 22 with his Korg NTS-1. I made a few presets for generative sequencing.

Electra has been designed to be just on the edge of a musician’s tool and a nerdy device. I grew up during the Atari times and the device reflects that. I think anybody who is willing to get their hands dirty with Lua, can invent quite unique midi processing presets. The timer and transport Lua libraries are aimed towards MIDI tempo related applications. And as @Mint-Gecko mentioned in the other thread, it is important to be aware of the time constraints that the device offers.

3 Likes

Thanks for your reply, Martin.

@martin I’m experimenting with you new arpeggiator preset

could it be function reconfigureIoPorts() is not always being read? I’ve checked and saw that when I’m changing the input channel to for instance 6, then ChannelIn remains at 1, and thus disregards all offered notes. I’m reviewing it on Mk1

EDIT it seems I can change it with one increment.

But I love it very much. Would like to try that the notes ‘stick’ while you hold the sustain pedal, so that when you release the pedal that particular arpeggio keep playing, while other notes can be played over it. And that , instead of the ‘release’ button you can toggle 'HOLD" out or in with Modwheel value 127.

1 Like

I am travelling and I have mk2 with me only. I could not test it on mk1 yet. I will look that the port/ channel changes. There is a bit of functionality that prevents hanging notes when there is a note playing. Possibly, something is not right there.

EDIT:
Channel settings works ok on mk2. Will test mk1 when I am back home.

1 Like

also, I think you should try things out on mk2 too :slight_smile: The beauty of the arpeggiator is that you can run it on background, while you are using another preset for tweaking the sound. That is not possible on mk1.

1 Like

I have Mk2 issues I need to verify. For now I still like programming on the Mk1 because it forces me to be efficient in coding. That way I learn a lot.

But I must admit, the style of programming you applied to this arpeggiator is lovely! It makes reading it a pleasure. Especially the way you applied names to the parameters.

Martin, I see you use transport.onClock in the lua of the Arpeggiator.
But I see in the documentation there is also midi.onClock.

Is the latter callback still valid in current formware?

both functions are valid and actually identical. I used the transport here as it gives me an option to easily enable / disable the callback with transport.enable() and transport.disable()

1 Like

Can I ask a noob question? Can somebody help me understand how it works? I load up the preset and in the IO Config I leave it as it is. Then in Logic, I load a AU plugin, I edit a chord of two bar length (mimicking myself hold the chord down on a keyboard) and set

  • MIDI IN Port: Elektra Port 1
  • MIDI IN Channel: 1
  • MIDI OUT Channel: All

However, I get no arpeggiator playing.

CleanShot 2024-05-03 at 00.25.38