Map an Encoder on X1 MK3 as a "Button"
Hey Guys.
I want to Map one of the Encoders on the X1 MK3 to my needs.
But when i want to select "Button" in TYPE OF CONTROLLER Section, its not allowing me to do so, i can only set it to "Encoder".
On every other Midi Controller i can Map an Encoder as a BUTTON.
Only on the NI X1 Controllers u cant.
This is pretty annoying as i need this possibility to get a specific Function, that i always used on my other Controllers, working on the X1 MK3.
Is there any possibility to make this work ?
If not, is there any way to get this feature forwarded to the Team as a suggestion for a future Update maybe ?
Comments
-
No, NI introduced this limitation early in the TP 3 version, which has pissed me off as well.
The only workaround is to delve into qml coding, where no such limitation exists and you can have an unlimited number of 'conditions' and variables (modifiers) of any size or type, counters and such as much as you can eat without getting sick.
1 -
Thank you very much for the quick answer man.
I had a feeling that NI ****** this Function up… :/
Whats the point, well, better not asking, we wont get an answer from them anyways.
DAMN !
Well, i have noooo clue about QML Coding.
Maybe theres somebody here who can help me with this ?
Or a good Guide… whatever.
Would be awesome !
Thx !
0 -
There is no manual; the best source of knowledge is to study NI's (and other modder's) qml files that map out NI's controllers. There are also several threads in this (mapping) section with discussions about specific coding tricks.
It helps a lot if you have some coding experience with programming languages.
Ask away.
1 -
Hey, I fixed this by mapping but no longer have the file. (lost many mappings…)
Idea was to use Global MIDI Fader that tracks left-side and right-side movement.
-Starts and 50%-Movement decreases or increases the value (that's your MIDI event you want to capturevia virtual MIDI cable)
-Finally, after the movement is no longer detected, the midi fader automatically snaps back to 50% (center)
Maybe this could be emulated via QML?1 -
a small example with the loop encoder, after each tick the variable: EncoderButton (true or false)
property bool encoderButton: false Wire { enabled: module.active; from: "%surface%.loop.turn"; to: EncoderScriptAdapter { onTick: { if (encoderButton) encoderButton = false; else encoderButton = true; } } }
1 -
Hey hey ! Thank you very much Guys.
@pixel These two (LOOP ENCODERS) are exactly the Encoders i want to add the Button Function to :D
Unfortunately i have absolutely no clue about Coding or how to implement a thing like that.
Would this "Command" u posted do the thing i want ?
What i wanna do is the following:
When i turn the Loop Encoders i want them to have the possibility to act as a Button for a second when i turn them, to Map/Create this Function :
MODE SELECTOR
Type of Controller: BUTTON
Interaction Mode: DIRECT
Set to Value: LOOP
Thats all i need.
Any help is much appreciated !
0 -
or better like this.
If you turn the encoder to the right, the variable becomes true, and if you turn it to the left, it becomes false.
You'll have to explain the 1sec point to me again.property bool encoderButton: false Wire { enabled: module.active; from: "%surface%.loop.turn"; to: EncoderScriptAdapter { onIncrement: { encoderButton = true; } onDecrement: { encoderButton = false; } } }
1 -
Nothing man, dont worrie about that, im German and i just said it like that.
Forget that "a Second" thing plz :D
0 -
In this example, the variable encoderButton becomes “true” when you turn the encoder and “false” after one second when you stop turning it.
property bool encoderButton: false Timer { id: encoderButtonTimer interval: 1000 repeat: true running: true onTriggered: encoderButton = false; onRunningChanged: encoderButton = true; } Wire { enabled: module.active; from: "%surface%.loop.turn"; to: EncoderScriptAdapter { onTick: { encoderButtonTimer.restart(); } } }
1 -
Thats awesome, thank you very much @pixel
A question, if i added this Command, will it then be possible in the Software to change these Parameters
or is it just working then ?
I searched for a Coding Thread or something to get into this.
But cant find something specific on what u need to start, what file to change and how to implement a Command Line like that in Traktor.
Can you Guys give me a link me to any helpful Source ?
Thx for the Help !
0 -
This is where you will find all the qml mappings of Traktor:
'…\Native Instruments\Traktor Pro 4\Resources64\qml\'
Make a copy of this folder before you do any changes in the files contained!
You will find the X1 files in the subfolder '\CSI\X1MK3\'. The file containing the LOOP and BROWSE encoders is called 'X1MK3Deck.qml'
The hardware inputs for the loop encoders in this file are designated as
from: "%surface%.loop" or from: "%surface%.loop.turn" and from: "%surface%.loop.push"
The first one is only used with some extra modules (function packages) that are closed and can't be modified but which internally already contain turn and push command assignments.
There is so much more i could write to explain what's going on. Two important things you should do.
- Get a good editor, like notepad++
- Read the X1 files to get an idea of the structure of the whole multifile mapping.
I hope you have at least some coding experience to help you get the structure.
If it's something really simple and straightforward you want to achieve, @pixel or I will give you a working example of changed code to get you started.
1
Categories
- All Categories
- 19 Welcome
- 1.5K Hangout
- 61 NI News
- 774 Tech Talks
- 4K Native Access
- 16.4K Komplete
- 2K Komplete General
- 4.3K Komplete Kontrol
- 5.7K Kontakt
- 1.6K Reaktor
- 376 Battery 4
- 835 Guitar Rig & FX
- 425 Massive X & Synths
- 1.3K Other Software & Hardware
- 5.7K Maschine
- 7.2K Traktor
- 7.2K 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