I'm trying to manually specify my masterdeck (I know this is odd), I have a use case that involves syncing lighting over the OS2L protocol, I'm looking to change masterdeck when a action POI triggers.
I've tried with both masterdeck_auto on and off.
And then I try to manually change the master deck, what I expected would work is deck 2 masterdeck but nothing changes. In the docs it mentions "for skins with more than 2 decks" and I only use 2 decks. Is this a limitation or is there another way to manually specify the master deck?
In testing I discovered if neither deck has a track playing, but the tracks are loaded, I can change the master with deck 2 masterdeck but as soon as one deck starts playing there's no manual control.
I've tried with both masterdeck_auto on and off.
And then I try to manually change the master deck, what I expected would work is deck 2 masterdeck but nothing changes. In the docs it mentions "for skins with more than 2 decks" and I only use 2 decks. Is this a limitation or is there another way to manually specify the master deck?
In testing I discovered if neither deck has a track playing, but the tracks are loaded, I can change the master with deck 2 masterdeck but as soon as one deck starts playing there's no manual control.
Posted Mon 06 Apr 26 @ 4:51 pm
Edit: Replied thinking I'd fixed the problem, but still broken.
Posted Mon 06 Apr 26 @ 4:56 pm
if masterdeck_auto is on, calling deck X masterdeck will turn auto off.
If auto is off and deck 1 is masterdeck then calling deck 1 masterdeck will turn auto back on,
maybe that's the confusion
If auto is off and deck 1 is masterdeck then calling deck 1 masterdeck will turn auto back on,
maybe that's the confusion
Posted Mon 06 Apr 26 @ 5:02 pm
I don't see this happening on my install. I have one button with masterdeck_auto on and it is currently highlighted as active.
I have another deck 2 masterdeck I click this button and the masterdeck_auto on button remains highlighted. And the deck master does not change to deck 2 it remains on deck 1.
I have another deck 2 masterdeck I click this button and the masterdeck_auto on button remains highlighted. And the deck master does not change to deck 2 it remains on deck 1.
Posted Mon 06 Apr 26 @ 5:11 pm
I just tested this in a 4 deck layout and it works... so it does appear to be a limitation of 2 deck skins, as the docs mention. I understand why this decision may have been made but the option to control it would be nice.
I'm now considering "faking" a 4 deck layout but only showing 2 decks????
I'm now considering "faking" a 4 deck layout but only showing 2 decks????
Posted Mon 06 Apr 26 @ 5:27 pm
When 2 decks are used, masterdeck indeed just selects the active deck.
As a workaround, you could load a song in deck 3 deck 3 load
After that msterdeck should work
As a workaround, you could load a song in deck 3 deck 3 load
After that msterdeck should work
Posted Mon 06 Apr 26 @ 5:27 pm
Ah yeah, my 2 deck skin is actually 4 decks, I can swap 3 & 4 in even on the 2 deck skin.
Posted Mon 06 Apr 26 @ 5:33 pm
Thank you, that solution gave me a laugh, it seems to work well, I didn't expect it to be that easy.
For anyone finding this post in the future:
Put this in your ONINIT:
Put this on your action POI:
For anyone finding this post in the future:
Put this in your ONINIT:
deck 3 load
Put this on your action POI:
action_deck 1 ? deck 2 masterdeck : deck 1 masterdeck
Posted Mon 06 Apr 26 @ 5:45 pm
For anyone finding this in the future and wanting to recreate my use case.... having a POI that switches the master deck but also having it fall back to default behavior if a POI isn't present. This script looks for a POI named "Out" in cue point position 7 and when it hits it switches the master deck. You don't need to put a POI action script on it, just put this in your keyboards ONINIT.
Also when I started writing this script I expected it to be 5 lines max.... 24 hours later I have this monstrosity... there's so many edge cases...
Also when I started writing this script I expected it to be 5 lines max.... 24 hours later I have this monstrosity... there's so many edge cases...
repeat_start rsAutoMasterDeck 30ms &
deck 1 is_audible ?
deck 2 is_audible ?
param_smaller "deck 1 volume" "deck 2 volume" ?
param_equal `deck 1 cue_name 7` "Out" ?
param_bigger `deck 1 get_position` `deck 1 cue_pos 7` ?
param_equal `deck 2 cue_name 7` "Out" ?
param_bigger `deck 2 get_position` `deck 2 cue_pos 7` ?
nothing :
deck 1 masterdeck on :
deck 1 masterdeck on :
deck 2 masterdeck on :
param_equal `deck 2 cue_name 7` "Out" ?
param_bigger `deck 2 get_position` `deck 2 cue_pos 7` ?
deck 2 masterdeck ? nothing : deck 1 masterdeck on :
deck 1 masterdeck on :
deck 1 masterdeck on :
param_equal `deck 2 cue_name 7` "Out" ?
param_bigger `deck 2 get_position` `deck 2 cue_pos 7` ?
param_equal `deck 1 cue_name 7` "Out" ?
param_bigger `deck 1 get_position` `deck 1 cue_pos 7` ?
nothing :
deck 2 masterdeck on :
deck 2 masterdeck on :
deck 1 masterdeck on :
param_equal `deck 1 cue_name 7` "Out" ?
param_bigger `deck 1 get_position` `deck 1 cue_pos 7` ?
deck 1 masterdeck ? nothing : deck 2 masterdeck on :
deck 2 masterdeck on :
deck 2 masterdeck on :
deck 1 masterdeck on :
deck 2 masterdeck on
Posted Tue 07 Apr 26 @ 6:08 pm
To be honest I cannot see ANY reason why someone would need to mess with automatic masterdeck selection when using 2 decks.
You have never told us exactly why you need to control that (besides the generic OS2L sync), but I'm sure there are easier ways for someone to achieve what you're after.
So yes, my advise is, if anyone else ever gets even close to need the script above, please let us know what you're after. Most likely there's an easier way!
PS: I'm not bashing you. If it works for you, it works! :)
But it seems to me that you choose the least efficient and elegant way to achieve what you're after.
You have never told us exactly why you need to control that (besides the generic OS2L sync), but I'm sure there are easier ways for someone to achieve what you're after.
So yes, my advise is, if anyone else ever gets even close to need the script above, please let us know what you're after. Most likely there's an easier way!
PS: I'm not bashing you. If it works for you, it works! :)
But it seems to me that you choose the least efficient and elegant way to achieve what you're after.
Posted Tue 07 Apr 26 @ 10:30 pm
If you think that's unelegant wait till you hear this.... 😂
I sync Virtual DJ to lighting (Sunlite) and visuals (Resolume). For Resolume I started off using Ableton link and sending data via midi, but mapping each midi note to different options in Resolume was tedious and if you change your Resolume layout sometimes they move and break. And if you accidentally loose one there's no changelog, you just spend hours debugging.
I decided I wanted advanced control, so I wrote my own OS2L software, it sits between Virtual DJ, Resolume and Sunlite. This allows me to control Resolume via OSC giving me much better control. It started really simple but now it includes a full sequencer, which manages effects, bumps, phrases, color palettes etc. It actually reads POI data directly from the database.xml and allows me to do some really advanced things that just aren't possible or way to tedious without it.
It was originally a command line app written in Node.js but now it has an Electron interface, with multiple tabs to make debugging, configuration and management easier:

To ensure the sequencer in my software is in the same position as VDJ I'm using the OS2L beat pos which sends the beat position of the master deck from VDJ to my software. This is why I need manual control of the master deck, I want to say "on this beat its the end of the light show for this song, switch to the next one and I need to know what the best pos is of the other deck." Usually this is when the lyric of the song ends but not always, having manual control means my lights and visuals change at exactly the right time.
I considered other ways to do this, VDJ has a non standard OS2L evt called subscribe, I can subscribe to the beat pos for both decks and then change the master deck in my software based on the cue point position, but OS2L subscriptions have a 100ms delay, I posted about my benchmarks here https://virtualdj.com/forums/261216/VirtualDJ_Technical_Support/Extended_OS2L_parameters_in_VirtualDJ.html I could write some code to account for this but with my current implementations its only 30ms delay and I can live with that. And moving to OS2L subscriptions for beat pos is quite a big rewrite of my syncing system. I'd love to know how SoundSwitch does their OS2L beat pos syncing.
I hate the script I wrote above, it seems overly complex, I expected it to be short but it just got longer and longer as I ran into more edge cases. And it worries me running complex scripts on "reapeat", I'm not sure how robust the scripting system is.
When I first wrote this script I had it on my faders, but sometimes I plug into random controllers I've never used before. I don't want to add it to the faders every time I use a new controller. Also at one point I had an action POI triggering the master deck change but because I require fallback and some advanced edge cases it just made more sense to have it all in a single script.
If you have any elegant solutions let me know. But I think I may have pushed things a little to far for that 😂
I don't expect anyone to need my script, but.... reading scripts from other users taught me almost everything I know about VDJ scripts, so I hope its a start for someone.
I sync Virtual DJ to lighting (Sunlite) and visuals (Resolume). For Resolume I started off using Ableton link and sending data via midi, but mapping each midi note to different options in Resolume was tedious and if you change your Resolume layout sometimes they move and break. And if you accidentally loose one there's no changelog, you just spend hours debugging.
I decided I wanted advanced control, so I wrote my own OS2L software, it sits between Virtual DJ, Resolume and Sunlite. This allows me to control Resolume via OSC giving me much better control. It started really simple but now it includes a full sequencer, which manages effects, bumps, phrases, color palettes etc. It actually reads POI data directly from the database.xml and allows me to do some really advanced things that just aren't possible or way to tedious without it.
It was originally a command line app written in Node.js but now it has an Electron interface, with multiple tabs to make debugging, configuration and management easier:

To ensure the sequencer in my software is in the same position as VDJ I'm using the OS2L beat pos which sends the beat position of the master deck from VDJ to my software. This is why I need manual control of the master deck, I want to say "on this beat its the end of the light show for this song, switch to the next one and I need to know what the best pos is of the other deck." Usually this is when the lyric of the song ends but not always, having manual control means my lights and visuals change at exactly the right time.
I considered other ways to do this, VDJ has a non standard OS2L evt called subscribe, I can subscribe to the beat pos for both decks and then change the master deck in my software based on the cue point position, but OS2L subscriptions have a 100ms delay, I posted about my benchmarks here https://virtualdj.com/forums/261216/VirtualDJ_Technical_Support/Extended_OS2L_parameters_in_VirtualDJ.html I could write some code to account for this but with my current implementations its only 30ms delay and I can live with that. And moving to OS2L subscriptions for beat pos is quite a big rewrite of my syncing system. I'd love to know how SoundSwitch does their OS2L beat pos syncing.
I hate the script I wrote above, it seems overly complex, I expected it to be short but it just got longer and longer as I ran into more edge cases. And it worries me running complex scripts on "reapeat", I'm not sure how robust the scripting system is.
When I first wrote this script I had it on my faders, but sometimes I plug into random controllers I've never used before. I don't want to add it to the faders every time I use a new controller. Also at one point I had an action POI triggering the master deck change but because I require fallback and some advanced edge cases it just made more sense to have it all in a single script.
If you have any elegant solutions let me know. But I think I may have pushed things a little to far for that 😂
I don't expect anyone to need my script, but.... reading scripts from other users taught me almost everything I know about VDJ scripts, so I hope its a start for someone.
Posted Wed 08 Apr 26 @ 1:44 pm





