Question about a specific Midi Function Desire

I am thinking of getting a midihub and I want it to do one specific thing. I want it to listen to an incoming midi clock on one channel, listen to an incoming midi keyboard’s keypresses on another channel, and only update the output midi keypresses on specific divisions of the clock. This is a little like an arpeggiator in that all the notes are quantized to a clock, but without the note repeats and allowing chords to be played. Any feedback would be greatly appreciated, thanks.

Hi, Carson @warpigs330 and welcome to Midihub.

I can’t see any easy way to do this, because

  1. Clock messages are all the same – they don’t carry information like ‘beat 1 of 4’ in themselves
  2. It’s therefore the sequencer which provides this, presumably by keeping count of clock messages since a MIDI Start/ Continue command and knowing the time signature
  3. Midihub doesn’t have a sequencer & doesn’t have any knowledge of which beat it’s “on”

I can imagine a (rather clunky) workaround but I wouldn’t feel confident enough in it to sell you on the idea of a Midihub (lemme know if you want a longer description)

Definitely interested in a longer description. I am thinking that it would listen to the clock channel for transport information and clock, subdivide the 24ppqn of midi notes to 4ppqn, starting when the clock channel sends the start transport command, and only allowing the keyboard midi to update on the output on those 4ppqn beats.

I am also looking at the retrokits midi hub/processor and it allows you to write your own scripts for more advanced midi management, but the blokas one has a better selection of inputs and outputs, and for most tasks I would prefer the gui interface. Is there any way for us to write our own pipes to do more advanced midi processing or am I basically going to have to design my own midihub with an RP2040 if I want to get more advanced?

No. I recall from reading the forum that, back in the day, @Giedrius & @Pranciskus (they are Blokas) talked about the possibility of a SDK, but my sense is that idea was dropped and that Midihub’s capabilities will remain fixed to the latest firmware update.
Of their three devices, I’d reckon Midihub will remain the most “non-coder friendly”.




.

Definitely interested in a longer description.

I guess I’m not really sure what you meant by “only allowing the keyboard midi to update”. I originally took it to mean “only allow MIDI notes through” †
but
Now I look again, I get the sense that you want the patch to remember note_on’s until a certain clock then play them sync’d to that clock. What about note_off’s and notes played slightly late on the grid?



† I was thinking along the lines of a sync’d PWM LFO pipe sending a mapping back into to MH (via a “physical loopback”) to act as a gatekeeper.
If it’s more complicated like above, I still wouldn’t rule it out but I’d need an example grid drawing to be sure the problem I’m thinking of is the one you want solving!



PS. Did you know that Arpeggiator has a Chords type?

this shot…
Screen Shot 2023-05-27 at 18.30.59
…shows the outcome of playing 2 notes (ch16) with the arp locking them into 1bar timing (ch1)

(note the velocity is locked to the later note)

1 Like

Yeah, so basically I am thinking that the box would listen to midi messages coming in from the keyboard channel, basically store all the midi messages that came from the midi keyboard, but wait until every 16th note (or ideally other divisions of a clock, with the clock signal and transport commands coming from a different midi input) to actually send that data to the output.

The reason I am trying to do this is that I have various devices that have their own arpeggiator built in, but which does not quantize to a midi clock. The tempo is matched to the clock, but the arpeggiation starts as soon as you press a key, meaning that your timing has to be very good for your arps to be matched in time with a beat. I would like to only send midi updates on certain clock divisions so that the arpeggiator on the external device is triggered quantized to the beat.

All the MIDI messages (CCs/PBs?) or just note_on &off? Or do I assume that notes are being held for the ext.arps’s sake so noteOff’s don’t matter as much?
Can’t see any nice way of doing this, but will think on it.

As an aside, given that the screenshot above seems to show that MIdihub’s arp does do what you want, could you use that instead?

Yeah, really just the note ons and offs, and probably just the note ons are important. But yeah, that mode of the arpeggiator looks very promising. My only question is whether it sends the note-on data repeatedly like an arpeggiator, or just once for each key press, as I would want it to only transmit each key press once.

No, sorry, I meant using it as your arp instead of your external ones.

If I get time tomorrow, I might have a little play at getting the Arp to sync the note_ons in Chord mode then stopping the Arp briefly to ‘clear’ it[1], meanwhile routing the note_offs unencumbered via a 2nd line. That might work; never tried it before.

[1] or simpler, giving it dummy short Length pipe to restrict it to one series of note_ons

So the reason I want to use the built in arp on the devices I use is because I am using an Elektron Monomachine, and on it you can trigger multiple channels at once, each with different arppegiator settings. So one channel would be a bass drone with no arpeggiator, just playing the root note, one channel would be arpeggiating a certain pattern, and another a different arp pattern. The desire is to be able to press single notes or chords on the midi controller and have various voices interpret that information and play different variations of it to have a whole song that can react in real time to keyboard inputs, but still have things be quantized to a clock from a drum machine.

The only thing is that the monomachine doesn’t quantize the note on’s, so it makes performing with that feature a bit difficult.

OK, think we’re on the same page; my last two paras (“If I get time…”) are about getting Midihub to

  • take one or more note_ons
  • send them out (once!) sync’d to 1/16
  • send out note_offs as they’re played

There are other subtleties but they’re irrelevant if I can’t get the first bit to work nicely…

2 Likes

Thanks so much for the help! I am also considering looking into DIY midi processing, because I would also like to do things around sequencing program changes, so don’t put in too much work on my behalf, lol. But the midihub looks like it can do like 95% of the stuff I want to do so there is a good chance I will pick one up.

1 Like

I won’t. What I’m envisaging is quite simple to set up - Just know I don’t have the brain for it tonight.

I might message you tomorrow if all’s good asking for a .mid file for a proper test…

Cheers.

1 Like