Axiom 1.65 — Send MIDI events when parameter value changes — HELP!

Official support for: bluecataudio.com
Post Reply New Topic
RELATED
PRODUCTS

Post

I’ve been trying to get this to work in Axiom 1.65 standalone (MacOS Ventura on M1) with a KMI Softstep 2 MIDI controller. As I understand the controller should respond to manual changes in the GUI if this option is selected and the correct MIDI ports are active.

Zero success so far and no useful info in the Axiom manual. Can anybody please outline how to get it to work? Could be a limitation of the controller or maybe I’m just missing something really obvious.

Post

Yes, you indeed need the option to be activated, and also the softstep MIDI controller to be selected in the MIDI output options of the app.

You also need to make sure that the Softstep controller is setup to receive the same MIDI messages as the ones it sends to activate the lights (if I remember well it may not be setup for that by default). What Axiom does is to send the exact same MIDI CC as configured for input to its output when the parameters are changed in the GUI.

BTW if you are trying to control parameters of a built-in plug-in or the amps, you also need to activate the option in the plug-in inside Axiom and set its MIDI output to "host" so that it can communicate with the controller as well.

Post

Thank you for clarifying that. I the case of the SoftStep 2 it requires a specific CC number for each key followed by a value from 0-3 to trigger different colors i.e. green on/off, red on/off, fast flashing green, fast flashing red, slow flashing green, slow flashing red.

Seems that real-time feedback is probably impossible unless there is some MIDI translation tool between the app/DAW and the controller to convert the signals sent by Axiom to something the SS2 can recognize.

Post

Vaultnaemsae wrote: Wed Jun 07, 2023 10:28 am Thank you for clarifying that. I the case of the SoftStep 2 it requires a specific CC number for each key followed by a value from 0-3 to trigger different colors i.e. green on/off, red on/off, fast flashing green, fast flashing red, slow flashing green, slow flashing red.

Seems that real-time feedback is probably impossible unless there is some MIDI translation tool between the app/DAW and the controller to convert the signals sent by Axiom to something the SS2 can recognize.
I indeed remember writing some MIDI conversion scripts with Plug'n Script. The SS2 is pretty powerful, and with a bit of programming you can actually do pretty much anything with it via MIDI.

Post

Yes, It is powerful/complicated and I've hit a brick wall with it as such. How would you suggest using Plug'n Script to handle this job? I bought it some years ago but have never really known where to start with it since I have no coding knowledge at all. Any advice appreciated :)

Post

Here is a sample script for Plug'n Script that will translate MIDI notes into LED #9 on/off and color, with a utility class that I have written to control the SoftStep 2 (you can even change the text displayed on the device :-) ):

Code: Select all


/** \file
*   Sample script that converts some MIDI events into events that can be recognized by the
*   Keith McMillan SoftStep 2 foot controller.
*/
#include "library/Midi.hxx"

array<string> inputParametersNames = {"Color"};
array<double> inputParameters(1);
array<double> inputParametersMin = {0};
array<double> inputParametersMax = { 1 };
array<int>    inputParametersSteps = { 2 };

MidiEvent tempEvent;
MidiEvent tempEvent2;
MidiEvent tempEvent3;

/** Utility functions to interact withe the SoftStep 2 MIDI foot controller.
*
*/
namespace SoftStep2
{
    enum LedState
    {
        kLedOff = 0,
        kLedOn,
        kLedFastFlash,
        kLedSlowFlash
    };

    MidiEvent tempEvent;

    void init()
    {
        // using only MIDI CC messages
        MidiEventUtils::setChannel(tempEvent, 16);
        MidiEventUtils::setType(tempEvent, kMidiControlChange);
    }

    void setGreenLedState(uint ledNumber, LedState state,MidiQueue@ output,double timeStamp=0)
    {
        tempEvent.timeStamp = timeStamp;
        MidiEventUtils::setCCValue(tempEvent, state);
        MidiEventUtils::setCCNumber(tempEvent, ledNumber + 110);
        output.push(tempEvent);
    }

    void setRedLedState(uint ledNumber, LedState state,MidiQueue@ output, double timeStamp = 0)
    {
        tempEvent.timeStamp = timeStamp;
        MidiEventUtils::setCCValue(tempEvent, state);
        MidiEventUtils::setCCNumber(tempEvent, ledNumber + 20);
        output.push(tempEvent);
    }

    // 4 chars text max
    void setDisplayText(const string& text,MidiQueue@ output, double timeStamp = 0)
    {
        tempEvent.timeStamp = timeStamp;
        for (uint i = 0; i < text.length; i++)
        {
            MidiEventUtils::setCCNumber(tempEvent, 50 + i);
            MidiEventUtils::setCCValue(tempEvent, text[i]);
            output.push(tempEvent);
        }
        for (uint i = text.length; i < 4; i++)
        {
            MidiEventUtils::setCCNumber(tempEvent, 50 + i);
            MidiEventUtils::setCCValue(tempEvent, ' ');
            output.push(tempEvent);
        }
    }
}

void initialize()
{
    SoftStep2::init();
}
int index = 0;

void processBlock(BlockData& data)
{
    // MIDI translation
    for(uint i=0;i<data.inputMidiEvents.length;i++)
    {
        MidiEventType type = MidiEventUtils::getType(data.inputMidiEvents[i]);
        double timeStamp = data.inputMidiEvents[i].timeStamp;
        if (type == kMidiNoteOn) // translating notes to led status (red when velocity >=64) - used for tempo display from the output of MIDI metronome script
        {
            if (MidiEventUtils::getNoteVelocity(data.inputMidiEvents[i]) < 64)
            {
                SoftStep2::setGreenLedState(9, SoftStep2::kLedOn, data.outputMidiEvents, timeStamp);
                index++;
            }
            else
            {
                SoftStep2::setRedLedState(9, SoftStep2::kLedOn, data.outputMidiEvents, timeStamp);
                index = 1;
            }
        }
        else if (type == kMidiNoteOff)
        {
            SoftStep2::setGreenLedState(9, SoftStep2::kLedOff, data.outputMidiEvents, timeStamp);
            SoftStep2::setRedLedState(9, SoftStep2::kLedOff, data.outputMidiEvents, timeStamp);
        }
    }
}
You can probably use this as a basis to write your own control script that translates incoming MIDI CC events into appropriate LED on/off states.

Post Reply

Return to “Blue Cat Audio”