Skip to content

Commit 90ec9a2

Browse files
committed
Traktor S4MK3: New preference for FX button order
Optionally, make "filter" the first quickeffect instead of button 1. This better aligns with how I think about the buttons -- Filter as the primary quickeffect, and the others as extra optional effects. Signed-off-by: Owen Williams <owilliams@mixxx.org>
1 parent 2d79b10 commit 90ec9a2

2 files changed

Lines changed: 34 additions & 5 deletions

File tree

res/controllers/Traktor Kontrol S4 MK3.hid.xml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,15 @@
240240
This option is useful if you don't use samplers and would like to access a set of predefined beatloop rolls. Beat size can be customized individually.
241241
</description>
242242
</option>
243+
<option
244+
variable="filterIsFirstQuickEffect"
245+
type="boolean"
246+
default="false"
247+
label="Assign the first QuickEffect to the :hwbtn:`FILTER` button instead of button :hwbtn:`1`">
248+
<description>
249+
This option is useful if you are used to Filter being the primary quickeffect and have it at the top of your QuickEfect list.
250+
</description>
251+
</option>
243252
<option
244253
variable="defaultPadLayout"
245254
type="enum"

res/controllers/Traktor-Kontrol-S4-MK3.js

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ const MixerControlsMixAuxOnShift = !!engine.getSetting("mixerControlsMicAuxOnShi
141141
// Default: false
142142
const UseBeatloopRollInsteadOfSampler = !!engine.getSetting("useBeatloopRollInsteadOfSampler");
143143

144+
const FilterIsFirstQuickEffect = !!engine.getSetting("filterIsFirstQuickEffect");
145+
144146
// Predefined beatlooproll sizes.
145147
const BeatLoopRolls = [
146148
engine.getSetting("beatLoopRollsSize1") || 1/8,
@@ -1506,14 +1508,32 @@ class Mixer extends ComponentContainer {
15061508
{inByte: 8, inBit: 7},
15071509
];
15081510
this.fxSelects = [];
1509-
// FX SELECT buttons: Filter, 1, 2, 3, 4
1510-
for (const i of [0, 1, 2, 3, 4]) {
1511-
this.fxSelects[i] = new FXSelect(
1512-
Object.assign(fxSelectsInputs[i], {
1513-
number: i + 1,
1511+
if (FilterIsFirstQuickEffect) {
1512+
// FX SELECT buttons: Filter, 1, 2, 3, 4
1513+
this.fxSelects[4] = new FXSelect(
1514+
Object.assign(fxSelectsInputs[4], {
1515+
number: 1,
15141516
mixer: this,
15151517
})
15161518
);
1519+
for (const i of [0, 1, 2, 3]) {
1520+
this.fxSelects[i] = new FXSelect(
1521+
Object.assign(fxSelectsInputs[i], {
1522+
number: i + 2,
1523+
mixer: this,
1524+
})
1525+
);
1526+
}
1527+
} else {
1528+
// FX SELECT buttons: 1, 2, 3, 4, Filter
1529+
for (const i of [0, 1, 2, 3, 4]) {
1530+
this.fxSelects[i] = new FXSelect(
1531+
Object.assign(fxSelectsInputs[i], {
1532+
number: i + 1,
1533+
mixer: this,
1534+
})
1535+
);
1536+
}
15171537
}
15181538

15191539
const quickEffectInputs = [

0 commit comments

Comments
 (0)