-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add controller support for Pioneer DDJ-400 #2143
Conversation
…+ shift), decrease (pad 7 +shift) * fixed a bug in beatloop with 1/4 and 1/2 Beat loops * fixed a bug in BEAT SYNC + Shift (cycle tempo range) * added support for saving and playing loops on Hot Cue Pads * added support for loop in + out adjust (while looping press and hold in or out + jog wheel to adjust the loop poit position) * fixed a bug in Tempo Range switch (Beat Sync + shift)
|
could someone review this? |
Thank you for providing this mapping! We need the permission to distribute your contributions by signing the Mixxx Contributor Agreement I have some initial technical remarks:
And please be patient if you don't get feedback within a few hours. We are all volunteers that spend their rare spare time for this project. |
Thank you for your Feedback. |
I've tried this PR with my DDJ-400 and found it mostly working. At first glance, things not working:
|
It's ok to add missing features later, but at least the undefined access errors should be fixed. |
@nschloe Thanks for testing! |
Thank you for testing!
The press on the rotary selector cycles the focus between the Library Folders and the Tracks. (same as Rekordbox). You load the Track using the "LOAD" button
I accidently forgot to remove the reference for the removed modeChange function in the XML File. |
Perfect, that works.
Confirmed fixed. |
I updated the Wikipage. |
Simply |
Btw, I've been using this PR succussfully with my DDJ-400 for a while now. How can I help getting this merged? |
I've been using this branch with my DDJ-400 on Ubuntu 18.04. Works for me as well. |
feat: added blinking lights to sampler (thx to jsbrian)
feat: better fx handling (thx jsBrian)
Is there something missing or wrong with the code? How can I get this merged into mixxx? |
Hello all, first thank you for your work. I'm quite a noob. I'm putting the .xml and .js files in the controllers folder but get this issue : ` unexpected character at line 44, column 89` Any help welcome ! thanks again ;) |
@WarkerAnhaltRanger Please interactively rebase your branch and remove all unrelated changes that affect files other than the added .xml and the .js file. |
@unlimited67g Please verify that you downloaded the actual contents of the files (Raw) and not some HTML view from Github. I don't spot any errors on line 44 in the .xml file. |
Sorry for the delay. I'll review this today or tomorrow. |
Unless you have mapped new features for Mixxx 2.3, please change the target branch of the pull request to 2.2 and rebase on the 2.2 branch. That way this can be included in Mixxx 2.2.3. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some preliminary comments; I haven't read through the whole wiki or script yet. There are lots of little style issues. Please review the JS coding conventions
PioneerDDJ400.numFxSlots = 3; | ||
|
||
Object.defineProperty(PioneerDDJ400, 'selectedFxSlot', { | ||
get: function() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This works with the ancient QtScript interpreter? I remember trying this years ago and couldn't get it to work.
}); | ||
|
||
PioneerDDJ400.padFxBelowPressed = ignoreRelease(function(channel, control, value, status, group) { | ||
const groupAbove = group.replace(/\[EffectRack1_EffectUnit(\d+)_Effect(\d+)]/, function(all, unit, effect) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
const
is not actually supported by the interpreter; that it happens to work is only a coincidence. Please change all const
s to var
to avoid confusion.
|
||
PioneerDDJ400.padFxBelowPressed = ignoreRelease(function(channel, control, value, status, group) { | ||
const groupAbove = group.replace(/\[EffectRack1_EffectUnit(\d+)_Effect(\d+)]/, function(all, unit, effect) { | ||
const effectAbove = parseInt(effect, 10) - 4; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think the 10
parameter for parseInt
is needed.
}; | ||
|
||
PioneerDDJ400.cueLoopCallLeft = function(_channel, _control, value, _status, group){ | ||
if(value == 0) return; // ignore release |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please do not use one line if
statements.
// loop halve | ||
engine.setValue(group, 'loop_scale', 0.5); | ||
} | ||
else{ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Move this to the previous line: } else {
} | ||
} | ||
//engine.setValue(group, 'loop_in_goto', 1); | ||
engine.setValue(group, 'playposition', newPosition); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I do not understand the purpose of this. This controller has hotcue buttons, so what does this add?
|
||
// loop_in / out adjust | ||
const loopEnabled = engine.getValue(group, 'loop_enabled'); | ||
if(loopEnabled > 0){ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
spaces around parentheses: if (loopEnabled > 0) {
return; | ||
} | ||
|
||
// save playing loop on hotcue pad |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think this hack should be removed. What is the point of saving a loop if it is lost when Mixxx shuts down? We are currently working on adding this feature to Mixxx in #2194. If you would like to help implement and/or test that feature, that would be great!
|
||
Object.defineProperty(PioneerDDJ400, 'selectedFxSlot', { | ||
get: function() { | ||
return engine.getValue('[EffectRack1_EffectUnit3]', 'focused_effect'); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why does this use EffectUnit 3? This requires the user to show all 4 effect units on screen even though the controller can only manipulate one of them. Wouldn't it make more sense to map the controller to EffectUnit 1?
<control> | ||
<description>RELOOP/EXIT +SHIFT (DECK1) - press - Active loop on/off</description> | ||
<group>[Channel1]</group> | ||
<key>reloop_toggle</key> <!-- TODO Check if correct --> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I suggest mapping this to reloop_andstop
Hello, thank you i did that and no more of this error ! But when i plug the controller and the open mixxx and then enable the midi controller in the preferences, i can't control anything with the controller... Thanks |
I'm sorry. I'm afraid I can't finish this pull request since my RL took over. |
Thanks @WarkerAnhaltRanger! I've now created a new PR (#2312) where I'll try to work out the remaining things. |
This is a initial Support for the Pioneer DDJ-400
Testers are welcome!
Working:
* Mixer Section (Faders, EQ, Filter, Gain, Cue)
* Browsing and loading + Waveform zoom (shift)
* Jogwheels, Scratching, Bending
* cycle Temporange
* Beat Sync
* Beat Loop Mode
* Sampler Mode
* Beatjump mode
Testing:
* Keyboard Mode (check pitch value)
* Keyshift Mode (check pitch value
* Hot Cue Mode (including loops)
* Loop Section: Loop in / Out + Adjust, Call, Double, Half
* Effect Section (Beat FX left + Right - select the Effect Slot of FX3 (not Effect BPM))
* Output (lights)
Partially:
* PAD FX (only slots A-H, Q-P)
* Effect Section (without Beat FX left + Right - no equivalent function found)
Not working/implemented:
* Channel & Crossfader Start