Tip: Manually Programming Transport Buttons M-Audio Oxygen 25
=============================================================================
Edit: This is the correct procedure to fix double triggering caused by the Transport buttons on the M-Audio Oxygen controller series. I had originally posted something that did work but was flawed in many ways as I soon learned so this after a few days of very productive tinkering and learning here is a MUCH better way to fix the problem. This does NOT need to be done in Sonar as far as I can tell (at least not in X1) because Sonar seems to read the default button signals correctly (I just tested it with X1 and everything works as it should when using the Cakewalk Generic Control Surface setting and mapping the buttons normally using the Learn function). So if you use Sonar with the Oxygen this likely does not affect you. It will show you how to change the internal settings of the Oxygen controllers if you need to. I only stumbled on this issue because I'm using another DAW on my laptop for screwing around with (Sonar chokes out this POS system).
What this fixes:
The problem is that in this specific DAW, and I'm assuming others, when using the Transport buttons it triggers the paramater twice causing erratic and unwanted behavior. This is a well documented annoyance based on my searches for solutions and the solutions that ARE offered tend to cause even more annoying problems. Here is a list of what each button's issues are.
Record: Record will start but you have to hold down the button or recording will stop. This is because a second trigger is sent when you release the button thus stopping recording. Very annoying.
Play: This is very noticeable on quick button hits but again a double trigger occurs making playback start twice. If you hold the Play button for a few seconds then release it then playback starts over again. Starting playback twice very quickly can cause crashes in my experience.
Stop: This doesn't seem to cause problems because once you are stopped you are stopped.
FFW: The Now Time jumps ahead twice instead of just once. So once on the initial press of the button and then again upon release.
RRW: Same problem as the FFW button but in reverse.
Loop: I haven't tried this button with looping (I map that button to other stuff) but I'd imagine the results are undesirable and for the stuff I map it to it is again a problem.
So if you are getting these problems the fix is to manually program each button from within the Oxygen so that it is not sending the same instructions twice. I'm posting this here mostly as a reminder for myself about the procedure but since it is a common device and I saw many complaints about this on other forums (with no clear instructions as to the fix) I figure it would be useful to have it online for anyone searching for a solution.
Here are the step by step instructions so you can simply fix it and then below are some details about what exactly is happening and some other stuff that might be useful to anyone using this series of controllers. By the way mine is the older Oxygen 25 without the extra pads. I don't know if the newer models have the same issue:
I'll start with the Record button because that is the most annoying one of the bunch. When I type Button I mean the rubber buttons on case (we will only be using the Advanced button and whatever Transport button we are reprogramming). When I type Key I mean the keyboard keys which all have a descriptive label screenprinted above them (the larger Oxygen controllers like the 49 have some keys without a label but they do still have all the same labels as the 25). For example "press the Key labelled ENTER".
1) With the controller turned on press the "Record" button then press the "Advanced" button. This is how you select a button for editing. In the LED display you should see the number 1.4.6. (the decimals/dots in between the numbers let's you know that the button is in editing mode. If you do not see those dots try again.)
2) Press the Key labelled CTRL ASSGN (the first key on the left). The number 1.4.6. should still be displayed.
3) Move to the Keys labelled with numbers (the keys on the far right of the keyboard) and press the keys labelled "1", "1" and "8". You should now see the LED display showing 1.1.8.
4) Press the Key labelled Enter (the very last key on the right of the keyboard). The dots between the numbers should go away.
And that's it. Now the Record button will behave normally (if you were having the problems I described earlier).
It should be noted that if you have already set up these controller buttons with your DAW (whether manually or using MIDI learn) you may have to set them up again with the newly programmed buttons.
To program the rest of the buttons the procedure is exactly the same EXCEPT you obviously select the desired button before pressing the Advanced button to enter editing mode. Not so obviously you do NOT input the same number as you did for the Record button otherwise they would all be sending the same controller message (that 118 is the CC#) and that will overide any previous MIDI learn actions in the DAW for that CC.
The correct numbers to input for each button are, from left to right:
Loop Button = 113
Rewind Button = 114
Fast Forward Button = 115
Stop Button = 116
Play Button = 117
Record Button = 118
So use the same procedure but for each button use the corresponding number from the list above. As an example here is how you would program the Play button:
1) With the controller turned on press the "Play" button then press the "Advanced" button. This is how you select a button for editing. In the LED display you should see the number 1.4.6. (the decimals/dots in between the numbers let's you know that the button is in editing mode. If you do not see those dots try again.)
2) Press the Key labelled CTRL ASSGN (the first key on the left). The number 1.4.6. should still be displayed.
3) Move to the Keys labelled with numbers (the keys on the far right of the keyboard) and press the keys labelled "1", "1" and "7". You should now see the LED display showing 1.1.7.
4) Press the Key labelled Enter (the very last key on the right of the keyboard). The dots between the numbers should go away.
As you can see I just copy/pasted the same instructions and replace "Record" with "Play" and 118 with 117. Simple.
If you make a mistake while in editing mode you can safely cancel anything you have done by simply pressing the "Advanced" button again and all changes will be discarded (on the larger Oxygen models there is a Key labelled "Cancel" that will do the same thing). This ONLY cancels the currently active edits. Everything else programmed on the controller is safe.
*WARNING!! The following will wipe out any user created presets you may have programmed into the controller!!
If you program this in but you do not like the results you can restore the Oxygen to its factory defaults by turning off the device, pressing and holding the "+" and "-" buttons (the plus and minus buttons) then turning the Oxygen back on while continuing to hold down theose buttons for a few seconds. THIS WILL ERASE ALL USER CREATED PRESETS!!
If you DO have user presets programmed into the Oxygen and do not want to do a factory default restore you can reverse the edits to the Transport buttons by doing the following for all the buttons you changed.
1) With the controller turned on press the transport button you want to set back to it's default state then press the "Advanced" button. This will select the button for editing. For each button you will see the number you changed it to (for example when selected the Record button will now show 1.1.8.).
2) Press the Key labelled CTRL ASSGN (the first key on the left). The number of the currently selected button should still be displayed (for example 1.1.8. for the Record button)
3) Move to the Keys labelled with numbers (the keys on the far right of the keyboard) and press the keys labelled "1", "4" and "6". You should now see the LED display showing 1.4.6.
4) Press the Key labelled Enter (the very last key on the right of the keyboard). The dots between the numbers should go away.
Do this for all the Transport buttons you changed (use the number 1.4.6. for each one) and the transport buttons will be set up exactly as they were before you began editing them. No need to use the factory default function at all.
===================================================================================================================
The short explanation of what the heck you just did:
The short story is you just stripped out an "Assignable MIDI CC#" that was telling the Oxygen controller's transport buttons to behave as an On/Off switch which for some reason actually sends two "On" signals to the DAW I was using. That was the 146 number we kept changing. By doing that we were simply removing that onboard instruction leaving only the actual standard MIDI controller message sent by each button. That second number is the one sent to the DAW to trigger whatever function you have the button mapped to. For example the CC# being sent to the DAW by the Record button is CC# 118 by default (it can be changed though). Then when you use MIDI learn to map the Record function to the Record button on the controller it will assign it to CC# 118. For the Play button it is CC# 117 by default. That is why, even though we could have used different CC#s when programming the buttons I stuck with those because they were already being used by the controller to transmit to the DAW.
The reasons why the 146 was showing up where it was is much more complicated and frankly is a very weird design by M-Audio. It's confusing as heck and honestly I want to type up a thorugh explanation today but I have other stuff to do. Just know you didn't break anything or use up extra CC#s. Nothing has changed except how the buttons on the Oxygen behave internally.
In the meantime here is a specific chart showing ALL the default CC#s for all the controls on the M-Audio Oxygen 25.
From left to right are
a) The control's "name" as labelled on the device. This has nothing to do with CC#s or anything. It is just a number assigned by M-Audio to that control. It is just a descriptive name.
b) What type of control it is (knob, fader, wheel, button).
C) The default CC# being transmitted by that control. This is what will show up in your DAW.
d) The General MIDI parameter that control's default CC# will manipulate on a device or soft synth set up to receive General MIDI messages.
C1 (Knob 1) = CC# 74 (Cut Off Frequency)
C2 (Knob 2) = CC# 71 (Resonance)
C3 (Knob 3) = CC# 91 (Reverb Depth)
C4 (Knob 4) = CC# 93 (Chorus Depth)
C5 (Knob 5) = CC# 73 (Attack Time)
C6 (Knob 6) = CC# 72 (Release Time)
C7 (Knob 7) = CC# 5 (Porta Time)
C8 (Knob 8) = CC# 84 (Portamento Control)
C9 (Fader) = CC# 7 (Channel Volume)
*Remember that the Transport buttons use two CC#s by default. They are all set to CC# 146 to turn them all into On/Off buttons and to the Standard CC# that is transmitted to the DAW or device (which is what is listed). You will see that for the parameter being controlled they simply say "Controller" then the CC#. That is because these numbers are not assigned to anything specific in General MIDI making them good candidates for extra controls like transport buttons. Not sure if these controllers are usually used for transport on other devices.
C10 (Loop Button) = CC# 113 (Controller 113)
C11 (Rewind Button) = CC# 114 (Controller 114)
C12 (Fast Forward Button) = CC# 115 (Controller 115)
C13 (Stop Button) = CC# 116 (Controller 116)
C14 (Play Button) = CC# 117 (Controller 117)
C15 (Record Button) = CC# 118 (Controller 118)
and finally the Mod and Pitch wheels...
C16 (Pitch Wheel) = CC# 144 (Pitch Bend)
C17 (Modulation Wheel) = CC# 01 (Modulation)
The "Track </>" buttons also transmit CC# data but cannot be edited at ALL within the Oxygen (so they cannot be reassigned
to other CC#s or have their parameter/range settings changed onboard the device). You can however assign them to whatever
you want in your DAW using MIDI learn but usually they are mapped to cycle through the tracks in a project. That way if you
have Track #3 in your project "In Focus" pressing the "<" button would move you to track #2 and pressing the ">" button
would move you to track #4. Again you have to have these buttons mapped in your DAW for this to happen.
The screwy thing is the Oxygen manual is saying that these buttons transmit on CC# 14 for the left "<" track button and CC#
15 for the right ">" track button. However when I map these to the DAW it is telling it is recieving CC# 110 for the left
"<" track button and CC# 111 for the right ">" track button. That's a little whack so I don't know... maybe there is a typo
in the manual or there has been a driver update that changed how the device transmits the messages or I'm just having a
massive brainfart. So I have listed both.
Here are the CC#s and what their designated names are in General MIDI (just generic controller slots like the Transport
button CC#s). Also M-Audio did not give their own name to these controls thus the absence of descriptive C number so I just
put N/A for "Not Applicable".
What it says in the manual:
N/A (Track "<" Button) = CC# 14 (Controller 14)
N/A (Track ">" Button) = CC# 15 (Controller 15)
What it says is being received by the DAW:
N/A (Track "<" Button) = CC# 110 (Controller 110)
N/A (Track ">" Button) = CC# 111 (Controller 111)
None of the other buttons (Transpose/Octave, Advanced, Mute, Select, +/-) seem to transmit any CC# information (I tried).
So as far as I know the above list contains all of the possible MIDI controls on the Oxygen 25. The newer model and the larger
models have extra controls but I don't have those so I cannot make a definitive list for those devices.
======================================================================
I'll try to post some more details about programming the Oxygen controllers when I have time.
post edited by Beepster - 2015/01/07 15:14:43