How to override X1MK3 Mapping?
Answers
-
Cant stop to stay thank you :D Please let me now if I'm demanding too much help! I really appreciate your support on this and sent a few coffees already which have already been rewarded multiple times, so no expections from my side :)
I've managed to get my Loop Out working using SYNC+BrowseEncoder:
Pretty sure the outline is quite boring for you but might be of interest for others
X1MK3Deck.qml:333 // needed to add ! module.syncModifier to prevent browsing while sync is pressed
Browser { name: "browser" } WiresGroup { // HACK: Disable browsing while SYNC is pressed enabled: module.active && !module.syncModifier
X1MK3Deck.qml:366
// HACK: Enable Move Out -1 / +Shift Xtrafine WiresGroup { enabled: module.active && module.syncModifier WiresGroup { enabled: !module.shift Wire { from: "%surface%.browse.is_turned"; to: SetPropertyAdapter { path: "app.traktor.decks." + deckIdx + ".move.size"; value: 6 } } Wire { from: "%surface%.browse.is_turned"; to: SetPropertyAdapter { path: "app.traktor.decks." + deckIdx + ".move.mode"; value: 3 } } Wire { from: "%surface%.browse.turn"; to: RelativePropertyAdapter { path: "app.traktor.decks." + deckIdx + ".move_internal"; step: 1; mode: RelativeMode.Stepped } } // TODO: If MoveSize == 1 switch to move.size=1 } WiresGroup { enabled: module.shift Wire { from: "%surface%.browse.is_turned"; to: SetPropertyAdapter { path: "app.traktor.decks." + deckIdx + ".move.size"; value: 0 } } Wire { from: "%surface%.browse.is_turned"; to: SetPropertyAdapter { path: "app.traktor.decks." + deckIdx + ".move.mode"; value: 3 } } Wire { from: "%surface%.browse.turn"; to: RelativePropertyAdapter { path: "app.traktor.decks." + deckIdx + ".move_internal"; step: 1; mode: RelativeMode.Stepped } } } }
Thoughts:
Another idea is I can read the total-MoveSize and create a condition to Xfine when I have reached 1... sounds like a nice conversion too me, not sure if it is practical. Also maybe there is potential to optimize it by using the browse.turn only once yet I want to prevent Traktor hiccups like those I experienced with Loopsize / Beatjump when Traktor is engaged.
Problems:
Only bad thing using SYNC instead of my previous idea is that Sync gets enabled / disabled after button release. I have two ideas with that, what do you think of these? I actually guess that option (a) has less potential to have irregular results.
a) Check if is_turned has been used during Sync and enable/disable sync upon button release, I'll try that with your previously mentioned ButtonScriptAdapter - does it have some onHold-equivalent where I could if BrowseEncoder is pushed?
I have tried to use my
property bool realsync: true
plusWire { from: "%surface%.sync"; to: "sync_inverter.input"; enabled: !module.shift && module.realsync }
and find a way to false it when%surface%.browse.is_turned
is used but that way I circle a bit because I longer can usemodule.syncModifier
as condition for false-ingmodule.realsync
- maybe that is also only a result of my lack of knowledge :Db) Check if the button is toggled or hold. Not a big fan of that... timing is crucial there. It seems to be possible - looking at flux_reverse - somehow but looks like hardcoded to the
1 -
Try this for b) :
property bool holdSync: false AppProperty { id: syncProp; path: "app.traktor.decks." + module.deckIdx + ".sync.enabled" } Wire { from: "%surface%.sync" to: ButtonScriptAdapter { onPress: { holdSync = true; holdsync_countdown.restart() } onRelease: { holdSync = false; if (holdShift_countdown.running) { syncProp.value = !syncProp.value holdShift_countdown.stop() } } } } Timer { id: holdsync_countdown; interval: 200 }
A short tap less than 200ms will toggle SYNC, anything longer will simply keep 'holdSync = true' until the button is released.
There is loads more you can do with ButtonScriptAdapters and Timers, like this:
Regarding a) :
Some code (i slightly adjusted) for the X1.
property bool coarseTempoStep: false property bool resetTempoEngaged: false AppProperty { id: tempoAdjProp; path: "app.traktor.decks." + module.deckIdx + ".tempo.adjust" } AppProperty { id: tempoAbsProp; path: "app.traktor.decks." + module.deckIdx + ".tempo.absolute" } AppProperty { id: bpmProp; path: "app.traktor.decks." + module.deckIdx + ".tempo.adjust_bpm" } WiresGroup { enabled: module.active && !module.shift && module.syncModifier Wire { from: "%surface%.loop.turn" to: EncoderScriptAdapter { onTick: { module.resetTempoEngaged = false; } onIncrement: { bpmProp.value = bpmProp.value + (module.coarseTempoStep ? 1 : 0.01) } onDecrement: { bpmProp.value = bpmProp.value - (module.coarseTempoStep ? 1 : 0.01) } } } Wire { from: "%surface%.loop.push" to: ButtonScriptAdapter { onPress: { module.coarseTempoStep = true; module.resetTempoEngaged = true; } onRelease: { module.coarseTempoStep = false; if (module.resetTempoEngaged) { // Reset the tempo tempoAdjProp.value = 0.0 } } } } }
'resetTempoEngaged' measures if i turn the knob after holding it (or alternatively another button) down. Releasing the knob will trigger an effect ('tempoAdjProp.value = 0.0') only if the knob has not been turned this way ('if (module.resetTempoEngaged)' ... ).
[from my x1 modding thread:]
:)
1 -
@Sûlherokhh "A short tap less than 200ms will toggle SYNC, anything longer will simply keep 'holdSync = true' until the button is released."
This is one of the features I've requested from the NI team! It is very uncomfortable for me to switch the function buttons with the normal shift. It would be great if you shared the file with this deployment.
0 -
If i understand you correctly, you would like the Tap(Sync)-function to be incorporated into the X1Mk3 qml file. Yes? And you would like to have to use shift less for secondary functions (if so, i agree totally).
Unless i misunderstood what you asked, then this is what i will do (and share the result). 🍁
Edit: On second reading, i get the impression that you want to use the secondary functions of the bottom section buttons to be available with 'holdSync' instead of 'holdShift'. Is this what you meant? Please elaborate.
0 -
"If i understand you correctly, you would like the Tap(Sync)-function to be incorporated into the X1Mk3 qml file. Yes? And you would like to have to use shift less for secondary functions (if so, i agree totally)."
Yes!
"Unless i misunderstood what you asked, then this is what i will do (and share the result). 🍁"
Great!
"Edit: On second reading, i get the impression that you want to use the secondary functions of the bottom section buttons to be available with 'holdSync' instead of 'holdShift'. Is this what you meant? Please elaborate."
My idea is that finally, there are 3 Shift buttons. The native one, and the 2 shift on the "Sync button" that only acts when you hold it down for more than 200ms.
I don't know if I'm able to explain myself well.
0 -
You answered all of the above questions.
What controls do you want the holdSync function to provide secondary access to in addition to tempo control via Loop knob?
0 -
8 function buttons. 1, 2, 3 ,4, <, >, CUE, REV.
0 -
I will put that on my list and upload the mod in the other thread. Hopefully i get sent the x1 to test all the modding steps on before the new year has come. ^^
1
Categories
- All Categories
- 19 Welcome
- 1.4K Hangout
- 60 NI News
- 731 Tech Talks
- 3.8K Native Access
- 15.8K Komplete
- 1.9K Komplete General
- 4.1K Komplete Kontrol
- 5.5K Kontakt
- 1.5K Reaktor
- 364 Battery 4
- 811 Guitar Rig & FX
- 416 Massive X & Synths
- 1.2K Other Software & Hardware
- 5.5K Maschine
- 6.9K Traktor
- 6.9K Traktor Software & Hardware
- Check out everything you can do
- Create an account
- See member benefits
- Answer questions
- Ask the community
- See product news
- Connect with creators