Filtering out unwanted MIDI CC's
I'm building a Max for Live device and to control a hardware synth that uses NRPN's for parameter controls and I'm hitting a roadblock with the way Ableton natively (miss)interprets NRPN's.
Right now I'm using 2 separate midiin objects in my device, one bringing midi in from recorded clip data, and one purely to communicate with the synth. The midi in from the synth goes to nrpnin objects and are tied to knob and buttons, then get sent through nrpnout objects to the max for live device's midiout object. Communication with the synth itself is flawless until I record something. When parameters are changed on the synth, automation is written correctly through the max for live device, but midi CC's are ALSO recorded onto the clip itself under Live's midi control section, causing the midi control data live recorded to interfere with the max device's NRPN controls.
How do I filter out unwanted midi cc's so the garbage that Live records in doesn't conflict with the NRPN data?
Currently, I'm trying to take the max for live device's built-in midiin object and i have that sending to a midiparse object, when sends note/velocity, aftertouch, pitchbend, and program change data to separate note out, bendout, touchout, and pgmout objects, and i have the midiparse's CC outlet sending to a ctlin object set to CC64 for sustain sending to a sustain object, which goes to the noteout object.
What is the proper way to get this max device to ignore all MIDI CC's except for this CC64 for sustain? I'm new to max, so don't roast me too bad. ; )
What is the proper way to get this max device to ignore all MIDI CC's except for this CC64 for sustain?
I don't now about M4L devices, but in Max I use [routepass] to filter MIDI events with or without the channel. It routes events by their first number. See the attached examples.
routepass seems to properly filter out unwanted CC's.
i'm still having issues with signal flow somewhere though. I can record in my automation from the max for live device just fine, but on playback, the midi information that's recorded directly into the Live clip will cancel out the automation from my created device. I'm pasting a simplified prototype of my controller device here.
sorry, i can't figure out how to paste in my patch like others do here. i'm very new to these forums.
In Max activate all objects you want to copy, from the main menu select
Edit —> Copy Compressed
and paste directly into the forum editor. Your content gets automatically converted to that expandable attachment.
Regarding your automation question: I can't help. Never used Ableton Live nor M4L devices.
wonderful, thank you! here is the simplified patch pasted correctly.
I've been doing more tinkering, and when parameters are recorded into Ableton Live from turning a knob on the synth, it isn't recording 1 single NRPN value, but 4 CC's!
one single knob turn is recording:
CC6: alternating between 0 and 1 depending on where the knob's rotation is
CC38: labeled as LSB for CC6 (this one appears to have the most information recorded)
CC98: NRPN LSB (appears to be a static value of 15 which is the NRPN number of the knob i'm automating)
CC99: NRPN MSB (static value of 0)
So, it seems instead of using [nrpnin], i need to translate these values into something meaningful for my MaxMSP knob, which will then use an [nrpnout] to communicate with the synth. I have been looking at using [xctlin] intead, but haven't wrapped my brain around how to format everything correctly yet.
That is what NRPN control is - several CC#s bundled into one NRPN control.
I think you problem has nothing to do with that, but with recording and automating
the data coming from synth, manual dial or knob automation, and sending all that back to synth.
If you want to use midi data for automation, disable all the dials for automation.
If you want to use dials etc for that, than don't record that NRPN values into Live.
Or is that not possible in Live ?
I don't use it, so I can't tell.
I'm starting to think what I'm trying to do isn't possible with Ableton Live.
I have local control turned off on the synth itself, so the physical knobs only send out midi data, they aren't controlling the synth parameters directly at all. This doesn't help.
There doesn't seem to be a way to tell Live to ignore the incoming midi data when recording either, so I'm always getting conflicting midi data transmissions that cancel out my automation.
The problem i'm trying to solve is how complicated editing these separate CC parameters is. If I could make a 1-to-1 interface of the synth as a max for live device, then theoretically, i could edit the max device's single automation lane instead of sifting through 4 different midi cc lanes to make simple changes. These recorded CC's from Live just always seem to come through though, cancelling my automation. If I have my transport stopped, or even playing (just not recording) all changes i make with the synth's physical knobs are all reflected on the max device's knobs and my integers all check out; everything works perfectly.
However, when I record, this recorded MIDI CC data always conflicts with the recorded automation from the max device. Again, I'm new to MaxMSP, and I'm learning (specifically to make THIS!)