Dynamic chord within dynamic scale from a single note

Hi. I’ve owned a Midihub for a little over a year but thus far have only needed it for basic merge, split, and message blocking capabilities. That alone has made it worth every penny. Today I finally have a use case that would require some of the more advanced capabilities of this thing - and am pretty excited about it, so cheers to that. Anyway - I have a need that would require heavier use of pipes but I’m not sure what approach would allow the most dynamic and performative results. Simplest way to put it is I’d like to sequence a polyphonic synth from a monophonic note source. Similar needs have been posted about, but to be clear, I’m not looking to just be able to play all the chords in a static scale. I’d like to yes, stay in scale as easily as possible, but I don’t necessarily always want a triad or whatever 7th of whatever degree. I also need to be able to change scales at most 8 times in a performance, but let me start over…

Exactly what I want:

Send the root note, and then produce at least 3 more notes on top that root while being able to control the interval / offset of each note via CC, such that CC value divided by 12 = chromatic offset (CC=11 would just result in the same note, CC=12 would be a semitone above, CC=24 would be a whole step). I believe this is all possible currently but am not totally sure how to achieve it. Keep in mind this is just the chromatic part of what I want. Let me get through this and then after that figure out how to keep everything in scale.

So thinking through this step by step, and using only 1 additional note for brevity:

// pass root through
IN A -> OUT A

// 2nd note in chord
IN A -> TRANSPOSE (midi map some CC# to semitones) -> OUT A

Seems straight forward, but this requires the controller be in range 0-11 if I’m trying to stay within an octave of the root. But I can’t be bothered to dial in values that specifically - I want to be able to sweep the entire knob in a relative way, such that 0 = 0, 127 = 11. But I’m not sure how to divide the CC by 12 (or linearly map the controller range of 0-127 down to 0-11). It doesn’t look like pipes can be applied to the CCs that are mapped to parameters, or do I have that wrong? Perhaps this is where virtual ports come in?

// pass root through
IN A -> OUT A

// controller in
IN B -> Rescale (0-127, 0-11) -> Virtual Out A

// 2nd note in chord
IN A -> TRANSPOSE (midi map to Virtual Out A which has already been scaled) -> OUT A

Does that make sense and is this how that could be accomplished? If so then I feel pretty good about my understanding - of course would not at all be surprised if there is a better way or even that I completely misunderstand this thing - like I said, this part of Midihub is new to me.

As for keeping the resulting transposition confined to a scale, of course I can shove a Scale pipe after the transposition, but AFAIK the Scale pipe is static, and I need to be able to change scale dynamically. And at this point I think maybe it’s good to just stop and address the above first, because my mind is going in too many different directions (e.g. can I duplicate my transpositions and configure things such that channel 2 notes go to minor scale, and channel 3 notes go to Phrygian, but then my monophonic source can’t change channels dynamically so…, perhaps I can use program changes to bypass all pipelines for scale A while enabling all pipelines for scale B…rabbithole)

Sorry for the long post - just wanted to be super clear about what I’m trying to achieve!

Hi Lokua,
I think I get some of what you’re envisaging, but there are few bits I’m not sure about.

Firstly, in the context of…

I’d like to sequence a polyphonic synth from a monophonic note source

…what does…

// 2nd note in chord
IN A -> TRANSPOSE (midi map some CC# to semitones) -> OUT A

…mean?

I’m confused cos “chord” suggests 2nd note at ‘same’ time as 1st,
but “monophonic” suggests notes separated by time.


Scaled Mappings
Midihub mappings are (currently) defined by the values coming into DIN/USB ports.
So Rescale internally won’t affect the mapping
If you can, it’s best to customise the range of your knob in the device.
If this is not possible, then the solution lies in
a. “a physical-loopback” or
b. 2 Midihubs!
(c. or postpone until firmware introduces “internal/scaled” mappings…)


but what do you want the knob to do? change the interval of a single note?
Or change an entire set of harmonies?
(This comes back to my lack of understanding; some of what you describe sounds like a knob changes just one pitch-shift…)


Scale pipe is static
The preset is, but each “degree” is mappable.
(AFAIK, the preset is just the Editor choosing a set of degrees for the device)

So imagine, hypothetically, you did have a 2nd “Mapping” Midihub, you could:

  • turn a knob (or better, hit one of a group of “Scale select” keys),
  • & have the “Mapping” hub Transform it into 12 different “degree” CC values
  • which then get sent to the “Playing” hub to customise its Scale Remap on the fly

again, with a bit of careful design, you can build this into one hub using a loopback


btw, you haven’t mentioned the Harmony pipe; in combination with Scale Remap it gives you a lot of scope

Two other notions to put a pin in, cos your evolving design just might bring them into play:

  1. Using a map to change a Virtual Out Destination - gives you a degree of dynamic routing within Midihub (a post on this from mid-2022. Ask me to dig it out if/when of interest)
  2. Using Dispatcher to route a sequence of notes



Rabbithole indeed. But which way to dig?!

Hey resonotter,

By monophonic, I mean single voice. In this context the sequencer (an Analog Rytm) can only send one note at a single time on a given track (and I am not interested in using more than a single track for this purpose). I’d like to take that single note, and stack 3 more on top of it, derived from that same single note, and forward this to a polyphonic synth. So the crude text visualization of the Midihub pipes would look something like (using midi note 60 in this example):

IN A (note 60) -> OUT A
IN A (note 60) -> TRANSPOSE (note 60 + (value of CC#1 / 12)) -> OUT A
IN A (note 60) -> TRANSPOSE (note 60 + (value of CC#2 / 12)) -> OUT A
IN A (note 60) -> TRANSPOSE (note 60 + (value of CC#2 / 12)) -> OUT A

^ that’s without scale quantization, which I might be able to live with.

Yes you are correct. Each knob represents a single pitch offset.

Judging from your reply, the scaled mapping part is going to be tricky. I’mthinking about the loopback option; certainly don’t want to buy another Midihub and am not going to keep hopes up for a firmware update judging by the fact the last update was a year ago (not meant as a slam by any means, again I’ve already gotten my money’s worth from this thing ;).

So from that, I’m thinking something like this will work for the “scaled mapping”

IN A (cc#) -> Rescale (0-127, 0-11) -> OUT A (looped back into IN B)
IN A (note#) -> Transpose (note# + cc# from IN B) -> OUT C (or whatever)

(of course I’d have to be careful to filter things to avoid feedback? leaving that out for brevity)

Going to keep pondering the rest of your reply - thanks for the ideas.

Wasn’t seriously suggesting a 2nd hub; just being exhaustive with your possibilities.
Late here now, but will read your reply more closely tomorrow a.m.

Meantime, if you want to on contact me about loopback, etc, feel free to do so here or via a message

1 Like

Yep. spot on. [except I think transpose +0 is equiv to CCvalue=64 to allow for -ve transpose]



3 successive Transposes from different instances of same note, not a mapped Harmonizer from one note?
If former, you then have a “chord” via notes overlapping? Are these Transpose pipes in different pipelines directed by say Dispatcher? Or same pipe and the CC val changes between each incoming?




PS. here’s the earlier link which discusses pipeline switching.
The patch uses a loopback to switch pipelines rather than set Transpose/Harmonizer, but the Rescale idea is there (plus a link about loopbacks). Also see this for setting up loopback mappings

1 Like

Yes. Each line is a single pipeline (was trying to mimic the UI in text form, somewhat). And yes the CC values would be (optionally) changing with each incoming note (I can lock all CC values on a per note basis in the sequencer and can also LFO any or all of the CCs which can lead to some generative goodness). I see what you mean about using a single Harmonizer. That of course would work and would be a much simpler to set up. My thinking about using Transpose instead is that it would give me the ability to also disable one or more notes on the fly. So in a performance I could start with all of them disabled, then say, bring in the 5th, and so on as I feel fits, rinse, repeat.

Thanks for the links :slight_smile:

I can lock all CC values on a per note basis in the sequencer and can also LFO any or all of the CCs which can lead to some generative goodness

aha!


You can do this in Harmonizer as well:

If two or more intervals are of the same value, only one note of that interval gets produced.

so all values +0 → only main note.




PS. if you’re going down the loopback route & have a free keyboard/button section, it would also be possible to toggle intervals with keys/buttons…

(I’ll ping you a link to a related patch once I’ve documented it)

…or use that to switch between Scale Remap pipes!

1 Like