Oxygen Pro 49 Midi Map Help

@Neu1986 Hi Francesco, I’m wondering if you could offer me any advice on getting my M-Audio Oxygen Pro 49 MIDI controller working with Ardour? I have the MIDI map you wrote for it where I can see that ‘Auto-map’ must be enabled on the device for it to work. The problem I have is that I cannot find ‘Auto-map’ anywhere on it. I don’t know whether my Oxygen Pro 49 has a different firmware version installed, is a slightly different model or I am just blind but if you’re able to tell me how you accessed ‘Auto-map’ on it I would be immensely grateful.

Many thanks

Hi, I changed something so i attach the new map here. At the moment I am still trying to figure out how to assign the central knob to the tempo (it’s Ctrl 99 for turning and Ctrl 100 for pushing).
If i remember correctly, the “Auto-Map” is toggled by long pressing the DAW/Select button and adding a new blank preset which you’ll call Mixbus and route on channel 16 for every command, in order for the MIDI Map to work correctly. The complete reference is on the keyboard manual.

Here is the map, everything works except for the central knob… I would be glad if you could tell me where to find the complete list of commands to configure it, since I can’t find it anymore! Let me know

<?xml version="1.0" encoding="UTF-8"?>
<ArdourMIDIBindings version="1.0.0" name="M-Audio Oxygen Pro 49">
<DeviceInfo bank-size="8"/>
<!-- 2022 12 04 Francesco Grasselli: Map file creation -->
<!-- Auto-map should be ON -->

<!-- Transport controls -->
  <Binding msg="bf 71 7f"         function="loop-toggle"/>
  <Binding msg="bf 72 7f"         action="Transport/Rewind"/>
  <Binding msg="bf 73 7f"         action="Transport/Forward"/>
  <Binding msg="bf 74 7f"         function="transport-stop"/>
  <Binding msg="bf 75 7f"         function="transport-roll"/>
  <Binding msg="bf 76 7f"         action="Transport/record-roll"/>

<!-- Action controls (Pads in DAW mode). -->

  <Binding channel="16" ctl="85" action="Mixer/ToggleMixbusPane"/>
  <Binding channel="16" ctl="86" action="Window/toggle-io-plugins"/>
  <Binding channel="16" ctl="87" action="Mixer/ToggleStripBus"/>

  <Binding channel="16" ctl="89" action="Common/Save"/>
  <Binding channel="16" ctl="90" action="Editor/quantize"/>
  <Binding channel="16" ctl="91" action="Main Menu/WindowMenu"/>
  <Binding channel="16" ctl="92" action="Editor/undo"/>

<!-- Bank controls. -->

  <Binding channel="16" ctl="110" function="prev-bank"/>
  <Binding channel="16" ctl="111" function="next-bank"/>

<!-- Gain controls. Faders are mapped to faders. -->
  <Binding channel="16" ctl="33" uri="/route/gain B1"/>
  <Binding channel="16" ctl="34" uri="/route/gain B2"/>
  <Binding channel="16" ctl="35" uri="/route/gain B3"/>
  <Binding channel="16" ctl="36" uri="/route/gain B4"/>
  <Binding channel="16" ctl="37" uri="/route/gain B5"/>
  <Binding channel="16" ctl="38" uri="/route/gain B6"/>
  <Binding channel="16" ctl="39" uri="/route/gain B7"/>
  <Binding channel="16" ctl="40" uri="/route/gain B8"/>
  <Binding channel="16" ctl="32" uri="/route/gain master"/>

<!-- Pan controls. Encoders are mapped to pan direction. -->
  <Binding channel="16" ctl="17" uri="/route/pandirection B1"/>
  <Binding channel="16" ctl="18" uri="/route/pandirection B2"/>
  <Binding channel="16" ctl="19" uri="/route/pandirection B3"/>
  <Binding channel="16" ctl="20" uri="/route/pandirection B4"/>
  <Binding channel="16" ctl="21" uri="/route/pandirection B5"/>
  <Binding channel="16" ctl="22" uri="/route/pandirection B6"/>
  <Binding channel="16" ctl="23" uri="/route/pandirection B7"/>
  <Binding channel="16" ctl="24" uri="/route/pandirection B8"/>

<!-- Status controls -->
<!-- Status buttons are mapped to rec, select, mute and solo toggles.  -->

  <Binding channel="16" ctl="49" uri="/route/recenable B1"/>
  <Binding channel="16" ctl="50" uri="/route/recenable B2"/>
  <Binding channel="16" ctl="51" uri="/route/recenable B3"/>
  <Binding channel="16" ctl="52" uri="/route/recenable B4"/>
  <Binding channel="16" ctl="53" uri="/route/recenable B5"/>
  <Binding channel="16" ctl="54" uri="/route/recenable B6"/>
  <Binding channel="16" ctl="55" uri="/route/recenable B7"/>
  <Binding channel="16" ctl="56" uri="/route/recenable B8"/>

  <Binding channel="16" ctl="57" uri="/route/solo B1"/>
  <Binding channel="16" ctl="58" uri="/route/solo B2"/>
  <Binding channel="16" ctl="59" uri="/route/solo B3"/>
  <Binding channel="16" ctl="60" uri="/route/solo B4"/>
  <Binding channel="16" ctl="61" uri="/route/solo B5"/>
  <Binding channel="16" ctl="62" uri="/route/solo B6"/>
  <Binding channel="16" ctl="63" uri="/route/solo B7"/>
  <Binding channel="16" ctl="64" uri="/route/solo B8"/>

  <Binding channel="16" ctl="65" uri="/route/mute B1"/>
  <Binding channel="16" ctl="66" uri="/route/mute B2"/>
  <Binding channel="16" ctl="67" uri="/route/mute B3"/>
  <Binding channel="16" ctl="68" uri="/route/mute B4"/>
  <Binding channel="16" ctl="69" uri="/route/mute B5"/>
  <Binding channel="16" ctl="70" uri="/route/mute B6"/>
  <Binding channel="16" ctl="71" uri="/route/mute B7"/>
  <Binding channel="16" ctl="72" uri="/route/mute B8"/>

  <Binding channel="16" ctl="73" function="select-set" arg="0"/>
  <Binding channel="16" ctl="74" function="select-set" arg="1"/>
  <Binding channel="16" ctl="75" function="select-set" arg="2"/>
  <Binding channel="16" ctl="76" function="select-set" arg="3"/>
  <Binding channel="16" ctl="77" function="select-set" arg="4"/>
  <Binding channel="16" ctl="78" function="select-set" arg="5"/>
  <Binding channel="16" ctl="79" function="select-set" arg="6"/>
  <Binding channel="16" ctl="80" function="select-set" arg="7"/>
  
  <Binding channel="16" ctl="99" function="select-set" arg="7"/>


</ArdourMIDIBindings>

Hi.
I’m kind of newbie here.

Can you please someone point out, why the “MIDI Learn” in working fine except for control buttons.

For example:
If I try to assign a button to the “Play” function in Arduour it works fine if I assign the first pad button. But if I try to assign the actual reserved button “:arrow_forward:” it shows the “operate controller now” on Ctrl + MiddleClick, but when I try to assign the :arrow_forward: button it closes the “operate controller now” popupp, but does not assign the command to the button.

My settings:

I tried to change the settings, but the same problem persists (or worse).
Francesco I also tryed to copy you mapping file and assign it in one of my settings but unsuccessfully.

Thanks for all feedbacks.
Luca

Hi Luca, I think I have the same problem as you. I have been able to make everything work except the transport controls: play, stop, record, forward and backward.
Have you made any progress yet?
If I find a solution I will let you know.

1 Like

Hello, have you checked what messages your keyboard sends with a midi monitor?

In the file you show, your keyboard MUST send these messages that are on these lines, if it is sending other different messages it will not work.

If your keyboard is sending other different messages, you should change what is on these lines to whatever the keyboard is sending.

<!-- Transport controls -->
 <Binding msg="bf 71 7f" function="loop-toggle"/>
 <Binding msg="bf 72 7f" action="Transport/Rewind"/>
 <Binding msg="bf 73 7f" action="Transport/Forward"/>
 <Binding msg="bf 74 7f" function="transport-stop"/>
 <Binding msg="bf 75 7f" function="transport-roll"/>
 <Binding msg="bf 76 7f" action="Transport/record-roll"/>

greeting

Hi Dave, I can’t speak for Luca and his own Oxygen Pro 49 but in my case I can see in the MIDI Tracer that no MIDI at all is being sent by the loop, rewind, forward and record buttons. Stop and play do show in MIDI Tracer though; as “Stop” and “Start” respectively. After pressing Play, Tracer displays “Clock” several times per second. This does not actually play the session though: the playhead doesn’t move and there is no audio playback. Unlike the other buttons, I cannot edit the message sent by these buttons on the controller.

I’ve tried putting “Start” and “Stop” in the relevant lines of a MIDI map, to reflect the buttons’ Tracer output but this didn’t work. As I can’t edit the messages sent by these buttons on the controller I feel I’ve come to a dead end…

Do you have any suggestions?

Many thanks

1 Like

Hi, I don’t have that midi keyboard, I have a novation zero slmkII and it has transport control keys that send MMC messages of type System Exclusive messages in the midi monitor showmidi Releases · gbevin/ShowMIDI · GitHub, I can see that my novation sends that type of data and the zeromkII device itself indicates it on the screen.

I have consulted the user manual of your keyboard and on page 11 it explains what is related to transport control But on page 4 it indicates the following:

“DirectLink Operation: These buttons map to the Transport Buttons in supported DAW applications to control playback, record, start/stop, as well as enabling (or disabling) of the loop function.

Standard Operation: These buttons send standard MIDI CC, MIDI note, MMC (MIDI Machine Control) or other advanced MIDI messages based on the parameter they are assigned to, or the active preset. Each button can be reassigned to control various parameters in your DAW, including the transport controls, by using your recording application’s MIDI Learn function.”

Since I do not own or know that keyboard in detail, the only thing I can assume is that you have the DirectLink Operation function activated and that is why it does not send standard MIDI information, so to speak, and that is why you do not see MIDI data, I suppose.

On the other hand, that keyboard has an extra range of MIDI data beyond 127, in the manual on page 8 it indicates the following:

“Many of the controls on Oxygen 49 keyboards are fully programmable, and can be assigned to any of these standard MIDI CCs. However, to simplify assignment of other, more complex MIDI message types (for example, SysEx or RPN/NRPN), M-Audio has appended such additional MIDI message types to the end of the MIDI CC number list, extending its range beyond 127.

These additional messages can be assigned to Oxygen 49 controls, just as if they were standard MIDI CCs, but using numbers in the range from 128 to 255. Generally, this is achieved by selecting the control for editing and assigning a 3-digit number.

NOTE: Your Oxygen 49 keyboard never transmits values ​​outside the range specified by the MIDI protocol (0-127).

The controller numbers from 128-255 are only used internally by your Oxygen 49 keyboard. This simplifies configuration of the knobs, buttons and faders when assigning advanced MIDI messages, and allows additional configuration options for the controls (for example, setting the Trigger or Toggle operation of a button).”

Taking this into account you should check your keyboard’s configuration and check if you are in DirectLink Operation mode or in the standard mode, I don’t know what kind of message it sends in DirectLink mode.

The manual for your keyboard seems reasonably complete and detailed and it seems very configurable, so it’s time to read and test the manual and the keyboard calmly.

It took me weeks to get my presonus Atom working with the novation zero mkII with the same midimap, even so I’m still trying to finish assigning some things that I can’t get to work, but I’m working on it, when I consider that it is reasonably well configured I will offer it in case you want to add it to the list of ardour midimaps.

I have to say that I was a sound engineer, especially live with semi-digital devices but mainly analogue, I have some studios (not approved in my country at an official professional level), that is to say I don’t have a master’s degree or similar, I have my years of experience using midi but I may be wrong in specific details especially if we refer to special functions that manufacturers incorporate into the devices.

I don’t know how much experience you have using midi or how long you’ve had that keyboard, understanding the midi system can be complicated for most, although its basic principle is in theory “simple”, more or less…

Here is a video about the M-Audio Oxygen Pro 49

I don’t know if I’ve helped you in any way, I hope so.

Regards

Hey,
will try tomorrow again. I have also the issue with knobs (the rotating ). Can’t be detected.

Will post tomorrow a detailed report.
Luca

ps: I was thinking might be the “not updated” free version. I’m thinking about to switch to a 1€ subscription. Seems the most elegant solution :wink:

Hi Dave, thank you for your help - it’s very kind and generous of you to dig into this for us.

I can’t find a reference to “DirectLink” or “Standard” operation modes in the manuals I have for the controller but the descriptions of them you’ve posted sound much like the “DAW” and “Preset” modes described in my manuals and which are the two primary operating modes of the controller. Perhaps they are named differently in different countries/languages/versions of the manual? Or perhaps they are types of global setting that I’ve been unable to identify on the controller so far… Are you able to post the download link for the specific manual you consulted?

Thanks again :slight_smile:

Hi, it seems that I have confused the manual for the maudio 49 with the maudio pro 49, which are different series of keyboards. I’m sorry for the mistake, I’m dyslexic and sometimes it gives me problems…

In any case, reviewing the information, it seems that what in the maudio 49 they called direclink (auto button), the maudio pro 49 is called DAW SELECT, as I have seen it is the same function but much improved with different configurations for different DAWs, including REAPER. Have you checked if it works in Reaper?

A detail in the image showing of the midi connections, maybe I’m wrong but, I think you should mark the midi MMC port?, maybe I’m wrong, I don’t know.

I have a CME M-KEY midi keyboard, which does not have a dedicated transport control, although I can assign some of the controls to it. Also, my keyboard had (because it no longer works, the sending of midi data via USB) the possibility of sending or not sending midi data via USB, apart from the 5-pin midi connector. I don’t know if the maudio pro 49 has any configuration related to the data that comes out both via the USB and the midi connector.

Check the configuration to see if there is any configuration related to data filtering on the output via the USB or the midi connector.

To directly check what your midi controllers send, you can use the SHOWMIDI program https://github.com/gbevin/ShowMIDI, which has a standalone version and also a plugin and can see the midi ports that you have in your system, to check what data the maudiopro49 sends.

I can’t help beyond this point, because I don’t have that device and mine is older with fewer capabilities. I’m sure someone more pro than me can help in this specific case of why the transport functions of this keyboard don’t seem to work with Ardour.

Regards