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

18911131424

Answers

  • Quade
    Quade Member Posts: 248 Advisor

    Hey Evening / Morning

    Apologies for the delay, please find attached a 30sec clip of the platter light ring beat counter.

    Thanks Again

  • Quade
    Quade Member Posts: 248 Advisor

    Just FYI, I am using ver.4b in the video clip I uploaded.

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

    Looks great! You put in some new deck colours, right? :)

  • Quade
    Quade Member Posts: 248 Advisor

    Yes I did. Left Deck A - Lime Green | Right Deck B - Plum ( Need them brighter ) will play around & provide feedback.

    Thank you again for your help.

  • VityaT
    VityaT Member Posts: 41 Helper
    edited August 2023

    Sûlherokhh

    Hello! You've made amazing mods for S3!

    Since i've bought my Traktor S3 i wanted jogwheels LEDs to turn around like on S4Mk3. Your beatcounter mod make me believe it is possible. But i'm not programmer but try to do my best :) All i can made from your mod you can see in a video https://drive.google.com/file/d/1IyS50sYFOKOd57fY9mS0e--_z3EIB6oq/view?usp=sharing

    Rotation speed assigned to track bpm*2. There is 8 LEDs around jogwheels and traktor, as i understand, works only with 4 beats. So i've made LEDs to glow in pairs. But it not that i want in my perfect world

    Maybe there is a way to make rotation speed as classic turntable speeds 33 1/3 rpm or 45 rpm

    Is there way to make LEDs turn like on S4mk3? One by one. I understand that S4mk3 LEDs much more smooth, but as close as it can be.

    And i want only light mod - no any control mods.

    Hope you can guide me in the right direction

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

    @VityaT

    I didn't know there where 8 LED's! Sweet! :)

    Rotation speed assigned to track bpm*2. There is 8 LEDs around jogwheels and traktor, as i understand, works only with 4 beats. So i've made LEDs to glow in pairs. But it not that i want in my perfect world

    Can you elaborate? What end result do you want to achieve?

  • VityaT
    VityaT Member Posts: 41 Helper

    First 6 seconds of official s4mk3 introduction https://www.youtube.com/watch?v=feOVbUHcDyA

    Or just light up one LED by one

    Not two by two as on my video

    And is it possible to invert LEDs? I meen not to light up them one by one but light up them all at once and then light down one by one round and round

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

    Yes, both is possible and more.

    My idea would be to devide 4 beats into 8 half-beats. For a smoother transition among the 8 LED's it would look like this:

    • Half-beat 1 lights up LED 1 and LED 2
    • Half-beat 2 lights up LED 2 and LED 3
    • Half-beat 3 lights up LED 3 and LED 4
    • (etc) ...
    • Half-beat 8 lights up LED 8 and LED 1

    4 beats will still make the LED ring turn around exactly once.

  • VityaT
    VityaT Member Posts: 41 Helper

    So. I've made inverted spin with 2 LEDs

    My scheme is like BEAT - LED

    1 - 345678

    2 - 125678

    3 - 123478

    4 - 123456

    But half-beat is too difficult for me at this moment

    Tried something like

    Wire {
       enabled: !loopActive.value && (deckBeat[deckIdx]/2 == 0.5) && (deckScratching || deckPlaying);
       from: "%surface%.jogwheel_ring.3"; to: "turntable.lights" ;
      }
    

    But it do not work

  • Sûlherokhh
    Sûlherokhh Member, Traktor Mapping Mod Posts: 2,834 mod
    edited August 2023

    Good to see you are actually trying to adjust the code itself to your liking.

    As you could see in the file, i have marked a whole section to get the beats and the LED's right. This is my take on the updated section. I will point out a few things at the bottom, but here is the whole thing:

     //-----------------------------------Jogwheel Beatcounter LED------------------------------------//
    
    // AppProperty { id: deckTypeProp; path: "app.traktor.decks." + deckIdx + ".type" }
     AppProperty { id: deckElapsedTime; path: "app.traktor.decks." + deckIdx + ".track.player.elapsed_time" }
     AppProperty { id: deckGridOffset; path: "app.traktor.decks." + deckIdx + ".content.grid_offset" }
     AppProperty { id: deckMixerBpm; path: "app.traktor.decks." + deckIdx + ".tempo.base_bpm" }
     AppProperty { id: remixBeatPos; path: "app.traktor.decks." + deckIdx + ".remix.current_beat_pos" }
    
     readonly property var deckBeats: deckTypeProp.value != 1 ? (((deckElapsedTime.value * 1000 - deckGridOffset.value + 10) * deckMixerBpm.value) / 30000.0) : parseInt(remixBeatPos.value) * 2
    
     readonly property var deckBeat: (deckBeats < 0.0) ? (8 - (parseInt(Math.abs(deckBeats) % 8))) : parseInt(Math.abs(deckBeats) % 8) + 1
    
     WiresGroup {
       enabled: !gridAdjustEnableProp.value && module.active
       Wire {
         enabled: !loopActive.value && ((deckBeat == 8) || (deckBeat == 1)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.1"; to: "turntable.lights" ;
       }
       Wire {
         enabled: loopActive.value && ((deckBeat == 8) || (deckBeat == 1)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.1"; to: "loop.active" ;
       }
       Wire {
         enabled: !loopActive.value && ((deckBeat == 1) || (deckBeat == 2)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.2"; to: "turntable.lights" ;
       }
       Wire {
         enabled: loopActive.value && ((deckBeat == 1) || (deckBeat == 2)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.2"; to: "loop.active" ;
       }
       Wire {
         enabled: !loopActive.value && ((deckBeat == 2) || (deckBeat == 3)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.3"; to: "turntable.lights" ;
       }
       Wire {
         enabled: loopActive.value && ((deckBeat == 2) || (deckBeat == 3)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.3"; to: "loop.active" ;
       }
       Wire {
         enabled: !loopActive.value && ((deckBeat == 3) || (deckBeat == 4)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.4"; to: "turntable.lights" ;
       }
       Wire {
         enabled: loopActive.value && ((deckBeat == 3) || (deckBeat == 4)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.4"; to: "loop.active" ;
       }
       Wire {
         enabled: !loopActive.value && ((deckBeat == 4) || (deckBeat == 5)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.5"; to: "turntable.lights" ;
       }
       Wire {
         enabled: loopActive.value && ((deckBeat == 4) || (deckBeat == 5)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.5"; to: "loop.active" ;
       }
       Wire {
         enabled: !loopActive.value && ((deckBeat == 5) || (deckBeat == 6)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.6"; to: "turntable.lights" ;
       }
       Wire {
         enabled: loopActive.value && ((deckBeat == 5) || (deckBeat == 6)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.6"; to: "loop.active" ;
       }
       Wire {
         enabled: !loopActive.value && ((deckBeat == 6) || (deckBeat == 7)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.7"; to: "turntable.lights" ;
       }
       Wire {
         enabled: loopActive.value && ((deckBeat == 6) || (deckBeat == 7)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.7"; to: "loop.active" ;
       }
       Wire {
         enabled: !loopActive.value && ((deckBeat == 7) || (deckBeat == 8)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.8"; to: "turntable.lights" ;
       }
       Wire {
         enabled: loopActive.value && ((deckBeat == 7) || (deckBeat == 8)) && (deckScratching || deckPlaying);
         from: "%surface%.jogwheel_ring.8"; to: "loop.active" ;
       }
     }
    

    As you can see, i've thrown out a lot of the code that measure the beats of ALL decks at the same time because i've given up on aligning this with master beats. So, this is the reduced code.

    Every ring LED has two wires, one for deck colour, one for loop colour. The first line (enabled: ...) shows under which condition the LED lights up. The beat counter will also now count 8 half beats. When it says '((deckBeat == 7) || (deckBeat == 8))' it means, when the beatcounter# is 7 or 8 the LED lights up. If you want it to be inverted, you have to negate it with a '!' symbol in front. In this case, instead of this:

    enabled: loopActive.value && ((deckBeat == 7) || (deckBeat == 8)) && (deckScratching || deckPlaying);
    

    it will have to look like this:

    enabled: loopActive.value && !((deckBeat == 7) || (deckBeat == 8)) && (deckScratching || deckPlaying);
    

    so, all instances of ((deckBeat == X) || (deckBeat == Y)) need to be !((deckBeat == X) || (deckBeat == Y)).

    Hope this helps.

  • VityaT
    VityaT Member Posts: 41 Helper

    @Sûlherokhh

    Thank you very much for the detailed explanation!

    I like to understand how any mechanism works so there will be my homework for this evening

    I will tell you the results

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

    The latest LED upgrade to the scratch mod, using 8 LEDs turning to the beat (at half beat jumps):

    The NotScratchJustLED mod, with inverted colour turning:


    Please test away and give some feedback. Don't have an S3 at home to test (I'm testing using my S4Mk3 and the 8 performance pads as placeholders).

  • VityaT
    VityaT Member Posts: 41 Helper

    Stop.

    My previous post was about S3DeckLEDModInverted.zip


    Just tried S3DeckScratchMod5.zip and it works great

    Here is video https://drive.google.com/file/d/1-4Q8ZbGEz8xaepHDcoMa1kVr71B0Zlyo/view?usp=sharing

    Will analyze your code tomorrow

    Great! Thank you again!

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

    Thanks for the video. I'll have a look what made the inversion mod not work. And you probably don't want the scratch mod version. Or do you? :)

Back To Top