Faderfox DJ4 mapping

Hi. New to this forum! Just got a Faderfox DJ4 controller and I’m looking to try it out with Mixxx. Has anyone created a mapping for this controller yet? (couldn’t find anything on this forum). Any idea if any of the preloaded configurations would work with Mixxx? Cheers!

I have a DJ4 coming this week so I’ll be able to test. The existing DJ2 mapping should work for basic functionality, but the mapping will probably need to be modified to add some new functionality not present on the DJ2.

1 Like

Thanks for that. I would be very interested to know what you find out when you test the controller. I tried to use the existing DJ2 mapping but none of the basic functions seem to work for me. If you can also test this that would be great!

I got my Faderfox DJ4 today! Had a spin with it in Traktor then looked into making a mapping.

The DJ2 mapping doesn’t work out of the box but I should be able to make an equivalent mapping. However, C and D decks will require scripting.

I’ll put up a simple mapping and experiment with a scripted mapping, though I can’t make any promises on the latter.

Update: Figuring out how to make a script mapping. Just got the shift key mapped, which is the only real tricky part. I’ll keep the thread updated.

Update:

About 60% done.

Controlling the lights needs to be done manually (for example, if I hit the filter button, the filter light does not come on, because I need to have Mixxx send a message to the controller). So I’ll look into that after.

One other final thing is that scripting allows us to do “soft throw” (iirc) for faders and knobs, so when you switch between A and C decks and throw the fader, you won’t get a sudden jump.

Current progress (until I make a repo) is in this Gist, which should actually be fairly useable, given the middle section is mapped out FaderFox-DJ4-scripts.js · GitHub

Current progress:

Top Section

  • Global Knob 1 Press: Library open folder in sidebar
  • Global Knob 1 Shift Press: Library maximize
  • Global Knob 1 Turn: Scroll library
  • Global Knob 4: Master volume
  • L/R Deck Knob 1 Press: Load current song into deck
  • L/R Deck Knob 1 Turn: Scroll library
  • L/R Deck Knob 2 Turn: Seek
  • L/R Deck Knob 2 Shift-Turn: Jump to cue
  • L/R Deck Knob 3: Fine tune pitch
  • TODO: Key transpose, loop controls, monitor mix/vol, FX

Middle Section

  • Filter and EQ knobs
  • Crossfader
  • Filter/Cue/Kill buttons (and, if held shift, kill high/mid/low)
  • Volume fader (and if held shift, pitch fader)
  • TODO: Shift functionality for knobs? (At least shift-filter for gain)

Bottom Section

  • Sync button
  • Play button
  • Nudge Left
  • Nudge Right
  • TODO: Assign the two gray buttons? FX assign, shift-sync and shift-play (maybe for keytrack or similar)

NOTE: My script additionally captures the state of A/C and B/D selectors, and the shift button, so we can assign shift functionality even to controls which don’t track shift-key (like the channel faders), or don’t refer to a current track


Update 2:

Update available at the gist. FaderFox-DJ4-scripts.js · GitHub

All major functionality, including lights, has been added, with the exception of FX settings, which I still need to think about.

Loop settings work like this: press encoder 4 to set a start loop point, and shift-press encoder 4 to set the end point. You can then change the loop size by turning encoder 4, or slide it by beat with shift-turn.

Shift-filter adjusts pre-gain.

Filter/Cue/Kill buttons work with lights, and shift-pressing them kills high/mid/low EQ.

When L. Deck or R. Deck is selected, encoder 3 will fine-tune pitch. Shift-turning encoder 3 will transpose.

Play and sync buttons work with lights.

Remaining work:

  • Shift button light
  • FX assign or some other functionality to replace it
  • Gray buttons at bottom (maybe leave unassigned, for user assignment?)
  • Top area FX encoder controls
  • Soft-turn faders and knobs
1 Like

Good work! Just trying out the basic functionality with your script. Here’s what I found with a quick test:

Top section:
Everything seems to work as mapped apart from maybe the library scroll? This seems a bit inconsistent. Mixxx

Middle section:

  • Crossfader and EQs are working. Left volume fader does not seem to work, right volume fader works but is reversed (up when it should be down and vice versa). It’s either on or off too (no incremental step).

Bottom section:

  • Play/stop and nudge left/right and sync are working (though play/stop seems to work only for deck A)

Thanks for testing it out! I’m learning Mixxx’s scripting environment and the FaderFox DJ4 as I go, so it’s been a wild ride lol.

Your response helped me track down a lot of bugs, and I appreciate it!

Everything works including lights. EXCEPT for FX, which I’m still thinking through. Loop behavior may change to act more like other controllers.

I’m happy to hear out feature requests, time permitting.

This should be more stable. I’m working towards making an official mapping for the DJ4.

Here’s a new update: FaderFox-DJ4-scripts.js · GitHub

NOTE: Please press the two red top buttons on the FaderFox after starting Mixxx, this syncs up the FaderFox state with Mixxx’s. Unfortunately I don’t know how to do this automatically yet (I’m certain it’s possible). This routine is in the manual and is required for Traktor at least, but with scripting I might be able to remove the need for it.

Basic usage (just for general reference):

Part 1

  1. Press the blue “Global” button to enter global mode.
  2. Press shift-press-encoder1 to open the library.
  3. Use press-encoder1 to swap focus between library panes.
  4. Turn-encoder1 to navigate library.
  5. Press either the L. Deck or R. Deck buttons to choose a deck.
  6. Turn-encoder1 to navigate library.
  7. Press-encoder1 to load a track onto a deck.
  8. With either L. Deck or R. Deck selected, encoder2 seeks. Shift-encoder2 jumps between cues.
  9. With either L. Deck or R. Deck selected, encoder3 fine-tunes pitch. Shift-encoder3 changes keys.
  10. SUBJECT TO CHANGE: With either L. Deck or R. Deck selected, press-encoder4 starts a loop point, shift-press-encoder4 starts a loop end point. Encoder4 changes loop size by bar, and shift-encoder-4 moves loop by bar.

Part 2

  1. Crossfader should work as expected
  2. Volume faders will alter the volume of a channel
  3. Shift-volume to alter pitch/speed of a track
  4. Filter, High EQ, Mid EQ, Low EQ should work as expected
  5. Shift-filter to adjust channel pregain
  6. Filter, cue, and kill buttons should work as expected (with lights!)
  7. Shift-filter, shift-cue, shift-kill to enable/disable specific EQ channels

Part 3

  1. Switch between decks by holding shift and pressing a deck selector button
  2. Cue, play, and nudge using the bottom area buttons (with lights!)

Fork the Mixxx repository and put the mapping files in res/controllers so you can make a pull request when it’s ready. More details are on the Contributing Mappings wiki page.

Look in the manual from the manufacturer or try asking the manufacturer’s support if there is a MIDI message you can send to query the controller for the state of all the knobs and faders. If the controller firmware doesn’t support that, you’re out of luck on that. :confused:

Thanks Be0! I will make a pull request shortly!

Unfortunately, FaderFox is notorious for not documenting their MIDI specs. The manual is like 5 pages long and tells you to sniff the MIDI packets yourself. I’ll do some more digging.

Just for reference, pressing the two red buttons issues messages saying what the FaderFox thinks the decks are, and resets the shift button state (so, 5 MIDI CC messages, one for decks A, B, C, D, and one for shift state)

Update! I think it is complete pending suggestions. Latest version available here: FaderFox-DJ4-scripts.js · GitHub

NOTE: I checked the manual, and you will indeed need to press the two red buttons on the FaderFox DJ4 to sync its deck state with Mixxx. This is confirmed in the FaderFox DJ manual.

I will start working on a PR and a manual page.

Give it a shot and let me know if you see any errors.

Knobs have “soft-throw”.

I’m open to suggestions.

Functionality is split into 3 sections: Top, Middle, and Bottom.

  • Top
    • Master
      • Encoder 1 shift-press: Toggle library
      • Encoder 1 press: Change library focus
      • Encoder 1 turn: Move in library
      • Encoder 4 turn: Master mix
    • Deck A and B
      • Encoder 1 press: Load library track into deck
      • Encoder 1 turn: Move in library
      • Encoder 2 shift-turn: Move cues
      • Encoder 2 turn: Move by measure
      • Encoder 3 shift-turn: Change key
      • Encoder 3 turn: Fine tune
      • Encoder 4 press: Toggle loop
      • Encoder 4 shift-turn: Move loop by measure
      • Encoder 4 turn: Change loop length
    • FX (Banks 1-4, Encoders 1-4, 64 assignments total)
      • Encoder M press: Toggle Bank N FX M
      • Encoder M turn: Change Bank N FX M
      • Encoder 4 turn: Change Bank N pre-mix
  • Middle
    • Crossfader
    • Fader for mix of channels 1-4 (first fader is 1 and 3, second is 2 and 4)
    • Shift-fader to change speed
    • Filter
    • Shift-filter adjusts gain
    • High, Mid, Low
    • Filter kill, cue, kill (hold shift for high kill, mid kill, low kill)
  • Bottom
    • Sync
    • Shift-Sync to switch to Deck A or B
    • Play
    • Shift-Play to switch to Deck C or D
    • Nudge left/right
    • Shift blue keys and grey keys for FX assign

That’s bizarre. Why would they implement instead of a MIDI message to do the same thing? I’ve never heard of a controller doing this.

From the manual (http://www.faderfox.de/PDF/DJ4%20Manual%20V03.PDF):

I did try creating and sending several variations of the messages back at the FaderFox DJ4 but it didn’t trigger the deck change. From Mixxx and also from Max/MSP. (For the record, the sysex corresponding control messages are 0xB0 0x74 0x0N, or 0xB0 0x75 0x0N, or 0xB1 0x74 0x0N, or 0xB1 0x75 0x0N, where N is 1 or 0)

Great work there mate. I think everything works now as it should. I’ll test it a bit more thoroughly later but it looks like the mapping is getting there!