Hello,
Is it possible to send microtonal sequences out via Midi? I can make it work internally, no problem, but vst synths in Ableton for example, don’t seem to get any ‘detuned’ pitch info…
Thanks a lot
Hello,
Is it possible to send microtonal sequences out via Midi? I can make it work internally, no problem, but vst synths in Ableton for example, don’t seem to get any ‘detuned’ pitch info…
Thanks a lot
You could send pitch bend info and set the desired resolution in Live. Probably easiest to keep it at a semi tone, then you can obtain micro tonality as a combo of normal static pitches + pb info
Related to Thor’s comment – it’s pretty easy to send MPE style MIDI out of SC. That plus pitch bend can do microtuning.
hjh
Quicky MPE examples:
Round robin voice allocation for MPE:
(
a = Pbind(
\type, \midi,
\midiout, m,
\chan, Pn(Pseries(0, 1, 16), inf), // here's the voice allocator
\degree, Prand([1, 2, 3, [0, 5]], inf),
\bend, Pwhite(-6000, 6000, inf) + 8192,
\callback, {
~midiout.bend(0, ~bend)
}
).play;
)
a.stop;
Or, a more proper voice allocator (this one sounds kinda hilarious with Surge XT in MPE mode):
(
// or, smarter voice allocation (accounting for very long vs very short notes)
a = Pbind(
\type, \midi,
\midiout, m,
\chan, Prout { |event|
// SC already has a class to grab and release numbers
var allocator = ContiguousBlockAllocator(16, 0);
var oneNote = { |ev|
var chan = allocator.alloc(1);
var sus;
if(chan.isNil) {
// or, here, do your own voice stealing logic
"no voice available".warn;
Rest(0)
} {
sus = ev.use { ~sustain.value };
thisThread.clock.sched(sus, {
allocator.free(chan);
});
chan
};
};
loop {
event = oneNote.value(event).yield;
}
},
\degree, Prand([1, 2, 3, [0, 5]], inf),
\bend, Pwhite(-6000, 6000, inf) + 8192,
\dur, Pexprand(0.2, 0.5, inf),
\legato, Pexprand(0.5, 3, inf),
\callback, {
~midiout.bend(0, ~bend)
}
).trace.play;
)
a.stop;
hjh
I’ve also done this for synths without MPE support. I use equal-tempered octaves, so I would have a separate track in my DAW for each subdivision of the half-step with the synths detuned to the desired offset (so, for a Simms / Maneri scale, a 72-note octave, one track for traditional equal tempered tuning, one for 1/12th up, one for 1/6th up, one for quarter tone, one for 1/6th down, one for 1/12th down), each track set to respond to a different MIDI channel. Then, in SC, you just send your MIDI to the channel that corresponds to the offset from the half-step that you need. Not as CPU-efficient as MPE, nor as simple to edit later, but works when you need it.
I did this for the second track on this album, “Sparks an Empty Pool”, which has a long, 96-note octave chord progression that I wanted to “play”, with some semblance of “touch”, using the East/West Bosendorfer piano. The label doesn’t do streaming, so I only have the excerpt at the above link to share, where you get a few piano chords in the latter part.
I captured the MIDI from a nice, weighted controller and sent OSC messages to Reaper with the East/West Play plugin on a bunch of tracks. That plugin allows MPE, but a lot of sample settings don’t allow pitch bends beyond some very small amount. They do allow detuning, though, so that’s how I had to do it. An extra bonus was that I was able to write the SC code so that I didn’t have to hit the right notes, just the right amount of notes, so I could focus entirely on the touch and not worry about clams.