Longer backspin with Kontrol S2 MK3?

Starphaser
Starphaser Member Posts: 1 Newcomer

Hey there! I'm the proud owner of a new S2, but one thing that's been bugging me is that I can't figure out how to get a nice, long backspin like what happens when you use the mouse on a track or like you can easily do with the S4. I've tried adjusting the jogwheel sensitivity, but that didn't change backspin length like I had hoped.. If I had an S3 I could at least easily access the FX for it, but alas I'm stuck trying to get it to work here.

Best Answer

«13

Answers

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 3,197 mod
    edited January 7 Answer ✓

    For the backspin, check this post (and the following pages of our project) aka ScratchMod.

    https://community.native-instruments.com/discussion/comment/86629/#Comment_86629

    To adjust wheel sensitivity, look here:

    https://community.native-instruments.com/discussion/comment/95225/#Comment_95225

    The ScratchMod i worked on with Quade was for the S3, but it can be adpated to the S2.

    Edit: 2nd link is now correct.

  • Gaspar74
    Gaspar74 Member Posts: 24 Member

    I am also interested in this, one thing I miss about the Vestax was the crazy backspins. I have an S2 MK3. How would one go about modifying your scratch mod to work for this. I was looking at both QML files and they're sig different it seems.

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 3,197 mod

    I will have a look at the diff and upload a S2 variant for you to test shortly.

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 3,197 mod
    edited February 24

    So, here is the file that you need to replace. It's found here: '…\Native Instruments\Traktor Pro 4\Resources64\qml\CSI\S2MK3\S2MK3Deck.qml'. Before replacing it, make a copy of the whole qml folder for safety.

    This is what i added:

    At the top (so that the timers work):

    import QtQuick 2.5
    

    Right above the jogwheel wires i added this section:

    //-----------------------------------Jogwheel Scratch Triggers------------------------------------//
    
    property bool deckScratching: false
    
    MappingPropertyDescriptor { id: jogScratchProp; path: "mapping.state.deck." + deckIdx + ".jogscratch_value"; type: MappingPropertyDescriptor.Integer; value: 0; min: 0; max: 60 }
    
    Wire {
      enabled: module.active && !jogFXEnableProp.value && !jogHoldFXEnableProp.value
      from: "%surface%.jogwheel.touch";
      to: ButtonScriptAdapter {
        onPress: {
          if (deckPlaying) {
            deckScratching = true
            deckPlayingProp.value = false
            jogScratchProp.value = 20
          }
        }
        onRelease: {
          if ( deckScratching && jogScratchProp.value < 20 ) {
            deckScratching = false
            deckPlayingProp.value = true
            jogScratchProp.value = 0
          }
        }
      }
    }
    
    Wire { enabled: module.active && deckScratching && !jogFXEnableProp.value && !jogHoldFXEnableProp.value;
      from: "%surface%.jogwheel.rotation"; 
      to: EncoderScriptAdapter {
        onIncrement: { jogScratchProp.value=jogScratchProp.value +3 }
        onDecrement: { jogScratchProp.value=jogScratchProp.value +20 }
      }
    }
    
    Timer {
      id: scratchSpinTimer
      interval: 8
      repeat: true
      running: deckScratching && jogScratchProp.value > 0
      onTriggered: {
        jogScratchProp.value = jogScratchProp.value - 10;
        if ( deckScratching && jogTouchOnProp.value && jogScratchProp.value < 20 ) {
          jogScratchProp.value = jogScratchProp.value + 10;
        }
        else if ( deckScratching && !jogTouchOnProp.value && jogScratchProp.value < 10 ) {
          deckScratching = false;
          deckPlayingProp.value = true;
          jogScratchProp.value = 0;
        }
      }
    }
    
    Wire {
      enabled: module.active;
      from: "%surface%.play";
      to: ButtonScriptAdapter {
        brightness: scratchBlinkTimer.blink ? 0.0 : (deckScratching || deckPlaying) ? 1.0 : 0.0;
        onRelease: {
          if ( deckScratching ) {
            deckScratching = false
            deckPlayingProp.value = false
            jogScratchProp.value = 0
          }
        }
      }
    }
    
    Timer {
      id: scratchBlinkTimer
      property bool  blink: false
      interval: 250
      repeat: true
      running: deckScratching
      onTriggered: {
        blink = !blink;
      }
      onRunningChanged: {
        blink = running;
      }
    }
    

    You can adjust the scratch length in the ButtonScriptAdapter of the touch wire. This is the value:

    jogScratchProp.value = 20
    

    It can go as high as 60.

    Note: when scratching, the PLAY state of the deck is temporarily turned off, which may be important if it is the tempo master.

    Please test if this works and if it is sufficient for your needs. :)

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 3,197 mod

    Edit: I corrected the upload, but i can't change the text displayed in my last post because this forum's text editor is a nightmare.

    Bot instances of

    !jogFXEnableProp.value && !jogHoldFXEnableProp.value;
    

    are replaced by

    !gridAdjustEnableProp.value
    

    in the file i uploaded, just so you don't wonder what the difference is.

  • Gaspar74
    Gaspar74 Member Posts: 24 Member

    TY so MUCH. I had been away last few days and hadnt gotten notification of reply. Let ya know how I make out!😀

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 3,197 mod

    Please do, so that we can get it to work and feel just right. :)

  • Gaspar74
    Gaspar74 Member Posts: 24 Member

    Well now Traktor isnt seeing controller. I loaded the file in the qml folder and it was working and it didf back spn but not much of one so i adjust the value from. 20 to 60 saved it and now its not recogniziong myu controller even after replacing original qml file. NOt suyre how tyo get it backl to working n ow…

    \

    `

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 3,197 mod
    edited February 27

    Did you put it in the correct location? There is a subfolder for the S2Mk3 in the CSI subfolder. If you have a file with the same content twice it will crash traktor.

    Regarding the spin length, leave the value at 20.

    Change the following parameter:

    Timer {
      id: scratchSpinTimer
      interval: 8
    …
    

    Increase interval to a value above 16 ms (for example 32).

    Note: I read in a qml manual that a value below 16 is only valid if your screen refreshes at a faster rate than 60fps. So the value 8 (old value from a few years back) is the same as 16.

  • Gaspar74
    Gaspar74 Member Posts: 24 Member

    I got it back working. Where exactly do I change the value for a longer spin in the qml file> Want make sure Im doing it correct.

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 3,197 mod

    Look for the timer with the 'id: scratchSpinTimer'

    The interval tells the timer how much time must pass until the scratch is over.

    Timer {
      id: scratchSpinTimer
      interval: 8
    …
    

    Try a value of 32 or something. Or go as high as 100 to make sure you will have a bagspin-scratch for at least 0.2 seconds.

    Spinning faster also prolongs the bagspin-scratch.

  • Gaspar74
    Gaspar74 Member Posts: 24 Member

    I have it at 60 and its definately an improvement. Id still prefer it lnger but beggarts vcant be choosers. As far as I can tell no other issuers have showedf up yet due to mod. TY!

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 3,197 mod

    Good to hear. The added code only triggers when you touch the platter while the track is playing. Everything else should work just the same.

    There is also code that makes the play button blink when spinning. Does it work?

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 3,197 mod

    Not even when the the backspin is progressing? On-Off-On cycle takes half a second. You can adjust the 'interval' of the 'scratchBlinkTimer' (currently set to 250ms; 125ms would double the frequency).

Back To Top