S4MK3 & S3: Community Performance MOD (qml coding)

13637383941

Comments

  • pixel
    pixel Member Posts: 344 Pro
    edited March 1

    @ tomy_nick: Have a look at the colors.qml of the S4. Maybe you can experiment a little with the file. But it won't work the way you have in mind.
    But the way the file looks, there are ways to change the colors. (waveformColorsMap: low1, low2, mid1, mid2, high1, high2)

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

    You can define exactly 6 colours (RGB+Alpha) for three frequency bands. Try the one i showed on a picture on page 1 (should be number 21). This is as close as it gets.

    This photo is not as good as the actual screen. The mid and high frequencies are too bright on this picture.

  • pixel
    pixel Member Posts: 344 Pro
    edited March 2

    @Sûlherokhh: I have a problem with the S3Mod together with the X1Mod.
    when I have disabled the stem-reset on the S3Mod, the stem-reset is still performed by the X1, which is normal when both devices are connected.
    Can you please give me a hint if I can prevent this with a tsi

    I use the following switches to activate/deactivate the S3 stems-reset

    S3.qml:

      MappingPropertyDescriptor { id: stemsReset1; path: "mapping.settings.Stems_Reset_1"; type: MappingPropertyDescriptor.Boolean; value: false; }
      MappingPropertyDescriptor { id: stemsReset2; path: "mapping.settings.Stems_Reset_2"; type: MappingPropertyDescriptor.Boolean; value: false; }
      MappingPropertyDescriptor { id: stemsReset3; path: "mapping.settings.Stems_Reset_3"; type: MappingPropertyDescriptor.Boolean; value: false; }
      MappingPropertyDescriptor { id: stemsReset4; path: "mapping.settings.Stems_Reset_4"; type: MappingPropertyDescriptor.Boolean; value: false; }
    
  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 3,202 mod
  • pixel
    pixel Member Posts: 344 Pro

    please watch the video the X1MOD triggers an unwanted stem reset🙂

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

    Well. I put in a parameter reset when loading a track. So this is on purpose.

    X1MK3Deck.qml, lines 466 pp

    AppProperty { path: "app.traktor.decks." + module.deckIdx + ".is_loaded_signal";
      onValueChanged: {
        …
        loadResetTimer.restart()
      }
    }
    

    lines 499 pp

    Timer {
      id: loadResetTimer
      interval: 400
      repeat: false
      onTriggered: {
        if (deckTypeProp.value == DeckType.Stem) {
          stemVolumeProp_1.value = 1.0
          stemVolumeProp_2.value = 1.0
          stemVolumeProp_3.value = 1.0
          stemVolumeProp_4.value = 1.0
          stemMutedProp_1.value = false
          stemMutedProp_2.value = false
          stemMutedProp_3.value = false
          stemMutedProp_4.value = false
          stemFilterProp_1.value = 0.5
          stemFilterProp_2.value = 0.5
          stemFilterProp_3.value = 0.5
          stemFilterProp_4.value = 0.5
          stemFilterOnProp_1.value = false
          stemFilterOnProp_2.value = false
          stemFilterOnProp_3.value = false
          stemFilterOnProp_4.value = false
          stemFxSendProp_1.value = 1.0
          stemFxSendProp_2.value = 1.0
          stemFxSendProp_3.value = 1.0
          stemFxSendProp_4.value = 1.0
          stemFxSendOnProp_1.value = true
          stemFxSendOnProp_2.value = true
          stemFxSendOnProp_3.value = true
          stemFxSendOnProp_4.value = true
          stemVolumeFilterProp_1.value = 0.5
          stemVolumeFilterProp_2.value = 0.5
          stemVolumeFilterProp_3.value = 0.5
          stemVolumeFilterProp_4.value = 0.5
        }
      …
      }
    }
    
  • pixel
    pixel Member Posts: 344 Pro
    edited March 2

    I will do the same with the x1 as with the s3.
    so that you can also deactivate the reset on the x1

    S3:

    AppProperty { id: deckLoadedSignal; path: "app.traktor.decks." + deckIdx + ".is_loaded_signal";
    
    onValueChanged: {
    
     var stemsReset = false;
    		
     if (deckIdx == 1 && stemsReset1.value) stemsReset = true;
     if (deckIdx == 2 && stemsReset2.value) stemsReset = true;
     if (deckIdx == 3 && stemsReset3.value) stemsReset = true;
     if (deckIdx == 4 && stemsReset4.value) stemsReset = true;
    		
     if (value && stemsReset) {
    
       stemMuted_1.value = false;
       stemVolume_1.value = 1.0;
       stemFilterOn_1.value = false;
       stemFilter_1.value = 0.5;
       stemFxSendOn_1.value = true;
       stemFxSend_1.value = 1.0;
       stemVolumeFilterProp_1.value = stemFilter_1.value;
    
       stemMuted_2.value = false;
       stemVolume_2.value = 1.0;
       stemFilterOn_2.value = false;
       stemFilter_2.value = 0.5;
       stemFxSendOn_2.value = true;
       stemFxSend_2.value = 1.0;
       stemVolumeFilterProp_2.value = stemFilter_2.value;
    
       stemMuted_3.value = false;
       stemVolume_3.value = 1.0;
       stemFilterOn_3.value = false;
       stemFilter_3.value = 0.5;
       stemFxSendOn_3.value = true;
       stemFxSend_3.value = 1.0;
       stemVolumeFilterProp_3.value = stemFilter_3.value;
    
       stemMuted_4.value = false;
       stemVolume_4.value = 1.0;
       stemFilterOn_4.value = false;
       stemFilter_4.value = 0.5;
       stemFxSendOn_4.value = true;
       stemFxSend_4.value = 1.0;
       stemVolumeFilterProp_4.value = stemFilter_4.value;
    
      }
    	  
     }
    	
    }
    
  • pixel
    pixel Member Posts: 344 Pro
    edited March 3

    I have just cobbled something together😂

    STEMS-RESET (enable/ disable)

    X1MK3_TP4.1.1_PerformanceMod_08

    X1MK3DeviceSetup.qml:

      Timer {
        id: blinkTimerLeft
        property bool blink: true
        interval: 250
        repeat: true
        running: ((!stemsReset1.value && leftDeckIdx == 1) ||
                 (!stemsReset2.value && leftDeckIdx == 2) ||
                 (!stemsReset3.value && leftDeckIdx == 3) ||
                 (!stemsReset4.value && leftDeckIdx == 4))
        onTriggered: blink = !blink;
    	onRunningChanged: blink = true;
      }
      
      Timer {
        id: blinkTimerRight
        property bool blink: true
        interval: 250
        repeat: true
        running: ((!stemsReset1.value && rightDeckIdx == 1) ||
                 (!stemsReset2.value && rightDeckIdx == 2) ||
                 (!stemsReset3.value && rightDeckIdx == 3) ||
                 (!stemsReset4.value && rightDeckIdx == 4))
        onTriggered: blink = !blink;
    	onRunningChanged: blink = true;
      }
    
    
      WiresGroup {
      enabled: module.state == DeviceSetupState.unassigned
        
       Wire {
         from: "%surface%.left.cue"; to: 
          ButtonScriptAdapter {
           onPress: {
             if (leftDeckIdx == 1) if (stemsReset1.value) stemsReset1.value = false; else stemsReset1.value = true;
             if (leftDeckIdx == 2) if (stemsReset2.value) stemsReset2.value = false; else stemsReset2.value = true;
             if (leftDeckIdx == 3) if (stemsReset3.value) stemsReset3.value = false; else stemsReset3.value = true;
             if (leftDeckIdx == 4) if (stemsReset4.value) stemsReset4.value = false; else stemsReset4.value = true;
           }
           brightness: blinkTimerLeft.blink
         }
       }  
     
       Wire {
         from: "%surface%.right.cue"; to: 
         ButtonScriptAdapter {
           onPress: {
             if (rightDeckIdx == 1) if (stemsReset1.value) stemsReset1.value = false; else stemsReset1.value = true;
             if (rightDeckIdx == 2) if (stemsReset2.value) stemsReset2.value = false; else stemsReset2.value = true;
             if (rightDeckIdx == 3) if (stemsReset3.value) stemsReset3.value = false; else stemsReset3.value = true;
             if (rightDeckIdx == 4) if (stemsReset4.value) stemsReset4.value = false; else stemsReset4.value = true;
           }
           brightness: blinkTimerRight.blink
         }
       }
      
      }
    

    X1MK3.qml:

      MappingPropertyDescriptor { id: stemsReset1; path: "mapping.settings.Stems_X1_Reset_1"; type: MappingPropertyDescriptor.Boolean; value: true; }
      MappingPropertyDescriptor { id: stemsReset2; path: "mapping.settings.Stems_X1_Reset_2"; type: MappingPropertyDescriptor.Boolean; value: true; }
      MappingPropertyDescriptor { id: stemsReset3; path: "mapping.settings.Stems_X1_Reset_3"; type: MappingPropertyDescriptor.Boolean; value: true; }
      MappingPropertyDescriptor { id: stemsReset4; path: "mapping.settings.Stems_X1_Reset_4"; type: MappingPropertyDescriptor.Boolean; value: true; }
    

    X1MK3Deck.qml:

    search:

    if (deckTypeProp.value == DeckType.Stem)
    

    replace with:

    if (((stemsReset1.value && module.deckIdx == 1) || (stemsReset2.value && module.deckIdx == 2) || (stemsReset3.value && module.deckIdx == 3) || (stemsReset4.value && module.deckIdx == 4)) && deckTypeProp.value == DeckType.Stem)
    
  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 3,202 mod
  • pixel
    pixel Member Posts: 344 Pro

    I have corrected the above code again.😆

  • pixel
    pixel Member Posts: 344 Pro
    edited March 3

    now I am satisfied, the buttons flash when stem-reset is deactivated.
    I have changed the code again🤣

    EDIT: i changed the selection button again, i like it better with the cue button, now it's really finished.

    tonight i will upload the s3mod here, unfortunately i didn't feel like doing it yesterday😆

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

    Update:

    • Soft takeover for FX controls (done).
    • Stem overlay toggle for FX section (wip).
    • Remix overlay toggle for FX section (wip).
    • Remix capture trigger and source selection (wip).

    Hopefully i'll have some beta for you to test in a bit.

  • pixel
    pixel Member Posts: 344 Pro

    i'm really looking forward to seeing how you design the remix deck controll.🤗

    I still have to update the readme.txt of the S3.😝

    when i get over myself i will edit this post🤣

  • pixel
    pixel Member Posts: 344 Pro
    edited March 4

    Zip Name: Traktor_Kontrol_S3_TP4.1.1_PerformanceMod_3.3
    ###########################################
    Date: 03.03.25
    ###########################################
    Mod Version: v 3.3
    ###########################################
    Software: Traktor Pro 4.1.1
    ###########################################
    Controller Typ: Traktor Kontrol "S3"
    ###########################################
    Mod Author: pixel
    ###########################################

    Special thanks and respect goes to the coder [Sûlherokhh] for his help and providing the S4_PerformanceMod source-code.

    also a thank you to [lord-carlos] for providing the install.bat

    ###########################################
    https://community.native-instruments.com/discussion/26956/s4mk3-s3-performance-mod-qml-coding
    ###########################################

    If you like the S3Mod, I would be delighted if you would buy Sûlherokhh a coffee. (thank you very much😊)

    installation instructions

    1.) Extract the .zip archive to your Desktop.

    2.) Start the install.bat with "Administrator" Rights.
    (A backup of the current files is automatically saved in the "Resources64" Folder)

    3.) Follow the instructions.

    4.) When the installation is finished, restart the Traktor Pro 4.

    or copy the QML folder to the following directory.
    Make a backup before modifying the files
    !!!
    (C:\Program Files\Native Instruments\Traktor Pro 4\Resources64)

    5.) Import the file (S3.GridmarkerHopping+ModifierSkeleton.tsi) from the TSI folder.
    Preferences -> Controller Manager -> Add... -> Import from disk...
    [readme.txt: see line 324]

    6.) Import the file (S3.GenericMIDI-Beatcounter.tsi) from the TSI folder.
    Preferences -> Controller Manager -> Add... -> Import from disk...
    [readme.txt: see line 277]

    7.) finished!

    Update 3.3
    The following is new:

    ########################################################

    Stem-Deck features:

    [+] SAMPLES (Hold): SuperKnobs (enable: samples button blink/ disable) SuperKnobs(gain, eq.high, eq.mid, eq.low) (volume, filter)
    [!] when SuperKnobs is enabled, the pads only have the tap option, so the hold option is disabled and the tap option is triggered directly on the pads button.

    +++++++++++++++++++++++++++++++++

    Soft takeover:

    [!] Soft takeover function available for Stems Deck 1-4 SuperKnobs(gain, eq.high, eq.mid, eq.low) (volume, filter)
    [!] Display (C, A, B, D: [ON]=UP/ [CUE]=DOWN flash button)

    S3Mod Features

    ########################################################

    Soft takeover:

    [!] Soft takeover function available for MixerChannel1-4 (gain, eq.high, eq.mid, eq.low, volume, channel_fx.amount) and FX_UNIT1-4 (dry_wet, knob1, knob2, knob3) section.
    and for Stems Deck 1-4 SuperKnobs(gain, eq.high, eq.mid, eq.low) (volume, filter)
    [!] Display (C, A, B, D: [ON]=UP/ [CUE]=DOWN flash button)

    Deck features:

    • Jogwheel Beatcounter LED
    • EXT (Hold) + PLAY (Hold): Jog wheel LED animation (can also be disabled)
    • EXT (Hold) + PLAY (Tap): Toggles CDJ-style Cue & Play button LED blinkers (can also be disabled)
    • VinylBreak (SHIFT+PLAY)
    • Jogwheel LED PhaseMeter (SHIFT+DECK+MOVE_TOUCH+LOOP_TOUCH)
    • DeckUnload (only at deck stop) (SHIFT+DECK+LOOP_TOUCH)
    • scratchBlink (play button)
    • Sync Tap: BPM is set to Master BPM aka TempoSync. Sync is not activated. If Sync is already active it will be turned off.
    • Sync Hold (>0.2sec): Sync Toggle. If Sync status is released, Tempo is reset to +/- 0%.
    • Sync LED Feedback: BRIGHT when Sync is activated. GREEN (Tempo & Phase in sync, both with tiny error margins for beat juggling), LIME (Tempo in sync but out of phase), RED (not in sync & out of phase)
    • (SHIFT+Sync) Tap: Deck TempoMaster toggle (ON/OFF).
    • (SHIFT+Sync) Hold (>0.2sec): Master Clock AUTO toggle.
    • (SHIFT) Sync LED Feedback: BRIGHT GREEN (deck is TempoMaster), LIME (Master Clock AUTO is not active, deck is not TempoMaster), RED (Master Clock AUTO is active, deck is not TempoMaster)
    • Hold DECK (A, B, C or D) + Loop Encoder (Turn): Adjust GUI zoom factor. (Push Encoder) to reset to 0.75
    • Hold DECK (A, B, C or D) + Move Encoder (Turn): Cycle through all 17 deck colours! (Push Encoder) to reset.

    Track/Stem deck features:

    • Loop-In: (SHIFT+GRID) (GRID button (lights up, Color Green))
    • Loop-Out: (SHIFT+JOG) (when loop active: (JOG, GRID button flashes Green))
    • Jogwheel Turn: (while in active Loop) hold (SHIFT+GRID) or (SHIFT+JOG) (or both) to adjust Loop-In or Loop-Out (or both) with the Jog Wheel. Jogwheel LEDs turns green.)
    • Move Encoder Turn: (while in active Loop) hold (SHIFT+GRID) or (SHIFT+JOG) (or both) to adjust Loop-In or Loop-Out (or both) by exactly 1 beat.

    Track/Stem Deck Beatgrid Features:

    • Grid: Also doubles as Beat-Tap to adjust the beatgrid on the fly(Deck color, OFF if GridLock is active)
    • Deck+Grid: Toggles GridLock.(WHITE color)
    • Grid (Hold) + Keylock: BPM /2
    • Grid (Hold) + Sync: BPM x2
    • Grid (Hold) + Move (Push): Delete current gridmarker
    • Grid (Hold) + Loop (Push): Set gridmarker at current position
    • Grid (Hold) + Move (Turn): Nothing (Go to previous/next gridmarker, via mapping file (S3.GridmarkerHopping+ModifierSkeleton.tsi))
    • Grid (Hold) + Loop (Turn): Adjustment of current gridmarker's BPM (very fine)
    • Grid (Hold) + Jogwheel (Touch Platter) + Jogwheel (Turn): Adjust postition of current gridmarker
    • Grid (Hold) + Jogwheel (Turn): Adjustment of current gridmarker's BPM (coarse)

    Track/Stem Deck Hotcue Features:

    • PadMode.Hotcue (Hold) + Pads 3+4: Jump to previous/next Hotcue
    • PadMode.Hotcue (Hold) + Pads 5-8: Remap Hotcue type (Load, Fade-In/Out, Hotcue
    • SHIFT(Hold) + PadMode.Hotcue (Tap) + Hotcue: Remap Hotcue to new number

    Stem-Separation Control features:

    • Volume: Pad Button regular color is white, to aktivate/ deaktivate press Pad Button 1-4, to change the value hold the Pad Button (Color Change green) and rotate the Move-/Loop Encoder
    • Filter: Pad Button regular color is blue, to aktivate/ deaktivate press Pad Button 5-8, to change the value hold the Pad Button (Color Change green) and rotate the Move-/Loop Encoder
    • FxSend: Pad Button regular color is DarkOrange, to aktivate/ deaktivate hold shift and press Pad Button 1-4, to change the value hold the Pad Button (Color Change green) and rotate the Move-/Loop Encoder
    • Reset: Pad Button regular Color is red, hold shift and press Pad Button 5-8 to load the default value
    • Shift (Hold) + Samples (Hold): Activate and deactivate automatic reset of the parameters (can be set separately for each deck) When if disabled the "Samples" button flashes (only when holding the shift button)
    • SAMPLES (Hold): SuperKnobs (enable: samples button blink/ disable) SuperKnobs(gain, eq.high, eq.mid, eq.low) (volume, filter)

    [!] when SuperKnobs is enabled, the pads only have the tap option, so the hold option is disabled and the tap option is triggered directly on the pads button

    [!] You can change multiple values ​​at the same time by holding down multiple Buttons
    [!] The Steam Color Scheme can be changed in file S3Stems.qml [line: 32]

    Mixer channel features:

    • DeckTypeSwitch (Deck: A,B,C SHIFT+EXT) Cycles through 1-3 deck types, as long as the corresponding deck is not playing (Track Deck ➔ Remix Deck ➔ Stem Deck ➔ Track Deck).
      (Deck: D SHIFT+EXT) Cycles through all deck types, as long as the corresponding deck is not playing (Track Deck ➔ Remix Deck ➔ Stem Deck ➔ Live Deck ➔ Track Deck).
    • Switch MIC D-LINE (EXT) (automatically switches Deck D type to Live Input)

    MIDI Beatcounter:

    • EXT (Hold): Use PADS 1-16 to choose when a signal should be sent ((PAD-1 left) = MIDISend disable)

    [!] The EXT button lights up when a signal is being sent.
    [!] The signal is sent to MIDI Button 1, see (S3.GenericMIDI-Beatcounter.tsi) Default is (Ch01.CC.000), please adjust as needed.

    Browser features:

    • Preview Button: Can be used both in HOLD as well as TOGGLE modes. As long as the Preview Player is loaded, the Browse Encoder seeks through the track. Loading a track into a deck will now also unload the Preview Player.
    • View Button: HOLD button to use as (SHIFT) for Browse Encoder only, as well as TOGGLE browser view.
    • SHIFT+View: Toggle original Jogwheel behaviour (i.e. Jogwheel does not scroll playlist, has White colour, turns when track is playing and allows pitchbending and scratching). Setting will be saved between sessions.
    • Jogwheel Browsing (VIEW-JOGWHEEL) (Big Jumps (VIEW)-(SHIFT+JOGWHEEL))
    • Browse Encoder (Tap < 1 second, on release): Load primary mode [Track or Stem]
    • Browse Encoder (Hold > 1 sec, on release): Load secondary (previously double click) mode [Track or Stem]

    FX features:

    Assign the FX devices to the respective deck

    • Activate a deck on each side (A-C, B-D), hold Shift and start the assignment, the button of the activated deck flashes, the FX Select buttons 1-4 take on the color of the deck, select this by pressing Shift + FX 1-4, the activated assignment starts flashing

    Activation of FX mode

    • Press Shift+Filter(white) button, if FX mode is active the filter button flashes, press FX Select 1-4 for device mapping the selection lights up
    • You can choose between single (Blue) and group (DarkOrange) or PatternPlayer (Mint) mode by pressing the filter button
    • To exit FX mode press Shift+Filter
    • The respective On button and the control above it correspond to the respective order of the device

    Control of the selection boxes for the FX device

    • To select the respective Select Box, hold down the respective On button and turn the browser encoder to navigate

    Control over the Pattern Player

    • 16 Steps PADS activate: Is Pattern Player active hold the FILTER Button (To deactivate just hold the FILTER Button again)
    • State 1-16: To activate (Color Mint) and deactivate, press PAD 1-8 left and right (when the status 1-16 is adjusted, the color changes to Green)
    • Control kit Select: hold the ON_C Button + turn the browser encoder to navigate
    • State Reset: Touch Move+Loop Encoder (only if "16 Steps PADS" active)

    [!] The PatternPlayer PADS Color Scheme can be changed in file S3Deck.qml [line: 26]

    FX Snapshot (Save & Load)

    • Load, press and hold the (ON[A] button), the active FX select button turns Green and press the button (if successfully: FX select button turns (Single/ Group/ PatternPlayer) Color)
    • Save, press and hold the (ON[B] button), the active FX select button turns Red and press the button (if successfully: FX select button turns (Single/ Group/ PatternPlayer) Color)

    FX Stop All Activ Loops

    • StopAllLoops, press and hold the (ON[C] button), the active FX select button turns Plum and press the button (if successfully: FX select button turns (Single/ Group/ PatternPlayer) color)

    FX (lfo Reset)

    • lfoReset, press and hold the (ON[D] button), the active FX select button turns Yellow and press the button

    FX 1-4 (load-snapshots & disable all)

    • EXT (Double-Tap)

    Play mode activation and active

    • To assign the device, select FX button 1-4, press and hold the desired button to activate- all on buttons turn green
    • To exit Play Mode, press the active FX Select button
    • To stop and start the recorded loop, press the desired green On button, if it is active it lights up
    • When a loop is active, amount is disabled, except in record mode

    Rec mode and recording

    • To activate Rec mode, press and hold the desired On button (1-4) while you are in Play mode, it will turn red
    • To start the recording, select the respective On button, it flashes and turn the amount. To finish, press the On button again, the recording starts automatically in a loop, If you hold down the ON button to exit, you will return to play mode
    • To end the recording function, press and hold the respective on buttons; they will turn green again (Play mode)
    • You can always start recording again, the running loop will be stopped

    [!] During all this you can also switch between the individual devices with FX Select 1-4
    [!] When you have left Play mode, the respective On button flashes
    [!] If FX 3-4 is disabled, select 4 FX units in the Traktor Software
    [!] If you switch between (Single/ Group/ PatternPlayer) mode or change the select fields while a loop is active, it will stop automatically
    [!] The FX Mod Color Scheme can be changed in file FourChannelFXSelector.qml [lines: 240]

    Other changes:

    [!] MixerFX 4 colour changed from YELLOW to LIME (better visibility and difference to Filter's LIGHTORANGE).
    [!] Standard deck colors (A, B): Turquoise, (C, D): DarkOrange
    [!] "Preview", "Favorite", "Preparation", and "View" Button now also have the Deck Color
    [!] For example, if Deck-A is a Remix-Deck and Deck-C is not, the samples pads 5-8 on Deck-C will appear in Deck A's DeckColor.

  • pixel
    pixel Member Posts: 344 Pro
    edited March 4

    If I'm lucky, I'll be going to the German Museum of Technology Berlin next week to see the Z1 by Konrad Zuse in the real live.🤗

Back To Top