haven't been tested between axoloti's, but I've got sort of a bundle of modules working together in this patch (see below for patch).
It consists of 3 parts:
1- control/note encoding modules (2 modules for controls: 8x 16 bit single and 8x 8bit dual X/Y controls into a 32bit single pulse message)
2- data combiner combines the 32bit single pulse message of up to 8 encoder modules into one serial stream to be connected to a GPIO.
3- serial decoding receive modules for notes and controls (all listen to a single data stream, multiple streams can be used to divide up the data to reduce latency. eg. seperate the note and control messages over two seperate GPIO's)
1
the control encoding modules come in two options.
-the first one excepts 8 controls and encodes these in 16 bits resolution, each having their own controller CC, all having the same channel
the second one excepts 8 controls and encodes these as 8bit XY pairs, each pair having their own controller CC, all having the same channel
the note encoding module comes in one option, just a single "mono" trigger. To play polyphonic, just add multiple of these as the normal cv2midi module and connect them all to the same datacombiner.
all this encoded data is being send as single 32bit pulses whenever a control changes. This pulse contains all the channel, type, control and value data in 32bits.
2
The data combiner takes in the 32bit pulses of the connected control/note modules, put them in a buffer and play the bits of the buffer serially until the buffer is empty again. Up to 64 pulses can go into the memory, if this is not enough, it could be set higher inside the code (enlarge the buffer array and change the values of the "wp" and "rp" (write and read position) where it says "&63"->use powers of two and use the lengthmask to keep read and write positions between the boundries.
The output of this module should be connected to a GPIO.
As the data of the controller module can "run a bit out of hand", it's recommended to use seperate modules for note and control data.
3
All the receive modules just listen to the same data stream.
Whenever the input goes high for the first time, it starts reading out the message, which will always be 32bit, and send it to one of the outputs in case the channel, type and control number correspond with the selected channel/control number set on the module and whether the module is of the same type (note/16b control/dual 8bit control)
The control receive modules have 8 outputs that output the last decoded values from the serial stream.
An attribute spinner sets which channel the module will listen to. 2 modules to decode the 16bit and dual 8bit codes.
For the note receiving, I've got 3 modules:
-a simple mono receiver, it was my first try to get the values out of the stream
-a simple 4 voice receiver with a top to bottom note priority: it will always try to fill the first outputs, last one only gets filled when there are actually 4 notes playinh
-a converter module to decode the stream into data and then encode it into midi, so it can be internally used in the normal sense.
and a nice pattern generator to test the polyphony
serial data connection.axp (115.0 KB)