Mapping something (e.g. loop size/out) to jog wheel

MadLee
MadLee Member Posts: 13 Member
edited February 27 in Mapping Traktor

Hello,

I have a problem mapping loop size (with the help of modifier) to the jog wheel on my kontrol s3. The jog wheel is, when in learn mode, not recognized and after manually selecting left/right jog just recognized as a button.

Does anyone have solution for that?

My Traktor version is 3.9.090

Thanks

Best Answer

  • Stevan
    Stevan Traktor Mapping Mod Posts: 2,015 mod
    Answer ✓

    No solution for "jog turn". It is not reassignable.

«13456724

Answers

  • Stevan
    Stevan Traktor Mapping Mod Posts: 2,015 mod
    Answer ✓

    No solution for "jog turn". It is not reassignable.

  • MadLee
    MadLee Member Posts: 13 Member

    ok, thanks @Stevan

  • Stevan
    Stevan Traktor Mapping Mod Posts: 2,015 mod

    Anytime! I'm using Move and Loop encoders to control In and Out points in my S4 MK3 mapping.

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 2,693 mod

    There is the possibility to change the qml file that defines the jogwheel functions. There is (to me) an obvious way to do it.

    If you hold the GRID button, you can move the beatgrid by turning the jogwheel, right? So, i would duplicate this function, but bind it to LoopKnobTouch and MoveLoopOut, meaning you just touch the LoopKnob (not turn or press it) and then turn the JogWheel. Or i could bind it to MoveKnobTouch if that is more comfortable. Or to both, if you don't care which hand you use to actually turn the wheel.

    I can cook up the code and upload the adjusted file if you are willing to test the result (i don't have an S3 at home to test myself).

    🦋

  • Stevan
    Stevan Traktor Mapping Mod Posts: 2,015 mod

    That sounds like it could work! Please keep us updated if you manage to remap the grid button function.

    I have a theory that the jog wheels are purposely left n/a so it is imposible to map to other software than Traktor... Would never buy such a purely designed device with degradation on jogwheel capabilities.

  • MadLee
    MadLee Member Posts: 13 Member
    edited June 2023

    Ok, thanks @Sûlherokhh

    sure, I will test it and keep you updated.

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 2,693 mod
    edited June 2023


    Make a safety copy of the file "...\Native Instruments\Traktor Pro 3\Resources64\qml\CSI\S3\S3Deck.qml", then replace it with the one here:

    [deleted]

    These are the lines i adjusted ...

    ➔ line 51:

        // enabled: module.active && Helpers.deckTypeSupportsGridAdjust(deckTypeProp.value) && !gridLockedProp.value
        enabled: module.active && Helpers.deckTypeSupportsGridAdjust(deckTypeProp.value) && !gridLockedProp.value && !loopAdjustEnableProp.value
    

    ➔ line 90:

         // enabled: !gridAdjustEnableProp.value && module.active
        enabled: !gridAdjustEnableProp.value && !loopAdjustEnableProp.value && module.active
    


    This is the additional section ...

    ➔ line 116:

    //----------------------------------- Loop Adjust------------------------------------//
    
      // Loop Adjust //
      AppProperty { id: loopAdjust; path: "app.traktor.decks." + module.deckIdx + ".move_internal" }
      AppProperty { id: loopMode; path: "app.traktor.decks." + module.deckIdx + ".move.mode" }
      AppProperty { id: loopSize; path: "app.traktor.decks." + module.deckIdx + ".move.size" }
     
    
      MappingPropertyDescriptor {
        id: loopAdjustEnableProp;
        path: deckPropertiesPath + ".loop_adjust";
        type: MappingPropertyDescriptor.Boolean;
        value: false;
      }
    
        Wire {
        enabled: module.active && loopActive.value && !gridAdjustEnableProp.value
        from: "%surface%.hotcues";
        to: HoldPropertyAdapter { path: deckPropertiesPath + ".loop_adjust"; value: true }
      }
    
      Wire { enabled: loopAdjustEnableProp.value; from: "%surface%.jogwheel.rotation"; to: RelativePropertyAdapter { path: "app.traktor.decks." + module.deckIdx + ".move_internal"; step: 1; mode: RelativeMode.Stepped } }
      Wire { enabled: loopActive.value; from: "%surface%.hotcues"; to: ButtonScriptAdapter { onPress: loopMode.value = 3; } }
      Wire { enabled: loopActive.value; from: "%surface%.hotcues"; to: ButtonScriptAdapter { onPress: loopSize.value = 0; } }
    
    
    


    It's possible that '%surface%.jogwheel' must be replaced with '%surface%.jogwheel.rotation', but i think both expressions work. This variant works with touching either MoveKnob or LoopKnob while a track is looping and then turning the JogWheel. I hope the direction is correct. Happy to hear your feedback.

    🦋

    Edit: typos corrected and new file uploaded.

    Edit: upload deleted, corrected code displayed.

  • MadLee
    MadLee Member Posts: 13 Member
    edited June 2023

    Already, trank u very much.

    I will test out as soon as im home in about 2 hours

  • MadLee
    MadLee Member Posts: 13 Member

    sadly at the time it won't work...while holding down loop and turning the jog wheel in loop) the loop is moved several minutes later in the track and comes than back. when I replace '%surface%.jogwheel' should I also replace the ones with for example '%surface%.jogwheel.speed' (to %surface%.jogwheel.rotation.speed) or shouldn't I change these?

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 2,693 mod
    edited June 2023

    I uploaded a corrected file 5 minutes ago because i discovered two typos. Can you please try again with the new file?

    Edit: Don't press down the knob. Just touch it, that already sends the signal needed.

  • MadLee
    MadLee Member Posts: 13 Member
    edited June 2023

    Huge thanks to @Sûlherokhh . It works, the only problem is, that by just touching the loop knob, the loop is getting smaller because the simulated "disk" aka the jogwheel "spins" (digitaly) in the tempo of the song (I think)

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 2,693 mod
    edited June 2023

    Try it out, if the knobs on the S3 are not sensitive, we'll find a different way to activate it, no worries. You can check if the touch sends a message to traktor by looking at the signal at the top of the GUI.



    EDIT: The typos i corrected both set the move command to move LoopOut instead of the whole loop and set the size of the move command to ExtraFine instead of the complete loop size, so i think this is what went wrong the first time.

  • MadLee
    MadLee Member Posts: 13 Member

    thanks but like I said it works with touching both knobs, but the loop keeps getting smaller as soon as I touch them without doing anything with the jogwheel

    I think it's because Traktor simulates the movement of real disks spinning. That "spin" has a effect on the new loop function too

  • Stevan
    Stevan Traktor Mapping Mod Posts: 2,015 mod

    @Sûlherokhh Can you see a way to output MIDI from the jog wheel when the Grid button is on or had any thoughts about messing with that?

    Instead of moving the grid, I would like to be able to output the "Global MIDI Knob" value from the jopg wheel on S4 MK3.

    That would allow to map jogwheel for a different functions.

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 2,693 mod
    edited June 2023

    '...Native Instruments\Traktor Pro 3\Resources64\qml\CSI\S4MK3\S4MK3Deck.qml'

    add in line 87 this codeblock


      Wire  {
          from: "%surface%.jogwheel"
          to: RelativePropertyAdapter { path: "app.traktor.midi.knobs." + deckIdx }
          enabled: module.active
      }
    

    This should turn the midi knobs 1 to 4 depending on which deck you are on when turning the wheel. It's possible that 'deckIdx' has values from 0 to 3. In that case i have to insert a variable with the value 'deckIdx + 1'.

    Give it a try. If the counter is off by 1, i'll update the code for you.


    EDIT: With this the midiknobs are adjusted regardless of the grid button pressed. This can replace the GRID functions if you like, with just a little bit more fiddling. But for testing, this piece of code should give you some answers already.


    It's possible that the code needs to have '.rotation' added:

    Wire  {
          from: "%surface%.jogwheel.rotation"
          to: RelativePropertyAdapter { path: "app.traktor.midi.knobs." + deckIdx }
          enabled: module.active
      }
    
Back To Top