This is a firmware for the minicommand which provides midi-dispatcher / note forwarding functionality.
You can use it to allocate a range of monomachine tracks to be played in "Poly" mode, while retaining others to be played in "Mono" mode. e.g. tracks 1-3 mono, tracks 4-6 poly.
see discussion here:
http://elektron-users.com/index.php?option=com_fireboard&Itemid=28&func=view&id=178388&catid=9Instructions for use:
Code: : |
// MNM Mono/Poly Sketch
// Note - this sketch assumes that you have:
// MNM set up in "mono" mode with a seperate midi channel allocated for each of the 6 mnm tracks. i.e. midi channel span = 6 (i think this is how it's configured in the MNM global settings?)
// MNM Midi Out ==> Minicommand Midi In 1
// MNM Midi In ==> Minicommand Midi Out
// Are also sending the midi notes to be "dispatched" / forwarded to Minicommand Midi In 1. To change this to "listen" on Midi In 2, update the code below in _MP08_Sketch.pde, recompile, and flash your minicommand
//
// Change From:
// Midi.addOnNoteOnCallback(this, (midi_callback_ptr_t)&MNMMonoPolySketch::onNoteOn);
// Midi.addOnNoteOffCallback(this, (midi_callback_ptr_t)&MNMMonoPolySketch::onNoteOff);
// Midi.addOnControlChangeCallback(this, (midi_callback_ptr_t)&MNMMonoPolySketch::onControlChange);
//
// Change To:
// Midi2.addOnNoteOnCallback(this, (midi_callback_ptr_t)&MNMMonoPolySketch::onNoteOn);
// Midi2.addOnNoteOffCallback(this, (midi_callback_ptr_t)&MNMMonoPolySketch::onNoteOff);
// Midi2.addOnControlChangeCallback(this, (midi_callback_ptr_t)&MNMMonoPolySketch::onControlChange);
// General Notes - Firmware has one configuration page with 5 encoders:
// 1.0 Config Page 1
// 1.01 Encoder "O-|" - this is the on/off switch for the sketch
// 1.02 Encoder "ST" - select the Poly "start" track
// 1.02.01 Changing the value for the Poly "start" track will reload the kit and then copy the MNM machine from the specified "start" track to all tracks until the "end" track
// 1.03 Encoder "END" - select the Poly "end" track
// 1.03.01 Changing the value for the Poly "end" track will reload the kit and then copy the MNM machine from the specified "start" track to all tracks until the "end" track
// 1.04 Encoder "SYN" - turn parameter syncing for Poly tracks on/off.
// 1.04.01 When "SYN" is switched "on", if you turn an encoder on the MNM UI for one of the "poly" tracks, the parameter change will be forwarded to all of the other "poly" tracks
// 1.04.02 Click the "SYN" encoder to toggle display between "SYN" and "SPR" encoders
// 1.05 Encoder "SPR" - paramter spread for Poly track sync mode. E.g. set SPR to "2", with 3 poly tracks. Setting Poly Track #1 FLTW to value 64 will set Poly Track #1 FLTW to 66 and Poly Track #3 FLTW to 68. etc...
|
Download link - latest version is maintained on github:
https://github.com/0438snappy/mididuino/tree/develop/minicommand-sketches/DevelopmentFirmwares/MNMMonoPolySketch
How it "works":
1. User has monomachine set up in "mono" mode with seperate midi channel allocated for each voice.
2. When the minicommand firmware is first loaded up, it will attempt to read the kit data from the monomachine. If successful it will flash the message "SWITCH KIT [KIT NAME]" on screen. If not successful it will flash the message "WRONG CHECK" on screen. If you don't have the midi out of the mnm connected to the in1 of the minicommand, or the out of the minicommand connected to the in of the mnm, no messages will flash on screen.
3. User defines which tracks are to be played in "poly" mode" by setting the ST and END encoders, e.g. tracks 3-6, which are on midi channels 10-12 for example. The actual midi channels will depend on your MNM global config. The default settings are ST on track 3, and END on track 6.
4. By modifying the ST or END encoder values, the minicommand will assign the machine from the ST track to all tracks until the END track, using the kit data read out earlier. Actually i probably need to add some code to make sure the kit was actually successfully loaded first...
4. The User needs to enable the firmware by setting the "O-I" encoder to "ON"
5. Once enabled, the minicommand listens to all incoming note on messages on the specified midi in port (see notes above).
6. If a note on message is received on a midi channel that is allocated to a "poly" track (e.g. any note on for midi chans 10-12), the minicommand will forward the note to the first available track. Continuing the example above it would play on MNM track 3.
7. If another (different) note on message is received before the previous "poly" note was released, then the minicommand forwards this to the midi channel of the next available "poly" track. Continuing the example above, the 2nd note would play on MNM track 4.
8. If the SYN encoder is set to on, then if the user makes any changes to parameters of any of the "poly" tracks through the MNM user interface, the minicommand will forward the CC on to all of the other "poly" tracks. so you can hold a chord and sweep the cutoff on any one of the poly tracks, and it will affect all poly tracks. Use the SPR encoder to set a spread to detune the values across the poly tracks for extra fatness
Q&A:
1. Will this work on the OT? Out of the box, probably not. In theory you could fairly easily modify this firmware to give basic midi dispatcher functionality that you could use on the OT. However the current version of the Midi-Ctrl framework doesn't yet have libraries to perform advanced functionality on the Octatrack like reading the kit data etc. So you would lose the machine copying and param syncing features... Maybe if the stars align at some point in the future we might see minicommand OT libraries...
Known bugs/issues/todo's:
1. Only copy MNM machines if the kit data was successfully read
The following bugs are now fixed in Midi-Ctrl 0018 (available at
https://github.com/wesen/mididuino/downloads)
2. Midi-ctrl 0017 Memory leak / firmware crash... leaving the firmware at the sketch select page, and start the midi clock running, the sketch crashes after a while, 2nd led lights up, and minicommand needs to be powercycled. Haven't had a good chance to test out behaviour when you "enter" the sketch and start the clock running, suspect that it may also crash after a longer period of time. Have contacted Manuel and hopefully he can help me try to pinpoint the cause of this one, it seems to be something in the framework code.
3. WRONG CHECK message when using Midi-Ctrl 0017. The fix for this is to add "+5 / -5" the lines of code below in ...hardwarelibrariesMNMMNMTask.cpp and recompile/flash the firmware:
Code: : |
CHANGE FROM:
void MNMTaskClass::onGlobalMessageCallback() {
MNM.loadedGlobal = false;
if (MNM.global.fromSysex(MidiSysex.data, MidiSysex.recordLen)) {
...
void MNMTaskClass::onKitMessageCallback() {
MNM.loadedKit = false;
if (MNM.kit.fromSysex(MidiSysex.data, MidiSysex.recordLen)) {
...
CHANGE TO:
void MNMTaskClass::onGlobalMessageCallback() {
MNM.loadedGlobal = false;
if (MNM.global.fromSysex(MidiSysex.data + 5, MidiSysex.recordLen - 5)) {
....
void MNMTaskClass::onKitMessageCallback() {
MNM.loadedKit = false;
if (MNM.kit.fromSysex(MidiSysex.data + 5, MidiSysex.recordLen - 5)) {
...
|
if anyone finds any other bugs / issues etc please let me know!