Can Internal Controllers be sent via MIDI

gootah333

Inspired
I understand that External controllers can control a parameter, as well as internal controllers.

Can an internal controller also be sent via MIDI?
If so, how is this done?

Related question: What MIDI is sent by the Axe-fx? Is every knob that turns during a performance echoed with a MIDI CC sent to the MIDI out port?

I don't have one, but read the manual and can't figure the MIDI and control output side of the unit.
 
hey gootah, welcome to the forum!

MIDI controls for the Axe-Fx are definitely much more straightforward once you have one to mess with.
I'll try to explain briefly though.

The eight "external controllers" supplement the existing internal Axe-Fx controllers: the LFOs, ADSRs, Sequencer, and volume Envelope.
Each of these controllers can attach-to/modify select parameters on the effect blocks (and elsewhere, but mostly on the effect blocks).

So you can have an LFO modifying the frequency of a wah, or a sequencer modifying that frequency, or have the frequency vary by input volume, or...
use one of the eight external controllers.

The eight external controllers are each assigned a MIDI CC number. Whatever MIDI CCs the Axe-Fx receives that correspond to whichever of those eight controllers you've assigned to those CCs... the value of those CCs gets sent along to whatever's being modified by the corresponding external controller. (Feel free to read that again! It's weird enough to write it out! :D)

Additionally, and sometimes missed by people who don't have an Axe yet, *every* effect block can have a CC assigned to it's bypass function. So you don't need to waste any of the eight external controllers turning effects on and off. Add to that, more CCs for two bypass states, five different volume adjustments, tap tempo, activating/deactivating the tuner, and looper controls (on the Ultra) -- you've got the majority of things covered. And then to supplement that, the two 1/4" pedal jacks can also be used the same way as all the other controllers noted previously, along with a couple of other pedal-jack-only functions.

In short, the "External Controllers" are there for MIDI-based expression pedal style control.

-----

As far as what MIDI is sent out... not much, actually. And at the same time... just about everything.
If I'm remembering right, the Axe never sends CCs or PCs. However, it does use proprietary messages via MIDI SysEx to send out nearly everything that's going on. Applications or hardware that can understand those messages (Axe-Edit, the MFC-101, the Gordius Little Giant, and the Liquid Foot among the most well-known) can then react to those messages and, for example, display the tuner and tempo data from the unit.

Hope that helps!
 
godprobe said:
If I'm remembering right, the Axe never sends CCs or PCs. However, it does use proprietary messages via MIDI SysEx to send out nearly everything that's going on.

Do you know where the SysEx messages for the Axe are documented?

There isn't anything specifying the SysEx messages in the manual.
 
On a somewhat related topic, when a controller sends a CC message to switch an effect block on/off what should it use in the "value" byte? 0 for off, 1 for on? or 0 for off and 127 for on?

The midi spec defines a number of Controllers (for the 2nd byte in the CC) and leaves some numbers undefined. Should I be send one of those defined (which?) or undefined ones? to toggle an effect block on/off. (The controller has 3 effect on/off switches, each with 2 knobs to control parameters, or 6 knobs total) and I'm trying to sort out the content of the CC's that I should send.
 
fret said:
On a somewhat related topic, when a controller sends a CC message to switch an effect block on/off what should it use in the "value" byte? 0 for off, 1 for on? or 0 for off and 127 for on?
Technically, I believe it's 0-63 = off, 64-127 = on.
I usually hedge my bets and use 0 and 127 just to make absolutely sure.

fret said:
The midi spec defines a number of Controllers (for the 2nd byte in the CC) and leaves some numbers undefined. Should I be send one of those defined (which?) or undefined ones? to toggle an effect block on/off. (The controller has 3 effect on/off switches, each with 2 knobs to control parameters, or 6 knobs total) and I'm trying to sort out the content of the CC's that I should send.
The spec I think you're referencing typically applies to keyboards. The Axe-Fx, being a considerably different beast, doesn't have parallels to some of the spec'd CC definitions. So basically... ignore them. Use whatever you feel like.

The Fractal Audio MFC-101 controller however, *does* use particular CCs, so if you want to follow a "standard" of sorts, you can set your effects to correspond to those values. If you want to set all of the Axe-Fx I/O Ctrl parameters to those values, you can (NOTE: THIS WILL OVERWRITE MANY OF YOUR GLOBAL SETTINGS!) go to the Utility menu's Reset page and "Reset system params". (It won't erase your presets.)

Personally, coming from a PODxt Live before I bought my Axe-Fx, the flexibility of freely-assignable CCs, although daunting, was also a huge relief to me. :) (All of the XTL's CCs are fixed assignments.)
 
godprobe said:
fret said:
On a somewhat related topic, when a controller sends a CC message to switch an effect block on/off what should it use in the "value" byte? 0 for off, 1 for on? or 0 for off and 127 for on?
Technically, I believe it's 0-63 = off, 64-127 = on.

Ok MSB it is.

godprobe said:
Personally, coming from a PODxt Live before I bought my Axe-Fx, the flexibility of freely-assignable CCs, although daunting, was also a huge relief to me. :) (All of the XTL's CCs are fixed assignments.)

When kinda begs the question if I was to use this controller with something OTHER than an axefx, what should the CC's be? Or should I just assume incompatibility and make them assignable?
 
fret said:
godprobe said:
Personally, coming from a PODxt Live before I bought my Axe-Fx, the flexibility of freely-assignable CCs, although daunting, was also a huge relief to me. :) (All of the XTL's CCs are fixed assignments.)

When kinda begs the question if I was to use this controller with something OTHER than an axefx, what should the CC's be? Or should I just assume incompatibility and make them assignable?
I'm left guessing at what "this controller" is, but from the context I'm assuming you mean an MFC-101?
If so, I believe that all of it's CCs, while they do have an Axe-Fx compatible default right out of the box, are also freely assignable.
So, it really just depends on what you're connecting to.
 
godprobe said:
I'm left guessing at what "this controller" is, but from the context I'm assuming you mean an MFC-101?
If so, I believe that all of it's CCs, while they do have an Axe-Fx compatible default right out of the box, are also freely assignable.
So, it really just depends on what you're connecting to.

Alright, one more question: is it documented anywhere which CC's the MFC-101 sends by default for each of it's buttons/external controller(s)?

I obviously don't have one to work it out myself. I'm up to the point where I have my own hardware thats ready to send MIDI and I just have to work out what MIDI to send.
 
Yeah, it's documented in MFC manual,
IAs 1-17 send CCs 102-118 when you disable "AxeFx functions" for them,
with "AxeFx functions" enabled they send AxeFx default CC# for certain blocks but I am not sure of numbers.
 
Just jumped on this conversation... I've been thinking of the midi situation within the axefx, can you clarify...

I can use a midi controller i.e - Novation nocture via the 8 Ext Controllers using a standard USB/laptop, but can i not use the automap feature in Novations products to manually controll further Mods/Params i.e drive/Levels within effects. (yes zipper effect would be apparent and these data/knob movements cant be used with the axefx editor)

but I presumed that with the use of the axefx editor every peram in Axefx can recieved and transmit midi data or sysex. and if I used the nocturn and there proprietry software editor and manually assign and name everything I can control much of the above?

true of false?

ta
 
To my knowledge, false.
I have a ReMOTE 37 SL (from the first automap line), but I believe the available commands are pretty much the same as the newer iterations. I've seen SysEx and Automap mentioned together before, but I haven't happened across any way to actually send SysEx commands with it myself, and I've dug into the actual Automap preset files a decent amount.
Automap's a complex beast though, and I may've missed something. If you get something working, PM me. :)
(In case you missed it, Novation also finally brought an official community forum online last month. Lots of Automap discussion there, and the devs are in on it as well.)
 
please forgive me bit of a midiot...

the axefx is not able to broadcast or recieve midi?
the editor uses sysex info to alter perameters in the editor not midi?
If so how is the MFC able to change and amend presets and store presets? anything changed in V10 of the firmware to allow this?

Have you plugged the SL with automap in to see what happens?
I know the automap is aimed at plugins and already premapped for a selection of software?

So with the Novation -can you not manually set up the automap and use the learn function on both Axefx and SL?

they must both be looking for midi info ...once he SL recognises the Midi signal from the axe can you not just assign to a knob on the SL?
thought this is how it works? missing something..

thanks
 
lukather said:
please forgive me bit of a midiot...

the axefx is not able to broadcast or recieve midi?
Absolutely, it *can*.
lukather said:
the editor uses sysex info to alter perameters in the editor not midi?
SysEx, correct, which is a part of the MIDI protocol, separate from PCs/CCs/Note/other things.
lukather said:
If so how is the MFC able to change and amend presets and store presets? anything changed in V10 of the firmware to allow this?
See above: MIDI SysEx. No, nothing new in v10 other than the manufacturer's ID byte in SysEx messages (i.e. a small part of the SysEx messages -- an identification byte -- got changed, but has relatively no impact on existing functionality).

lukather said:
Have you plugged the SL with automap in to see what happens?
No.
lukather said:
I know the automap is aimed at plugins and already premapped for a selection of software?
Yes/No. It depends on how you're using it. Also, I don't know if the Nocturn differs from the SL.
Every software plugin you use has an internal list of controllable parameters according to its author's design. Often, this isn't exposed to the user. Some software can look at those parameters and allow you to control them. Novation's Automap hardware interfaces with Novation software that can look at those parameters. If you want to see an example list of those parameters, try the Reaper DAW/host/sequencer -- load up any plug-in, and from the plugin's Reaper "shell" (view the plugin, go to the menu bar at the top), click the Param button, go to "FX parameter list", and go to any of the five entries under that. All of the plugin's controllable parameters will be listed. Other software might not have direct access like that, but may still have automation recorded from any of those parameters (i.e. record a take while fiddling with the controls on the plugin interface, and the tweaking will be recorded as well *if* the plugin's author mapped the GUI controls to that internal parameter list). Sometimes there's a few hundred parameters... sometimes there's none. Sometimes they're well-named, and sometimes they're completely blank -- the Novation software currently doesn't "see" the blank ones.

lukather said:
So with the Novation -can you not manually set up the automap and use the learn function on both Axefx and SL?
Learn on the Axe-Fx is for CCs. Learn on the SL... give it a shot. I don't think it'll work (as I believe it's expecting an existing plugin standard), but I could be surprised.

lukather said:
they must both be looking for midi info
of course.
lukather said:
...once he SL recognises the Midi signal from the axe can you not just assign to a knob on the SL?
depends on whether it *can* recognize it or not. I don't believe it can, but again... I haven't actually tried it and there's no real reason not to give it a shot if it's convenient for you to try.
 
That's because using the SysEx commands is not supported.
There is user-driven documentation on the wiki...
http://axefxwiki.guitarlogic.org/index. ... umentation
...including a disclaimer. Also, some parts of that documentation (mostly the manufacturer ID now) are outdated.

Hi godprobe. Thank you for the information.

That link is not working anymore. Does anyone know where to find a more detailed SysEx implementation of the Axe-FX II?

I have built an Arduino controller with several rotary encoders and one 0.96" OLED display for each encoder. I would like to directly read and control internal parameters like Gain, Bass, Mid,Treble, Master, etc from the rotary encoders.

ps: this will be an open project (like the $50 foot controller at the other thread). Once it starts working, I will share the code and all the details.
 
I've been programming a BCR2000 to control internal axe-fx parameters via sysex, and although I've referenced the fractal audio wiki and scoured the forum here for information, I couldn't really figure out what I needed until I sniffed the communication between Axe-Edit and my XL with a midi monitor. Now I've got all of the amp, cab, drive, comp, gate/exp, chorus, and phaser parameters defined in an ini file for the BC Manager program (a free editor by Mountain Utilities), and I'm going through the long, arduous process of defining all the other blocks I use. Eventually I may get every block defined and post it up, but still in R&D phase now.

This wiki link lays out the byte format in hexes, but the examples use the device ID for the II (03), my XL is 06, and the XL+ is 07.

Here's a post I made to the Mountain Utilities forum where I was able to suss out the proper format for the BC2000 in particular. Sadly, it's not capable of sending the full 24 bits of data, but I'm able to get a resolution of 512 steps which is still better than the 128 steps for a midi CC. I haven't noticed any stepping or skipping yet, all parameter adjustments have been smooth I just don't have the finest resolution possible. I suppose that the most useful thing about this post for your purposes is where I outline the schema of a sample message for the developer.

This link, and this link are somewhat helpful but are out of date and refer to the Standard and Ultra spec, which only supports two bytes of parameter value data, while the Mark II and above support three bytes of parameter value data (and you cannot set the LS byte of the manufacturer ID as implied in at least one of those references). So take these references with a grain of salt and verify with a midi monitor.

In the midi monitor, what I found was that Axe-Edit would send a MIDI_SET_PARAMETER message and then the unit would respond with another message containing the text value of the parameter after being set. There were also some other shorter messages that I presume are some kind of validation or acknowledgement.
 
Thank you very much for the information!

I was assuming that the knobs values were 0-254 like the Axe-FX Ultra, but on the Axe-FX II they go from 0-65534.

That's complicating the things for a newbie like me!.

MIDI SysEx: obtaining parameter values
The old Standard/Ultra devices used to store the parameter values on *most* knobs as 0-254. This was split into two bytes, XX YY where XX was the lowest 4 bits of the value, and YY was the highest 4 bits. Pretty simple.

The new Axe-II now has more granular control over *most* knobs, with the values going from 0-65534. This requires a full 16 bits to store. The problem is that the MIDI specifications means you can only transmit values using 7 bits as the highest bit of each byte must be a zero.

To get around this, the Axe-II uses THREE bytes to transmit the values XX YY ZZ where XX is the lowest 7 bits of the data, YY is the 8th to the 14th bit of the data, and ZZ is the remaining top two bits of the data.

So, if you had the value 52421 on a knob, then this would be represented by the 16 bits: 1100110011000101

If you split this into segments of length 2/7/7 to store in ZZ/YY/XX: 11 0011001 1000101

So XX gets the last segment: 01000101 And YY gets the middle segment: 00011001 And ZZ gets the first segment: 00000011

You will also have to back-calculate the respective knob values to the 16 bit values. For example, a knob that goes from 0 - 10, 0 would of course be 0, but 10 would be 65534. From there, you would work out that 5 is 32767 and 7 would be about 45871 etc.
 
Back
Top Bottom