First time here? Check out the FAQ!

How to use LinnStrument to control Kyma with a "mapping layer" in-between

0 votes

I want to use the LinnStrument as my main keyboard controller for Kyma, but my current working method doesn't facilitate connecting it directly to Kyma (via any of the physical or virtual connection methods described by the “Using the LinnStrument with Kyma” page). My LinnStrument’s midi output needs to be processed through Max/MSP first. Thus my setup’s not able to adhere to all parts of the provided directions for normal MPE plug-and-play use. 

I've tried following as much of the provided directions as is applicable in this case, which results in:

(1) plugging the LinnStrument into my host computer via USB 

(2) in Max, receiving data from the "LinnStrument MIDI" input port exclusively within a Max patch, then processing it within the patch.

(3) in Max, sending processed MIDI data out of the "from Max 1" virtual port.

(4) in KymaConnect, activating Port 1 and setting it as:  MIDI Out: "to Max 1", MIDI In: "from Max 1".

(5) in Kyma, under “DSP -> Configure MIDI…”, “Continuum and MPE compatible” is set to “Yes”, and “MIDI Pitch Bend Range (nn)” is set to 24.

(6) in Kyma, under “Performance Preferences -> External MIDI Controller”,  neither “Motor Mix” or “BCF2000” is selected.

(7) in Max, created a dedicated “midiin” object to receive incoming data from the “to Max 1” virtual port (which is receiving data from KymaConnect’s Port 1 MIDI out exclusively).

(8) in Max, the output of this midiin object is connected directly to a midiout sending data to the LinnStrument’s MIDI in.


(*) Explicitly going against the instructions stated by the “Using the LinnStrument with Kyma” page, my LinnStrument’s MIDI-MODE is set to “ChPerRow”, NOT “ChPerNote”.  

It must be set to “ChPerRow” to achieve independent transposition of individual rows, the need for which is explained below.



If a keyboard-controllable sound is running in Kyma, and its “MIDIVoice : Polyphony” parameter is set to at least 8 voices, then this works as expected:

The Kyma sound receives MIDI on channels 2 through 9, one for each for row of the LinnStrument, starting on ch 2.


Undesirable issues: 

(1) Each time I start a new Kyma sound playing, I have to go into the LinnStrument “Per-Split Settings” and manually change the MIDI-MODE from ChPerNote back to ChPerRow.

(2) Sometimes the MIDI stops working completely. I then need to restart KymaConnect and/or Kyma, and/or repeat a few of the midi-setup steps to get Kyma to respond to the LinnStrument (through Max) again.

(3) I’ve tried using parameters: !ChannelPressure, !PolyPressure, !Aftertouch, !Pressure, & !Press. Each of these create an associated slider in the VCS panel. None of them respond to the Z-axis control of the LinnStrument, which I have set to ChannelPressure on the LinnStrument, and which doesn’t get changed by Kyma.  These messages appear in the Kyma Event Log as “Press”.


Basically, I’m asking two things:

(1) if it’s possible to create another plug-and-play mode for the LinnStrument, one that uses ChPerRow instead of ChPerNote as the enforced MIDI-MODE.

(2) How to have the Z-axis from the LinnStrument recognized as an MPE controller in Kyma.  I prefer to have the LinnStrument set to send ChannelPressure, which appears in the Kyma Event Log as “Press”.


Here’s an explanation of why I’m using Max as a processing step between my LinnStrument and the sound device:

Max adds a flexible mapping layer between my LinnStrument and any receiving sound module. This enables a range of extended functionality:

-- transpose by row (for creating non-isomorphic layouts based on colorful alternate guitar tunings) 

-- the ability to light pads in custom arrangements via midi, to match these custom row-transpose layouts, while utilizing extra colors to highlight salient tones within the scale.

-- the ability to use non-12ET tunings and change them on the fly, just by activating different list messages in Max. 

At the LinnStrument's suggested pitch-bend range of 24, microtuned pitch intervals can be established for each step of the chromatic scale within about 1/3 of a cent's accuracy.  

I'm mostly using a 53ET scale (i.e. 53 * 22.64 cents ≈ 1200 cents), to specify many comma-based tunings within about a 2 cent accuracy, just by providing a list of integers in Max (e.g. [ 5 9 13 17 22 26 31 36 40 44 48 53 ] describes in 53ET a chromatic scale which incorporates an Egyptian diatonic mode called "Rast").

I spent the last week finishing the Max patch and play-testing some custom pad-scale layouts in tandem with some exceptional authentic tunings, using a few different synth plugins. A few days ago I tried switching the sound source to Kyma, and quickly arrived at some breathtaking sounds and sonorities using this pitch-bend-based dynamic tuning approach with some of the cello-like resynthesized and morphable sounds from Kyma.  It sounds fantastic, and I can't imagine using the LinnStrument without this mapping layer in-between, since it creates a quality of sound that resonates more powerfully and beautifully due to the purer intervals of the tunings being used. The ability to adjust tunings on the fly is crucial IMO, from subtle-tweaking of wrong-sounding intervals to exploring the dimensional shifts of an entire scale pivoting to parallel tunings implied by modal interchange and chord substitution tactics, etc.  A performance-ready method of dynamic tuning specification is much preferred over a method of defining presets for storage and recall. It should yield deeper musical insights into the "tuning space" one is working in, since finer details and subtleties may emerge naturally over time as a product of one's working process and engagement via flow. It also makes possible the ability to rapidly switch and layer various sound sources, as long as the pb-range can be set to 24, and as long as there is a multi-channel mode that can operate within a single sound.



asked Oct 27, 2016 in Controllers, OSC & MIDI by thom-jordan (Practitioner) (730 points)
edited Oct 27, 2016 by thom-jordan

2 Answers

+2 votes
This is not by any means a complete answer but there is a way to make your current set up a bit less complex.

There is no need to route Max input and output through KymaConnect' Ext MIDI feature. KymaConnect provides a virtual MIDI port named 'vPacarana' that you can use to send and receive MIDI directly to/from the Pacarana. Just assign it in your Max MidiIn and MidiOut objects and remove the Max virtual MIDI ports from KymaConnect's Ext MIDI slot.

This is the normal way to have another application (including a DAW) send MIDI and receive MIDI to/from the Pacarana in a KymaConnect set up. The only time you might want to approach it the way you have is if the routing needs some of the filtering or mapping features that KymaConnect offers (for example remapping MIDI channels). Typically though with something like Max in the picture you can do all of that and more in the patch.
answered Oct 27, 2016 by delora-software (Master) (5,040 points)
I haven't switched over the the vPacarana ports yet, since everything's working right now. I tried switching them quickly but was getting no signal. Next time I restart I'll try changing the ports. I might end up leaving the vPacarana port unused for now anyways, to have it available for using with an auxiliary midi-controller that might change depending on the session. Thanks for the advice!
Make sure that you have the vPacarana port enabled. There's a checkbox on the KymaConnect's "Pacarana" tab. If you continue to have issues using the vPacarana port drop me a support email.

There really is no reason though to leave vPacarana in reserve. The port is fully multi-client (as are all CoreMIDI ports) so any number of applications can share the same port without issue. Also the Pacarana's MIDI-over-OSC features currently models a single MIDI cable so all MIDI flowing through KymaConnect to the Pacarana is merged, and all MIDI sent by the Pacarana is identical on all ports, subject of course to KymaConnect's mapping/filtering in both directions.

If you have one or more controllers that are intermittently used, and they do not require Max processing, I'd recommend assigning those to KymaConnect Ext MIDI slots. KymaConnect remembers them and will continue to operate normally when they are absent.
+1 vote

There are two approaches you could take:

  • Switch off MPE mode in Kyma and achieve polyphony in Kyma using a Replicator OR
  • Use ChPerNote mode on the LinnStrument & implement the lights, tuning, and cell-number detection in Kyma (obviating the need for the intermediate layer in Max)

Since you've already spent so much time on the Max patch, let's assume that you prefer to take the first approach. So, in Kyma, under “DSP -> Configure MIDI…”, “Continuum and MPE compatible” should be set to “No”.  Then use this Replicator as an example of how you can add polyphony to your own Kyma Sounds.

answered Oct 27, 2016 by ssc (Savant) (117,620 points)
I just modified one of the sounds I've been using with the LinnStrument, to use the above Replicator. Everything's working wonderfully.. This is exactly what I was looking for.. thanks !  

I might try making a Kyma version of the Max patch relatively soon.. It'd be interesting to control all of that within Kyma, when Kyma is being used.