locodog
Fighting the war on drugs,
not telling which war or what drugs I'm on XD
My soundcloud likes
Built my own HID controller, I thought it would save money XD
My Releases
Once you figure out that everything you see or do in vdj is because of scripts, you're thinking like a 21st century DJ.
If you want a custom plugin writing or help mapping drop me a pm.

Sun 13 Nov 16 @ 12:31 am

Out and about, forgive the lack of formatting.
A short discussion with Prof Lee lead me to ponder...
can VDJ script save some pain for database management and duplicate files... and what do you know it can.... a bit

How to find "some" duplicate files with less pain in V8


Presuming that your duplicates have the same file name but a different file path, we can make a database filter folder and check for duplicates via script. It's not perfect but it's better than manually finding them.

Create a filter folder; call it "file names"
write the filter rules like this
group by file name

make the scope "database"

A keyboard key to the following script
browser_window "folders" & browser_scroll +1 & repeat_start 'rsiTrawl' 33ms & file_count & param_greater 1 ? repeat_stop 'rsiTrawl' : browser_scroll +1

Before we start clean your database [left hand vertical tool bar]

click your filter folder to open it, It will that a good few seconds.
Press your keyboard key...
VDJ will run down the list of file names at 30 per second, when it finds a file name that has 2 or more files in it the script will stop, waiting for you to decide what to do, to restart the script after deciding, press the keyboard key again.

It's not perfect it does depend on your file names, if you have a lot of hip hop you'll find "Artist - intro" will come up as a false duplicate, but it does save some pain.

I got though 8000 tracks finding about 30 duplicates in 20 minutes.

For further discussion please post Here


Fri 28 Oct 16 @ 9:50 am

Something I've started doing is using 2 pad pages on 1 deck at the same time.

Example phantomdj's keymodplay page is great for changing the key of a hotcue.
but you get much more control if you have a pad page devoted to hotcues and a pad page devoted to key.
We're playing deck 1, we have the standard hotcue page on deck 1, on deck 2 we make a new pad page devoted to the key of deck 1.
pad pages don't specify deck because it is presumed you'll be controlling the deck that has the pad page selected.

but you can specify which deck it effects by simply including which deck.

Other scenarios using 2 pages at once is useful is for hotcueing new tracks, have hotcues page on deck 1 and on deck 2 have a pad page dedicated to deck 1 'goto' scripts so you can jump 64/86/128 beats quickly to lay the next hotcue

I'll leave it at that for now but if you want more information post comments here
http://www.virtualdj.com/forums/213532/General_Discussion/Tip__Using_2_pad_pages_on_1_deck_at_the_same_time.html



Tue 04 Oct 16 @ 1:37 am

How to; Remap HW FX Dial 1 To Another FX Dial For A Specific FX


This difficult tutorial we will be looking how to pick a different dial then dial 1 for a specific fx.

There are some FX were you don't want dial 1, maybe you want dial 2, or 3 or even dial 23 [with some VST's]

Now dial 2 & 3, well you can switch to single fx mode, but then you've only got control of one fx and the real fun only starts chaining fx.



Here we have 2 fx on slots 1 & 2 and their GUI's
we want to control both independently at the the same time so we have to be in multi fx mode
but we want to control dial 2 for both fx.

Ok we could just hold the controllers shift button and struggle to handle 2 dials with 1 hand.
Painful, we won't do that.
[DON'T USE YOUR NOSE TO HOLD DOWN THE SHIFT BUTTON, ONE DAY YOU'LL DO IT TOO HARD AND GET BLOOD EVERYWHERE]
[TRUST ME ON THAT]

We could remap the hardware dial to something like this
effect_active 1 'Audio Cut8' ? effect_slider 1 2 : effect_slider 1 1
explained;
we ask is the effect that is active on slot 1 Audio Cut8 ?
yes- control slot 1's 2nd slider
no-- control slot 1's 1st slider

Ok that will work, BUT it will only work when the fx is active / on.
Almost perfect, for some fx good enough, but to get it absolutely perfect we need to use something different and this is it

param_equal '`get_effect_name 1`' 'Audio Cut8' ? effect_slider 1 2 : effect_slider 1 1

explained;
We tell vdj we want to see if two things are the same
param_equal

We put the first thing inside straight or double commas, ' ' or " ", because this is an action we also have to put it inside back ticks ` ` [usually the key above tab] and then the actual action, here it is put together
'`get_effect_name 1`'
The second thing we are looking at is just a collection of characters that make a fx name [collection of characters are known as a string]
So this is the second thing we are looking at, so inside straight or double commas like before, but it's not an action so no need for back ticks this time.
'Audio Cut8'
and this is a question/query so we have a question mark,
and the replies/answers are like before
yes- control slot 1's 2nd slider
no-- control slot 1's 1st slider

Complicated ? To start with yes, the only way to get good and remember this stuff is practice.
Ok let's take the next step, we'll do slot 3 this time, and we'll check for Audio Cut8 or Distortion and control dial 2 for those and dial 1 for anything else

param_equal '`get_effect_name 3`' 'Audio Cut8' ? effect_slider 3 2 : param_equal '`get_effect_name 3`' 'Distortion' ? effect_slider 3 2 : effect_slider 3 1


running through it very quickly
compare two things, the first thing in commas, it's an action too so inside back ticks, the action is get the effect name on slot 3 this time, the second thing we are comparing goes inside commas but it's just a string not an action so no back ticks, question mark,
yes they are the same so the on the 3rd slot we want to control the second slider,
no they are not the same, let's do the same sort of test but with distortion
compare two things, the first thing in commas, it's an action so inside back ticks, the action is get the effect name on slot 3, the second thing we are comparing goes inside commas but it's just a string so no back ticks, question mark,
yes they are the same so the on the 3rd slot we want to control the second slider,
no they are not the same, so it's not audio cut 8 nor is it distortion so on the 3rd slot we control the first slider like normal fx

Complicated? Hell yes, but it's starting to make a bit of sense, you've just covered 2 very tricky things to understand about script
comparing and even trickier multi querying.

Step back, chill out, stop thinking about it, at some point in the future you'll think 'I don't want dial 1 for this fx I want dial 5'
this tutorial will be here, it'll probably be better written, and when you get stuck you can ask for help in this thread

http://www.virtualdj.com/forums/212946/General_Discussion/How_to__Remap_HW_FX_Dial_1_To_Another_FX_Dial_For_A_Specific_FX_tutorial.html


Mon 26 Sep 16 @ 2:07 pm

How to; Perform A Action Automatically When A Track Is Loaded


This is a question that crops up from time to time so here is a tutorial.
In this tutorial we want the hotcues padpage to be shown whenever a new track is loaded.
We'll be using a repeating script to check a variable called load_pulse (this automatically changes from normally true to briefly false when a track is loaded) when load_pulse is false we call the pad page 'hotcues'

repeat_start_instant 'rsiPulseCheck' 190ms & load_pulse ? nothing : pad_page 'hotcues'

I tell vdj that I want a repeating script

repeat_start_instant

I give the repeating script a name

'rsiPulseCheck'

I tell vdj how often I want to repeat the script (more on why 190ms later)

190ms

Now the actual script I want to repeat

load_pulse ? nothing : pad_page 'hotcues'

load_pulse is a script that most of the time when queried gives the answer true/yes but when a track is loaded will turn to false/no for 200ms and then returns to true (This is why I used 190ms)

While load_pulse is true I want nothing to happen, when it turns to false I want the pad pages to switch to 'hotcues'

Where do I write this script?
Well if you always want this action to happen the best place would be on your ONINIT mapping
If you want this to be switchable then you need to change the script a little and put it on a custom button or a keyboard key or a HW button,
Here is the modified script

toggle '$pulseCheck' & var '$pulseCheck' ? repeat_start_instant 'rsiPulseCheck' 190ms & load_pulse ? nothing : pad_page 'hotcues' : repeat_stop 'rsiPulseCheck'

Here is the explanation
When I press a button I want to change a variable from false to true, or from true to false (I called the variable 'pulseCheck' and made it a global variable by putting a $ on the start. (most variables start as false when you turn vdj on)

toggle '$pulseCheck'

I then query the variable

var '$pulseCheck' ?

If the variable is true then this is the action that is performed (which we have already covered)

repeat_start_instant 'rsiPulseCheck' 190ms & load_pulse ? nothing : pad_page 'hotcues'

If the variable is false (when you press your button for a second time togging the variable from true to false) we don't want rsiPulseChecker running any more so this is the action sent

repeat_stop 'rsiPulseCheck'

We tell vdj we want to stop a repeating script

repeat_stop

and we tell vdj the name of the repeating script we want to stop

'rsiPulseCheck'

Some Pioneer HW works a little differently (pads work from a variable called padmode) so here's the script for them

toggle '$pulseCheck' & var '$pulseCheck' ? repeat_start_instant 'rsiPulseCheck' 190ms & load_pulse ? nothing : set 'padmode' 0 : repeat_stop 'rsiPulseCheck'


For further discussion or help please post here
http://www.virtualdj.com/forums/212799/General_Discussion/How_to__Perform_A_Action_Automatically_When_A_Track_Is_Loaded__Tutorial.html


Fri 05 Aug 16 @ 3:54 pm

How to; Make A Pads Index Page


This is a step by step tutorial on how to make a pads index page.

Wait, why do I need a index page? There's only one reason, it's quicker, quicker than selecting your pad page by scrolling through the pages and much quicker than using the mouse.

Step by step

1 Go to open the pad page drop down menu, click edit.


2 Click the 'New Page' button and give the new page the name 'Index'


3 Edit each of the pads to link to the page of your choice, by typing
pad_page 'Whatever pad page you want on this button'

and then give that pad a name


4 Do that until you have linked all the buttons or linked to all the pad pages you want to access quickly.

5 Now you have a Index page; how do you access that quickly? Easy, go into your controller mapping and find a button you don't use or find a button that by default links to a pad page and remap the button to this.
pad_page 'index'


I would choose a button that already links to a pad page [maybe one you don't use as regular] as that way you keep all the original function.

That's all there is to it. you've now made your own pad page and customised your controller to your needs.

Any questions or comments please ask in the thread linked here
http://www.virtualdj.com/forums/211607/General_Discussion/_How_to__Make_A_Pads_Index_Page__Tutorial.html


Tue 02 Aug 16 @ 2:43 pm

Add to a variable

set "$Counter" '`get_var "$Counter" & param_add 1'

Slider decided by fx in slot

param_equal '`get_effect_name X`' 'fx name' ? effect_slider X Y1 : effect_slider X Y2

autoaction after cue

repeat_start_instant 'AAction' 33ms & param_bigger "get_time cue1 1000" "get_time elapsed 1000" ? goto -8 : nothing


Fri 11 Mar 16 @ 6:39 pm

so you know you've got a gig on some gear you've not used before, now they'll usually be someone to show you and most gear is pretty intuitive.

but if you want to look professional it helps to check how vdj is mapped for that hardware.

with vdj you can, you don't need the hardware plugged in, you just pick show all equipment in the controllers section.

open config, pick controllers,

if you right click the blue bit in this picture [your current mapping]



then the option to show all natively compatible equipment.


[did you know vinyl touch dial on a cdj2000 was effect slider 1, i didn't]

you can check out the mapping for any bit of supported gear, being able to school up on a bit of gear before using, is pretty ninja. if you want to be really ninja you can make custom edits so you can rock up jack in and rock out like a pro.

till next time.


Sun 21 Feb 16 @ 9:10 pm

So I'm just at home previewing a huge list of breakcore, just using automix to play and a simple keyboard shortcut to mark tracks I don't like

browsed_file_color 'green'


While I'm pottering around at home I might want to move the track on with a jump shortcut

goto +64


Now I'm using two deck mode (for no particular reason) and my goto command only works on the selected deck. Now I could just switch to one deck automix but that didn't happen,

So looking at the behavior I figured I wanted to make the playing deck the selected deck, but had to remember with the fade mix I'm using (no reason), for a short time has two decks playing.

Ok so a simple query will sort this out

deck 1 play ? deck 2 play ? nothing : deck 1 select : deck 2 select


Is deck 1 playing ? Yes deck 1 is playing, is deck 2 playing as well ? Yes they are both playing, well we must be in the mix and we want the selected deck to be the out going song, which it will be so there is nothing to do.
deck 1 yes deck 2 no = only deck 1 playing so make it the selected deck
deck 1 no = deck 2 must be playing instead

So I just need to keep asking that query, and vdjscript lets you do this with a 'repeat_start' script

repeat_start 'AMSelectSwitch' 33ms &


Every 33ms (a speed limit that vdj doesn't go under) it will do whatever comes after the & symbol,
Combine the two

repeat_start 'AMSelectSwitch' 33ms & deck 1 play ? deck 2 play ? nothing : deck 1 select : deck 2 select


Now for my purposes it doesn't mean much but with vdjscript you never know where a simple idea can take you.
Drop comments or thoughts on my wall.


Fri 24 Apr 15 @ 8:31 am

Filter keys is a windows setting to stop key repeats.
By default Windows has these switched off, so holding "A" will give you,

"AAAAAAAAAA"

With filter keys you get just "A"

To set up filter keys is easy, goto

Control Panel\All Control Panel Items\Ease of Access Center\Set up Filter Keys

Set as I have done in the picture.


You can now turn filter keys on or off by holding the right shift button for 8 seconds.


Sat 18 Apr 15 @ 4:55 pm

2 Dial, 1 Button Ducking with the Volume FX

First get and install the "Volume" FX - Link

Put this on a dial (custom or HW, custom will do) This sets the bottom level
(you'll only have to set this once, ever)
set '@$DukLevel' & var_equal '@$DukLevel' 0 ? set '@$DukLevel' "`get_var '@$DukLevel' & param_add 0.01"


Put this on another dial. This sets the rate, slow to very fast, (Over 100%, 7.5s to less than 0.5s )
(it too only needs to be set once)
set '@$DukRate'


Put this on a custom_button
var_equal '$DukVar' 0 ? mic on & deck 1 effect_active "Volume" 1 & deck 2 effect_active "Volume" 1 & deck 1 effect_slider "Volume" 2 60% & deck 2 effect_slider "Volume" 2 60% & set '$DukCounter' 1 & repeat_start_instant 'DukSweep' 10ms 201 & var_greater '@$DukLevel' '$DukCounter' ? set '$DukVar' 1 & repeat_stop 'DukSweep' : var_smaller '@$DukRate' 0.1 ? set '$DukCounter' '`get_var "$DukCounter" & param_add -0.005' & deck 1 effect_slider "Volume" 1 -0.5% & deck 2 effect_slider "Volume" 1 -0.5% : var_smaller '@$DukRate' 0.2 ? set '$DukCounter' '`get_var "$DukCounter" & param_add -0.01' & deck 1 effect_slider "Volume" 1 -1% & deck 2 effect_slider "Volume" 1 -1% : var_smaller '@$DukRate' 0.3 ? set '$DukCounter' '`get_var "$DukCounter" & param_add -0.015' & deck 1 effect_slider "Volume" 1 -1.5% & deck 2 effect_slider "Volume" 1 -1.5% : var_smaller '@$DukRate' 0.4 ? set '$DukCounter' '`get_var "$DukCounter" & param_add -0.02' & deck 1 effect_slider "Volume" 1 -2% & deck 2 effect_slider "Volume" 1 -2% : var_smaller '@$DukRate' 0.5 ? set '$DukCounter' '`get_var "$DukCounter" & param_add -0.025' & deck 1 effect_slider "Volume" 1 -2.5% & deck 2 effect_slider "Volume" 1 -2.5% : var_smaller '@$DukRate' 0.6 ? set '$DukCounter' '`get_var "$DukCounter" & param_add -0.05' & deck 1 effect_slider "Volume" 1 -5% & deck 2 effect_slider "Volume" 1 -5% : var_smaller '@$DukRate' 0.7 ? set '$DukCounter' '`get_var "$DukCounter" & param_add -0.06' & deck 1 effect_slider "Volume" 1 -6% & deck 2 effect_slider "Volume" 1 -6% : var_smaller '@$DukRate' 0.8 ? set '$DukCounter' '`get_var "$DukCounter" & param_add -0.07' & deck 1 effect_slider "Volume" 1 -7% & deck 2 effect_slider "Volume" 1 -7% : var_smaller '@$DukRate' 0.9 ? set '$DukCounter' '`get_var "$DukCounter" & param_add -0.08' & deck 1 effect_slider "Volume" 1 -8% & deck 2 effect_slider "Volume" 1 -8% : var_smaller '@$DukRate' 0.99 ? set '$DukCounter' '`get_var "$DukCounter" & param_add -0.09' & deck 1 effect_slider "Volume" 1 -9% & deck 2 effect_slider "Volume" 1 -9% : set '$DukCounter' '`get_var "$DukCounter" & param_add -0.1' & deck 1 effect_slider "Volume" 1 -10% & deck 2 effect_slider "Volume" 1 -10% : mic off & repeat_start_instant 'DukSweep' 10ms 202 & var_greater '$DukCounter' 1 ? set '$DukVar' 0 & repeat_stop 'DukSweep' & set '$DukCounter' 1 & deck 1 effect_active "Volume" 0 & deck 2 effect_active "Volume" 0 : var_smaller '@$DukRate' 0.1 ? set '$DukCounter' '`get_var "$DukCounter" & param_add +0.005' & deck 1 effect_slider "Volume" 1 +0.5% & deck 2 effect_slider "Volume" 1 +0.5% : var_smaller '@$DukRate' 0.2 ? set '$DukCounter' '`get_var "$DukCounter" & param_add +0.01' & deck 1 effect_slider "Volume" 1 +1% & deck 2 effect_slider "Volume" 1 +1% : var_smaller '@$DukRate' 0.3 ? set '$DukCounter' '`get_var "$DukCounter" & param_add +0.015' & deck 1 effect_slider "Volume" 1 +1.5% & deck 2 effect_slider "Volume" 1 +1.5% : var_smaller '@$DukRate' 0.4 ? set '$DukCounter' '`get_var "$DukCounter" & param_add +0.02' & deck 1 effect_slider "Volume" 1 +2% & deck 2 effect_slider "Volume" 1 +2% : var_smaller '@$DukRate' 0.5 ? set '$DukCounter' '`get_var "$DukCounter" & param_add +0.025' & deck 1 effect_slider "Volume" 1 +2.5% & deck 2 effect_slider "Volume" 1 +2.5% : var_smaller '@$DukRate' 0.6 ? set '$DukCounter' '`get_var "$DukCounter" & param_add +0.05' & deck 1 effect_slider "Volume" 1 +5% & deck 2 effect_slider "Volume" 1 +5% : var_smaller '@$DukRate' 0.7 ? set '$DukCounter' '`get_var "$DukCounter" & param_add +0.06' & deck 1 effect_slider "Volume" 1 +6% & deck 2 effect_slider "Volume" 1 +6% : var_smaller '@$DukRate' 0.8 ? set '$DukCounter' '`get_var "$DukCounter" & param_add +0.07' & deck 1 effect_slider "Volume" 1 +7% & deck 2 effect_slider "Volume" 1 +7% : var_smaller '@$DukRate' 0.9 ? set '$DukCounter' '`get_var "$DukCounter" & param_add +0.08' & deck 1 effect_slider "Volume" 1 +8% & deck 2 effect_slider "Volume" 1 +8% : var_smaller '@$DukRate' 0.99 ? set '$DukCounter' '`get_var "$DukCounter" & param_add +0.09' & deck 1 effect_slider "Volume" 1 +9% & deck 2 effect_slider "Volume" 1 +9% : set '$DukCounter' '`get_var "$DukCounter" & param_add +0.1' & deck 1 effect_slider "Volume" 1 +10% & deck 2 effect_slider "Volume" 1 +10%


For skinners, the site converts &apos ; to ' even in code tags, use Ctrl+H to replace these ommiting the space before ;

' = &apos ;
" = &quot ;
& = &amp ;



Wed 25 Mar 15 @ 8:19 am

set "decimalMinutes" '`get_time "total" & param_multiply 0.0000166666'
set "totalBeats" '`get_var "decimalMintues" & param_multiply "get_bpm"'
set "beats=1%" '`get_constant 0.01 & param_multiply "get_var totalBeats"'


Thu 19 Feb 15 @ 8:57 pm

Filter Crossfader

On the crossfader mapping: kicks in @50%
crossfader & param_bigger 50% ? deck 1 filter : param_invert & deck 2 filter

On the crossfader mapping: kicks in @0%
crossfader & param_invert & param_multiply 50% & param_invert & deck 1 filter & param_invert & param_add 50% & deck 2 filter

Crossfader mapping : kicks in across the middle 2/4's (25% to 75%)
crossfader & param_bigger 25% ? param_smaller 75% ? param_invert & param_add -25% & param_invert & deck 1 filter & param_invert & param_add 50% & deck 2 filter : deck 2 filter 50% & deck 1 filter 100% : deck 1 filter 50% & deck 2 filter 100%

Crossfader mapping : kicks in in the end 1/4's (0%to 25% & 75% to 100%)
crossfader & param_smaller 25% ? param_multiply 200% & param_invert & deck 2 filter : param_bigger 75% ? param_add -50% & param_multiply 200% & deck 1 filter : nothing : crossfader