eyalgo
6/4/2016 - 4:43 PM

Traktor Kontrol S5 S8 hacks

Traktor Kontrol S5 S8 hacks

diff --git a/CSI/Common/Deck_S8Style.qml b/CSI/Common/Deck_S8Style.qml
index 1ff662f..f558dfd 100755
--- a/CSI/Common/Deck_S8Style.qml
+++ b/CSI/Common/Deck_S8Style.qml
@@ -1370,8 +1370,8 @@ Module
           enabled: focusedDeckId == 1
 
           Wire { from: "%surface%.back";   to: "decks.1.tempo.reset" }
-          Wire { from: "%surface%.browse"; to: "decks.1.tempo.fine";   enabled: !module.shift }
-          Wire { from: "%surface%.browse"; to: "decks.1.tempo.coarse"; enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.1.tempo.fine";   enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.1.tempo.coarse"; enabled: !module.shift }
         }
 
         // Deck B
@@ -1380,8 +1380,8 @@ Module
           enabled: focusedDeckId == 2
 
           Wire { from: "%surface%.back";   to: "decks.2.tempo.reset" }
-          Wire { from: "%surface%.browse"; to: "decks.2.tempo.fine";   enabled: !module.shift }
-          Wire { from: "%surface%.browse"; to: "decks.2.tempo.coarse"; enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.2.tempo.fine";   enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.2.tempo.coarse"; enabled: !module.shift }
         }
 
         // Deck C
@@ -1390,8 +1390,8 @@ Module
           enabled: focusedDeckId == 3
 
           Wire { from: "%surface%.back";   to: "decks.3.tempo.reset" }
-          Wire { from: "%surface%.browse"; to: "decks.3.tempo.fine";   enabled: !module.shift }
-          Wire { from: "%surface%.browse"; to: "decks.3.tempo.coarse"; enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.3.tempo.fine";   enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.3.tempo.coarse"; enabled: !module.shift }
         }
 
         // Deck D
@@ -1400,8 +1400,8 @@ Module
           enabled: focusedDeckId == 4
 
           Wire { from: "%surface%.back";   to: "decks.4.tempo.reset" }
-          Wire { from: "%surface%.browse"; to: "decks.4.tempo.fine";   enabled: !module.shift }
-          Wire { from: "%surface%.browse"; to: "decks.4.tempo.coarse"; enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.4.tempo.fine";   enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.4.tempo.coarse"; enabled: !module.shift }
         }
       }
 
diff --git a/CSI/S5/Mixer.qml b/CSI/S5/Mixer.qml
index 65c880e..bc057a0 100755
--- a/CSI/S5/Mixer.qml
+++ b/CSI/S5/Mixer.qml
@@ -8,8 +8,8 @@ Module
 
   // Master Clock
 	MasterClock { name: "MasterTempo" }
-  Wire { from: "%surface%.mixer.tempo"; to: "MasterTempo.coarse"; enabled:  shift }
-  Wire { from: "%surface%.mixer.tempo"; to: "MasterTempo.fine";   enabled: !shift }
+  Wire { from: "%surface%.mixer.tempo"; to: "MasterTempo.coarse"; enabled: !shift }
+  Wire { from: "%surface%.mixer.tempo"; to: "MasterTempo.fine";   enabled:  shift }
 
 
   // Channels
diff --git a/CSI/S5/S5Deck.qml b/CSI/S5/S5Deck.qml
index 32716f3..54a7689 100755
--- a/CSI/S5/S5Deck.qml
+++ b/CSI/S5/S5Deck.qml
@@ -1566,8 +1566,8 @@ Module
           enabled: focusedDeckId == 1
 
           Wire { from: "%surface%.back";   to: "decks.1.tempo.reset" }
-          Wire { from: "%surface%.browse"; to: "decks.1.tempo.fine";   enabled: !module.shift }
-          Wire { from: "%surface%.browse"; to: "decks.1.tempo.coarse"; enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.1.tempo.fine";   enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.1.tempo.coarse"; enabled: !module.shift }
         }
 
         // Deck B
@@ -1576,8 +1576,8 @@ Module
           enabled: focusedDeckId == 2
 
           Wire { from: "%surface%.back";   to: "decks.2.tempo.reset" }
-          Wire { from: "%surface%.browse"; to: "decks.2.tempo.fine";   enabled: !module.shift }
-          Wire { from: "%surface%.browse"; to: "decks.2.tempo.coarse"; enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.2.tempo.fine";   enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.2.tempo.coarse"; enabled: !module.shift }
         }
 
         // Deck C
@@ -1586,8 +1586,8 @@ Module
           enabled: focusedDeckId == 3
 
           Wire { from: "%surface%.back";   to: "decks.3.tempo.reset" }
-          Wire { from: "%surface%.browse"; to: "decks.3.tempo.fine";   enabled: !module.shift }
-          Wire { from: "%surface%.browse"; to: "decks.3.tempo.coarse"; enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.3.tempo.fine";   enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.3.tempo.coarse"; enabled: !module.shift }
         }
 
         // Deck D
@@ -1596,8 +1596,8 @@ Module
           enabled: focusedDeckId == 4
 
           Wire { from: "%surface%.back";   to: "decks.4.tempo.reset" }
-          Wire { from: "%surface%.browse"; to: "decks.4.tempo.fine";   enabled: !module.shift }
-          Wire { from: "%surface%.browse"; to: "decks.4.tempo.coarse"; enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.4.tempo.fine";   enabled:  module.shift }
+          Wire { from: "%surface%.browse"; to: "decks.4.tempo.coarse"; enabled: !module.shift }
         }
       }
 
diff --git a/Screens/Views/Deck/DeckHeader.qml b/Screens/Views/Deck/DeckHeader.qml
index d6ee6df..d35db7f 100755
--- a/Screens/Views/Deck/DeckHeader.qml
+++ b/Screens/Views/Deck/DeckHeader.qml
@@ -56,11 +56,11 @@ Item {
   // NOTE: For now, we set fix states in the DeckHeader! But we wanna be able to
   //       change the states.
   property int topLeftState:      0                                 // headerSettingTopLeft.value
-  property int topMiddleState:    hasTrackStyleHeader(deckType) ? 12 : 30 // headerSettingTopMid.value
+  property int topMiddleState:    hasTrackStyleHeader(deckType) ? 13 : 30 // headerSettingTopMid.value
   property int topRightState:     23                                // headerSettingTopRight.value
 
   property int bottomLeftState:   1                                 // headerSettingMidLeft.value
-  property int bottomMiddleState: hasTrackStyleHeader(deckType) ? 11 : 29 // headerSettingMidMid.value
+  property int bottomMiddleState: hasTrackStyleHeader(deckType) ? 14 : 29 // headerSettingMidMid.value
   property int bottomRightState:  25                                // headerSettingMidRight.value
 
   height: largeHeaderHeight
@@ -201,7 +201,7 @@ Item {
     elide:     Text.ElideRight
     font.pixelSize:     fonts.largeFontSize // set in state
     anchors.top:        top_line.bottom
-    anchors.left:       cover_small.right
+    anchors.left:       parent.left
 
     anchors.topMargin:  _intSetInState  // set by 'state'
     anchors.leftMargin: _intSetInState  // set by 'state'
@@ -220,7 +220,7 @@ Item {
     elide:      Text.ElideRight
     font.pixelSize:     fonts.middleFontSize
     anchors.top:        top_line.bottom
-    anchors.left:       cover_small.right
+    anchors.left:       parent.left
     anchors.topMargin:  18
     anchors.leftMargin: 5
     Behavior on anchors.leftMargin { NumberAnimation { duration: speed } }
@@ -267,6 +267,44 @@ Item {
     Behavior on opacity             { NumberAnimation { duration: speed } }
   }
 
+  // bottom_middle_text: REMAINING TIME
+  DeckHeaderText {
+    id: top_middle_text2
+    deckId: deck_Id
+    explicitName: ""
+    maxTextWidth : 80
+    textState:  12
+    font.family: "Pragmatica" // is monospaced
+    color:      textColors[deck_Id]
+    elide:      Text.ElideRight
+    font.pixelSize: fonts.middleFontSize
+    horizontalAlignment: Text.AlignRight
+    anchors.top:          top_line.bottom
+    anchors.right:        parent.right
+    anchors.topMargin:    _intSetInState // set by 'state'
+    anchors.rightMargin:  178 // set by 'state'
+    Behavior on anchors.topMargin   { NumberAnimation { duration: speed } }
+    Behavior on anchors.rightMargin { NumberAnimation { duration: speed } }
+  }
+  // bottom_middle_text: ELAPSED TIME
+  DeckHeaderText {
+    id: bottom_middle_text2
+    deckId: deck_Id
+    explicitName: ""
+    maxTextWidth : 80
+    textState:  113
+    font.family: "Pragmatica" // is monospaced
+    color:      darkerTextColors[deck_Id]
+    elide:      Text.ElideRight
+    opacity:    _intSetInState        // set by 'state'
+    font.pixelSize: fonts.middleFontSize
+    horizontalAlignment: Text.AlignRight
+    anchors.top:          top_line.bottom
+    anchors.right:        parent.right
+    anchors.topMargin:    20
+    anchors.rightMargin:  178
+    Behavior on opacity             { NumberAnimation { duration: speed } }
+  }
   // top_right_text: BPM
   DeckHeaderText {
     id: top_right_text
@@ -393,6 +431,7 @@ Item {
     color: "black"
     anchors.fill: cover_small
     anchors.margins: -1
+    visible: false
   }
 
   DropShadow {
@@ -407,6 +446,7 @@ Item {
     color: "#000000"
     transparentBorder: true
     source: blackBorder
+    visible: false
   }
 
   Rectangle {
@@ -421,6 +461,7 @@ Item {
     // if no cover can be found: blue / grey background (set in parent). Otherwise transparent
     opacity:  (headerPropertyCover.value == "") ? 1.0 : 0.0
     //visible: headerState == "large" && (opacity == 1.0)
+    visible: false
     color:  coverBgEmptyColors[deck_Id]
     Behavior on opacity { NumberAnimation { duration: speed } }
     Behavior on width { NumberAnimation { duration: speed } }
@@ -467,6 +508,7 @@ Item {
     width: height
     anchors.top: cover_small.top
     anchors.left: cover_small.left
+    visible: false
   }
 
 
@@ -493,7 +535,7 @@ Item {
     anchors.top: top_line.bottom
     anchors.topMargin: 3
     anchors.right: parent.right
-    anchors.rightMargin: 178
+    anchors.rightMargin: 246
 
     width: 30
     height: 30
@@ -642,11 +684,13 @@ Item {
 
 
       PropertyChanges { target: top_middle_text;    font.pixelSize: fonts.middleFontSize; anchors.topMargin: 1 }
+      PropertyChanges { target: top_middle_text2;   font.pixelSize: fonts.middleFontSize; anchors.topMargin: 1 }
       PropertyChanges { target: top_right_text;     font.pixelSize: fonts.middleFontSize; anchors.topMargin: 1 }
       PropertyChanges { target: bottom_left_text;   opacity: 0; }
       PropertyChanges { target: bottom_warning_text;  opacity: 0; }
 
       PropertyChanges { target: bottom_middle_text; opacity: 0; }
+      PropertyChanges { target: bottom_middle_text2; opacity: 0; }
       PropertyChanges { target: bottom_right_text;  opacity: 0; }
     },
     State {
@@ -659,10 +703,12 @@ Item {
       PropertyChanges { target: top_warning_text;   font.pixelSize: fonts.largeFontSize; anchors.topMargin: -2 }
 
       PropertyChanges { target: top_middle_text;    font.pixelSize: fonts.largeFontSize;  anchors.topMargin: 1 }
+      PropertyChanges { target: top_middle_text2;   font.pixelSize: fonts.largeFontSize;  anchors.topMargin: 1 }
       PropertyChanges { target: top_right_text;     font.pixelSize: fonts.largeFontSize;  anchors.topMargin: 1 }
+
       PropertyChanges { target: bottom_middle_text; opacity: 1; }
+      PropertyChanges { target: bottom_middle_text2; opacity: 1; }
       PropertyChanges { target: bottom_left_text;   opacity: 1;                                                  anchors.leftMargin: (deckType.description === "Live Input" || directThru.value) ? -1 : 5}
-
       PropertyChanges { target: bottom_right_text;  opacity: 1; }
     }
   ]
diff --git a/Screens/Views/Overlays/CenterOverlays/TempoAdjust.qml b/Screens/Views/Overlays/CenterOverlays/TempoAdjust.qml
index d005b91..c2ad93f 100755
--- a/Screens/Views/Overlays/CenterOverlays/TempoAdjust.qml
+++ b/Screens/Views/Overlays/CenterOverlays/TempoAdjust.qml
@@ -52,8 +54,9 @@ CenterOverlay {
   // headline
   Text {
     anchors.top:              parent.top
-    anchors.horizontalCenter: parent.horizontalCenter
+    anchors.left:             parent.left
     anchors.topMargin:        customMargins.topMarginCenterOverlayHeadline
+    anchors.leftMargin:       20
     font.pixelSize:           fonts.largeFontSize
     color:                    colors.colorCenterOverlayHeadline
     text: titleForBPMOverlay(masterDeckId.value, isSynced.value)
@@ -70,6 +73,17 @@ CenterOverlay {
     color:                    colors.colorWhite
     text:                     dispBpm.toFixed(2).toString()
   }
+  // key
+  Text {
+    anchors.top:              parent.top
+    anchors.right:            parent.right
+    anchors.topMargin:        customMargins.topMarginCenterOverlayHeadline
+    anchors.rightMargin:      20
+    font.pixelSize:           fonts.largeFontSize
+    font.family   :           "Pragmatica"
+    color:                    colors.colorWhite
+    text:                     baseBpm.value.toFixed(2).toString()
+  }
 
   // footline
   Text {
diff --git a/Screens/Views/Deck/DeckHeaderText.qml b/Screens/Views/Deck/DeckHeaderText.qml
index a387662..794659c 100755
--- a/Screens/Views/Deck/DeckHeaderText.qml
+++ b/Screens/Views/Deck/DeckHeaderText.qml
@@ -305,14 +305,22 @@ Text {
   function getSyncStatusString() {
     if ( !isLoaded )
       return " ";
-    else if (isMaster)
-      return "MASTER";
+    // else if (isMaster)
+    //  return "MASTER";
+    // else if (isInSync)
+    //   return "SYNC";
+
+    var prefix = "";
+
+    if (isMaster)
+      prefix = "M ";
     else if (isInSync)
-      return "SYNC";
+      prefix = "S ";
+
 
     // Show the decks current pitch value in the area of the Master/Sync indicator
     // if a deck is neither synced nor set to maste (TP-8070)
-    return getStableTempoString();
+    return prefix + getStableTempoString();
   }
 
 }
diff --git a/Screens/Views/Definitions/Colors.qml b/Screens/Views/Definitions/Colors.qml
index 295a850..04d4b9f 100755
--- a/Screens/Views/Definitions/Colors.qml
+++ b/Screens/Views/Definitions/Colors.qml
@@ -479,12 +479,16 @@ QtObject {
     // Fuchsia - #ff0032
     { low1:  rgba (255,   0,  50, 150),  low2:  rgba (255,  30,  60, 170),
       mid1:  rgba (255, 110, 110, 130),  mid2:  rgba (255, 125, 125, 160),
-      high1: rgba (255, 210, 220, 140),  high2: rgba (255, 220, 230, 160) }
+      high1: rgba (255, 210, 220, 140),  high2: rgba (255, 220, 230, 160) },
+    // Spectrum-like colors
+    { low1:  rgba (255,  50,   0, 150),  low2:  rgba (255,  70,  20, 170),
+      mid1:  rgba ( 80, 245,  80, 110),  mid2:  rgba ( 95, 245,  95, 130),
+      high1: rgba ( 30,  85, 170, 255),  high2: rgba ( 50, 100, 180, 255)}
   ]
 
   function getDefaultWaveformColors()
   {
-    return waveformColorsMap[0];
+    return waveformColorsMap[17];
   }
 
   function getWaveformColors(colorId)

Warnings and instructions

  • You need to modify some Traktor files – do backup before you try – if files are incorrects screens become black.
  • You're doing that at your own risk!
  • If sth goes really bad – reinstall Traktor :-)
  • Traktor QML files are located by default in /Applications/Native Instruments/Traktor 2/Traktor.app/Contents/Resources/qml on Mac, on Windows look for qml in directory where Traktor is installed (I don't have windows machine around)…
  • You need real text-editor to modify files, you should try with Atom or Notepad++ to apply modifications
  • Files here are so called diff files, here is how to read them: http://stackoverflow.com/questions/2529441/how-to-read-the-output-from-git-diff

Hacks

Change waveform colors

See screenshot: https://www.native-instruments.com/forum/threads/s5-s8-needs-spectrum-waveform-colors-on-display.267253/#post-1475226

Display track BPM on BPM popup

In addition to currently set BPM it's good to know what's the original tempo.

Display beat counters in deck header

I don't really need cover image, this makes extra space for additional column: beats and beats to next cue

Display tempo change when track is synced or master

Displays S +5.0%, M +5.0% or +5.0% instead of SYNC, MASTER or +5.0%

Swap SHIFT for tempo coarse-fine adjustment