New Behringer CMD Studio 4a mapping

I’ve been working on a new mapping for the Behringer CMD Studio 4a and thought I’d share it here.

I came across one of these nice controllers cheap on eBay recently (with no software) so downloaded Mixxx for the first time. I found Borfo’s excellent mapping from 2013 (viewtopic.php?f=7&t=5803&hilit=behringer+cmd+studio+4a), but it looks like no work has been done on it for some time and I found it difficult to customise for my needs (nearly 850 lines of script was a bit much for me to take in as a noob to Mixxx! :slight_smile: )

This is the fifth version of the mapping (v1.4)
Documentation for this mapping can now be found on the Mixxx Wiki here: … _studio_4a

I’m pretty new to Mixxx so so if anyone is interested in this mapping I’d welcome any suggestions for improvements.
Behringer-CMDStudio4a-scripts.js (13.2 KB)
Behringer CMDStudio4a.midi.xml (128 KB)

I’ve updated the mapping files in the original post (to V1.1), and edited the original post to reflect the new changes which are:

  • The 2 deck FX Assign buttons now assign effects from the fist two effect modules in the rack.
    This frees up the 4 FX buttons for other uses (I don’t use effects that much, limiting the deck to 2 FX modules seems a reasonable compromise to me).

  • The 4 Deck FX buttons are now assigned as follows:

    1. Slip toggle.
    2. Unassigned.
    3. Beat-grid adjust.
    4. Quantize toggle.
  • Pressing the Play button while the DEL “shift” button is active now triggers reverse playback (this reverse playback will also “slip” when Slip-mode is active on the deck).

  • The mapping files are now better organised and more fully commented to make them easier to customise.

I’ve updated the mapping files in the original post (to V1.2), and edited the original post above once again to reflect the new changes which are:

  • The mapping files are now compliant with Mixxx naming conventions (I hope).

  • The 2 deck FX Assign buttons on the left deck (A or C) assign the first fist two effect modules in the rack to that deck.

  • The 2 deck FX Assign buttons on the right deck (B or D) assign the last two effect modules in the rack to that deck.

  • The 4 Deck “FX Control” buttons are now assigned as follows:

  1. Toggle slip mode.
  2. Toggle repeat mode.
  3. Beat-grid adjust.
  4. toggle Quantize mode.
  • The 4 Deck "FX knobs are now assigned as follows:
  1. Deck (pre)gain.
  2. First FX unit super control (effect unit 1 on the left deck, unit 3 on the right deck).
  3. Second FX unit super control (effect unit 2 on the left deck, unit 4 on the right deck).
  4. Quick FX control.

(See the Wiki page for the full documentation).

I’ve updated the mapping files in the original post (to V1.3), and edited the original post above once again to reflect the new changes which are:

  • New reverse-play and reverse-slip play functionality.

  • General file clean-up before the pull request.

(See the Wiki page for the full documentation).

I’ve updated the mapping files in the original post (to V1.4), and edited the original post above again to reflect the new changes which are:

  • More file clean-up as a result of the pull-request.

  • Change in the DEL button behaviour. To clear a hot-cue, you now have to hold the DEL button down while pressing the hot-cue button. This eliminates accidental hot-cue deletions when in DEL-mode (which is used for a number of other functions).

  • If you hold one of the 4 FX-Assign buttons down, you can now change the effect in that effect-unit by using the “Browse” left/right buttons.

  • In “DEL-mode” (i.e. tap the DEL button to light it up, not holding it), the hot-cue buttons can now be used to activate the 8 “auto-loops” that are present in the “LateNight” skin (and possibly others). They are laid out in the same manner as in that skin, i.e.:
    Top row hot-cue buttons 1-4 = auto-loops [1/8] to [1]
    Second row hot-cue buttons 5-8 = auto-loops [2] to [16]
    Unlike the “LateNight” skin, the controller auto-loop buttons are only active when held (which is generally what you want with short auto-loops), but you can “lock” them (so you don’ have to hold the button, perhaps only useful for the longer auto-loops), by tapping the LOOP ON/OFF button once you have pressed auto-loop button you want. You can also adjust the loop size while an auto-loop is “locked” by pressing a different auto-loop button then locking that with the LOOP ON/OFF button once again.
    Auto-loops are particularly useful with slip-mode active. There is no GUI control for slip-mode in the “LateNight” skin, but this mapping already has it selectable on each deck via “FX Control” button 1 (the button lights up blue when slip-mode is active).
    In slip-mode, the auto-loop buttons will “re-sync” playback when released by turning slip-mode off and then immediately re-applying slip-mode (you may see the slip-mode button flash briefly when this happens). This auto-loop/slip-mode interaction (together with the auto-loop on hold behaviour) is far better than the behaviour of the “LateNight” skin (which is unaware of slip-mode in general), as it allows for some very nice looping effects while keeping the underlying beat of the track intact. (You really need to play with this to appreciate how cool the effect can be and how it opens up new looping possibilities. Not having to repeatedly toggle slip-mode on/off to re-sync playback after looping in slip-mode is a real benefit. I think this is an innovation in this mapping that may not be available on other controllers (or skins) at the moment).

(See the Wiki page for the full documentation).

Thank you so much for this – I just got a 4a (which I’m loving so far) and it was amazing to have a mapping ready to go as soon as I opened the box.

One thing that was problematic for me: touching the top of the platter would stop the track even when the “scratch” button was off. Wrapping [code]if (BehringerCMDStudio4a.scratchButtonState[channel]){

}[/code] around all the code in BehringerCMDStudio4a.wheelTouch() solved the problem for me.

I also reworked the FX controls (because I wanted parameter-level control, instead of using the super knobs) but I want to test the scripts out more before posting my mods.

Great work! :smiley:
I will recive my controller (maybe) next week and I going to test that (and give feedback :sunglasses: ).

Could you share your modification because I’m a nuts in coding and for helping the main developper :wink:

hello everybody !!!

easy way to adjust the sensibility of the jogs …

tweak the fraction to smooth the jogs sensibility, high numbers smooths jogs more

BehringerCMDStudio4a.wheelTurn = function (channel, control, value, status, group) { var deck = channel+1; var newValue = (value-64); var newValueSlow = (value-64)/8; //tweak the fraction to smooth the jogs sensibility, high numbers smooths jogs more if (BehringerCMDStudio4a.scratchButtonState[channel]){ if (engine.isScratching(deck)){ engine.scratchTick(deck,newValue); // Scratch! } } else { engine.setValue(group, "jog", newValueSlow); // Jog. } };

however i’m still banging my head over the scratch button … it works always like scratch with default config or jog using the [code]
if (BehringerCMDStudio4a.scratchButtonState[channel]){

}[/code] workaround

Here are my modifications to the original script. I have listed only the changed functionality below. I have tested the script thoroughly with the Late Night skin but I don’t know how it will work with other skins. I hope this is helpful for others – many many thanks to Craig for the original script, I just wanted something more specific to the way I mix.

Effect Handling
I completely rewrote the effect handling because I wanted direct control over the parameters. Both sides (left and right) call the same functions, giving you direct control over any two of the four effect banks at any given time. All four effect banks can be assigned to any of the four decks.

The four effect buttons are used to select an “active” bank; the knobs and assign buttons then control the active bank. Pressing a button selects that bank as “active”; holding the button functions as “FX Shift” (“FXS”), which has two uses:
FXS+BrowseL/R changes the assigned effect chain in the selected bank.
FXS+Knob changes knob behavior (see below).

FX Assign 1 turns the active bank on/off for the current channel.

FX Assign 2 can be used to turn the other banks on/off for the current channel by holding Assign 2 and pressing the bank select button (useful if you just want to turn a given bank on/off without changing the bank you are actively controlling)

The right-most knob on each side is mapped to Quick Filter. The other three knobs (1-3 from left to right) control various parameters as follows:
K1-K3 = parameters 1-3
FXS+K2 = parameter 4
FXS+K3 = wet/dry mix
FXS+K1 = pre-fader gain

All knobs are coded for soft takeover because engine.setParameter() does not currently support the default soft takeover behavior.

The active selected bank blinks blue. Other banks that are “on” have solid blue lights; banks that are “off” have orange. If the active selected bank is turned on, FX Assign 1 lights blue.

Other Changed Functionality

Scratching when scratch button is on (blue), jogging when scratch button is off (orange).

If scratch button is on (blue), DEL+Wheel will engage scratch but not disengage, which allows for manual spinbacks and other wheel throws. Hard to describe, but pretty obvious if you try it out: turn on scratch, hold DEL, touch the top of the wheel and then give it a decently hard spin. Tap the top surface of the wheel to resume playing the track.

Track Loading: DEL+Load ejects the track.

Brake: DEL+FX Assign 2 brakes the deck. (I know this is a weird combo – originally I mapped this to DEL+Play but I had some unfortunate mishaps where I forgot to hold the button and decided that it needed to map onto a button with no other transport functionality.)

Quantize: DEL+Keylock turns Quantize on/off (no light indicator on CMD Studio 4a, so you need to check the skin)

Functions removed: Slip mode, repeat, beat grid adjustment
Behringer-CMDStudio4a-abie-scripts.js (26.3 KB)
Behringer CMDStudio4a-abie.midi.xml (128 KB)

i’ll try your new scripts just after easter holidays !!! TNX

Feature request:
In DEL-Mode:
Use Loop In/Out Buttons to step forward/backward the current set number of beats.
Optional: Pressing both increases the “current number of beats to skip” value thing.

What do you think?

where can i get a cmd studio 4a mapper ? how to install it ?


Thanks for all of your efforts. I am trying to set this up for 9 yr old son. Everything seems to work as expected except for the wheels. How would i map the controls to rewind a whole track via the wheels if he wanted to?

Sorry, dj newb.

Turn on scratch mode and it should do what you want.

FYI, I’m not sure which CMD Studio 4a mapping is included in the newest release, but I don’t think it is Abie’s most recent from the last page. So far, Abie’s is the only mapping that has consistently worked for me in Mixxx, and it should probably be the default (or at least included in the stock download!) Thanks so much for all your work and giving me the wonderful toy/tool to play with.

Thanks for the compliment! I tried to submit it for this release and couldn’t figure out how to get github, etc., all straightened out. I am working on an update, which I want to field test at a gig next week before uploading, but I will share it here once I’m sure it really works – it is set up to use the expanded FX interface, but doesn’t use the Components library (I found out about that later, after the update). So I’m also planning to play around with the Components framework and see what that’s like. I’ll continue updating here as I go, and will try again to figure out how to officially submit my mapping when I’m satisfied with the newest version.

Hi Abie and Claphands,

To sum up all the discussion. Do we currently have an effective mapping for Behringer 4a to be connected to Mixxx ? If so, does Mac users need to follow a different procedure ? I saw you have submitted some xlsx files. Where do we insert that in the Mixxx ? I think all Behringer users would greatly appreciate if you clarify these issues ? Thanks.

Thanks for the great job. I have adapted this to my requirements and want to share these changes with you. I have tested this mapping only on LateNight skin.

Changes from Behringer CMDStudio4a.midi.xml of Mixxx version 2.2:

  • Brows knob only navigate on tracktable (right part of library).
  • Enter button loads the currently highlighted song into the first stopped deck (see LoadSelectedIntoFirstStopped).
  • Browse left/right buttons browse playlists up/down (left part of library). See Auto DJ feature with other function below.
  • FX Assign 1/2 button for all decks control only FX1/2.
  • FX Assign 1/2 button + Browse left/right button => change first FX 1/2 effect
  • Pitch Bend Buttons change speed (I change key ‘pitch’ to ‘rate’).
  • Del Button + Cue Button => goto Cue and stop
  • Del Button + Loop back/forward => beatjump back/forward (size is configured on deck)
  • Active Del button + Loop back/forward => decrease/increase beatloop size
  • Del Button + Load button => eject currently loaded track
  • If you touch the wheel on scratch modus off, than the music don’t stop (bugfix).
  • Auto DJ feature (works only on active Auto DJ):
    [*] Browse left => add selected track to Auto DJ Queue (top).
  • Browse right => add selected track to Auto DJ Queue (bottom).
  • Del button + Browse left => Auto DJ triggers the transition to the next track.
  • Del button + Browse right => Skips the next track in the Auto DJ playlist.
  • Disable this feature in JavaScript file (top of the file set autoDj to false).
    Behringer-CMDStudio4a-mbs-scripts.js (16.7 KB)
    Behringer CMDStudio4a mbs.midi.xml (129 KB)