Il VDJscript è il linguaggio di programmazione di VirtualDJ ed è usato per programmare gli skins, impostare i collegamenti da tastiera (shortcuts) e le [url=http://www.virtualdj.com/wiki/Definizioni per i controller.html]definizioni per i controller[/url].
Il VDJscript è un linguaggio molto versatile che permette sia una programmazione semplice ed intuitiva per le operazioni semplici che lo
scripting di macro molto complesse per ottenere funzionalità complesse.
Nella sua forma più semplice, è possibile scrivere comandi come "play", "pause", "goto_cue 1", "volume 70%", "pitch 0.5%", etc...
Oppure scrivere macro complesse come "play ? crossfader 12.3% & effect 'flanger' activate : deck 2 loop 4 & set $myvar 42"
Verbi
Gli elementi di base del VDJscript sono i "verbi".
E’ possibile trovare la lista completa dei verbi nel box presente nella scheda Config / Mapper di VirtualDJ.
In alternativa è possibile trovare l’ elenco dei verbi (e la loro descrizione) sotto l’ elemento del file English.xml presente nella cartella Documenti / VirtualDJ/Languages
Commandi
Il comando di base è l’ uso di un solo verbo (ad esempio “play” o “pause”).
Possono essere specificati anche parametri opzionali:
- lettore: è possibile specificare su quale lettore deve agire il verbo aggiungendo "deck xxx" prima del verbo. xxx può essere "1", "2", "left", "right", "default" o "active". ("1"/"left" e "2"/"right" sono sinonimi).
- paramentri: i verbi possono essere seguiti da uno o due parametri.
La funzione dei parametri dipende dal verbo in uso.
I paramentri posso essere di tipo stringa, percentuali, booleani, tempi, valori interi o valori decimali.
- effetti: per i verbi che agiscono sugli effetti, è necessario anteporre il verbo la parola chiave'"effects" eventualmente seguita dal nome dell’ effetto o dal numero di slot: "effect activate" o "effect 'flanger' slider 1 100%".
- campionatore: per i verbi che agiscono sul campionatore, è necessario anteporre il verbo la parola chiave " sampler " , eventualmente seguita dal numero di slot del campionatore: "sampler activate" or"sampler 3 volume 100%".
- queries: E’ possibile interrogare lo stato dei verbi per ottenere il loro valore boleano (vero o falso).Per alcune query dove si richiedono
risultati numerici o testo và utilizzata la parola chiave get prima del verbo: "get time_ms".
- Azioni temporanee: è possibile specificare con l’ aggiunta della parola chiave "while_pressed" alla fine del comando che il verbo deve essere eseguito finche il tasto viene mantenuto premuto: "volume 100% while_pressed"
- lampeggio: usando le query, è possibile aggiungere la parola chiave "blink" o "blinkfast" per ottenere la risposta booleana vero o falso per il lampeggio, se la risposta originale era vera: "play blink" [per disapprovare: usare invece: "play ? blink:nothing"]
La sintassi completa dei comandi è:
[deck [deck]] [sampler [slot] | effect [effectname/slot] | get] verb [param1] [param2] [blink | blinkfast] [while_pressed]
( [...] significa : opzionale )
( | significa : or )
Macros
E' possibile scrivere macros complesse usando l' operatore "&" per concatenare comandi o l' operatore "?" e ":" per scrivere scelte
condizionali.
Usando "command1 & command2 & command3" sarà eseguito il command1, poi il command2 e il command3.
Usando "command1 ? command2 : command3" viene interrogato lo stato della variabile command1: se il risultato è
"vero" sarà eseguito il command2 altrimenti sarà eseguito il command3.
Per esempio:
Usando "action_deck 1? command1 : command2" viene eseguito il “Command1” se il pulsante sul controller è stato definito nel lettore 1 (vedi il file "definizione" xml) o esegue il “Command2” se il pulsante è stato definito nel lettore 2.
Actions vs queries
I comandi possono essere utilizzati sia come azioni o come query, a seconda del contesto.
Per esempio, il commando "play" usato in un collegamento da tastiera, sarà un'azione che farà partire la riproduzione del brano quando eseguita.
Lo stesso comando "play" può essere usato per mappare un LED del controller, quindi sarà una query che restituirà true(vero) se il brano è in riproduzione, o false (falso) se non lo è.
Alcuni comandi possono restituire un valore booleano (vero o falso) o un valore, a seconda dei parametri:
- "crossfader" restituirà il valore (between 0.0 and 1.0) se utilizzato in una query
- "crossfader 42%" restituirà il valore true (vero) se il crossfader è al 42%, oppure false (falso) per gli altri valori.
I Comandi che utilizzando la parola chiave "get" possono anche restituire una stringa o un numero, a seconda del verbo.
Parametri
Il VDJscript sa 6 tipi di parametri::
- testo: devono essere racchiuso tra singoli apici (') o doppi apici ("): "load 'myfile.mp3'"
- booleano: possono essere le parole chiave "on", "off" o "toggle".
(spesso sono equivalenti ai numeri interi 1, 0 e -1 rispettivamente):
"smart_play off"
- tempo: sono specificati aggiungendo la parola chiave "ms": "nudge 100 ms"
- interi: "effect select 1"
- decimali: "crossfader 0.5"
- percentuale: "crossfader 50%"
Nella maggiorparte dei casi, i decimali e le percentuali sono sono trattati alla stessa maniera (ovviamente dividendo la % per 100).
Ci sono alcune eccezioni, come il verbo "pitch", con "pitch 100%" viene impostato nella metà mentre "pitch 1.0" al massimo.
Anche "nudge 1" e "nudge 1,0" non sono la stessa cosa.
La prima action muove di 1 beat la traccia,mentre la seconda equivale a"nudge 100%", qindi fa avanzare la traccia alla fine.
Nella maggior parte delle volte è consigliato utilizzare percentuali invece di decimali, ma è bene conoscere queste differenze utili nel caso della scrittura di script complessi.
Parametri impliciti
Quando un comando viene utilizzato come l'azione di un cursore (manopola,jogwheel,ecc),il valore del cursore verrà aggiunto come un
parametro implicito.
Quando si aggiunge un parametro implicito,questo è aggiunto alla fine di ogni comando, come un ulteriore parametro che segue di poco,quelli già esistenti.
Quindi,se l'azione scritta è "volume" e si mappa ad un cursore che si sposta al 42%, l'azione inviata sarà "volume 0,42".
Ma se l'azione scritta è "volume 10%", l'azione inviata sarà "volume 10% 0,42" (il secondo parametro 0,42 sarà ignorato,perché il verbo "volume" richiede solo un parametro).
Se è necessario modificare il parametro implicito,possiamo utilizzare alcuni verbi come "param_multiply", "param_add", ecc...
Così scrivendo "param_multiply 0,1 & volume "avremo l'impostazione del volume al 4,2%
Se si dispone di una macro con diversi comandi, ogni comando avrà il parametro implicito aggiunto.
Quindi, se scriviamo "crossfader & loop" per mappare un cursore che si sposta a 42 %, l'azione inviata sarà "crossfader 0,42 & loop 0,42".
Se vogliamo evitare che il parametro implicito possa agire su alcuni comandi, è possibile utilizzare la parola chiave "value" per specificare
dove il parametro implicito deve agire.
Così scrivendo "value & loop" invierà "crossfader 0,42 & loop". (se si ha bisogno di scrivere diversi "value" nella macro, ognuno sarà sostituito dal parametro implicito).
Inoltre,è bene sapere che aggiungendo un parametro decimale ai cursori ( "crossfader" -> "crossfader 0,42"),alle jogwheel verrà aggiunto un valore decimale relativo così ("crossfader" -> "crossfader 0,42", 1,0 essendo un giro completo della wheel),agli encoder verrà aggiunto un valore intero relativo ("crossfader "->". crossfader 1").
Se si utilizza un encoder per un verbo che prevede un cursore, il numero intero sarà automaticamente convertito in decimale dividendolo per 32 (in modo che avrà bisogno 32 passi dell'encoder per spostare il cursore dallo 0% al 100%).
Quindi, nell'esempio precedente "crossfader 1" equivale a "crossfader 0,03125".
È possibile utilizzare "param_multiply" se si ha bisogno di un'altra risoluzione.
Variabili
Il VDJscript può gestire i valori e gli stati delle variabili interne.
Se il nome della variabile inizia con l'operatore $ (come "set $myvar"), la variabile sarà 'globale' di entrambi i deck.
Se il nome della variabile comincia con l'operatore % ("set %myvar") o con niente ("set 'myvar'"), la variabile sarà 'locale' di un deck (e può
avere un valore diverso se usato sull'altro deck).
Variabili sono persistenti per tutto il tempo d'uso di VirtualDJ (non sono legate a un controller specifico o ad una skin).
Per impostare una variabile, è possibile utilizzare verbi come "set","toggle","cycle".
Per leggere una variabile, è possibile utilizzare verbi come Pagina 3script "var","var_equal","var_smaller", ecc ..
Un tipico esempio di utilizzo di variabili è scrivere "set $myshift while_pressed" sul tasto shift,oppure "var $myshift? comando1 : comando2 " su un altro pulsante.
Il VDJscript è un linguaggio molto versatile che permette sia una programmazione semplice ed intuitiva per le operazioni semplici che lo
scripting di macro molto complesse per ottenere funzionalità complesse.
Nella sua forma più semplice, è possibile scrivere comandi come "play", "pause", "goto_cue 1", "volume 70%", "pitch 0.5%", etc...
Oppure scrivere macro complesse come "play ? crossfader 12.3% & effect 'flanger' activate : deck 2 loop 4 & set $myvar 42"
Verbi
Gli elementi di base del VDJscript sono i "verbi".
E’ possibile trovare la lista completa dei verbi nel box presente nella scheda Config / Mapper di VirtualDJ.
In alternativa è possibile trovare l’ elenco dei verbi (e la loro descrizione) sotto l’ elemento del file English.xml presente nella cartella Documenti / VirtualDJ/Languages
Commandi
Il comando di base è l’ uso di un solo verbo (ad esempio “play” o “pause”).
Possono essere specificati anche parametri opzionali:
- lettore: è possibile specificare su quale lettore deve agire il verbo aggiungendo "deck xxx" prima del verbo. xxx può essere "1", "2", "left", "right", "default" o "active". ("1"/"left" e "2"/"right" sono sinonimi).
- paramentri: i verbi possono essere seguiti da uno o due parametri.
La funzione dei parametri dipende dal verbo in uso.
I paramentri posso essere di tipo stringa, percentuali, booleani, tempi, valori interi o valori decimali.
- effetti: per i verbi che agiscono sugli effetti, è necessario anteporre il verbo la parola chiave'"effects" eventualmente seguita dal nome dell’ effetto o dal numero di slot: "effect activate" o "effect 'flanger' slider 1 100%".
- campionatore: per i verbi che agiscono sul campionatore, è necessario anteporre il verbo la parola chiave " sampler " , eventualmente seguita dal numero di slot del campionatore: "sampler activate" or"sampler 3 volume 100%".
- queries: E’ possibile interrogare lo stato dei verbi per ottenere il loro valore boleano (vero o falso).Per alcune query dove si richiedono
risultati numerici o testo và utilizzata la parola chiave get prima del verbo: "get time_ms".
- Azioni temporanee: è possibile specificare con l’ aggiunta della parola chiave "while_pressed" alla fine del comando che il verbo deve essere eseguito finche il tasto viene mantenuto premuto: "volume 100% while_pressed"
- lampeggio: usando le query, è possibile aggiungere la parola chiave "blink" o "blinkfast" per ottenere la risposta booleana vero o falso per il lampeggio, se la risposta originale era vera: "play blink" [per disapprovare: usare invece: "play ? blink:nothing"]
La sintassi completa dei comandi è:
[deck [deck]] [sampler [slot] | effect [effectname/slot] | get] verb [param1] [param2] [blink | blinkfast] [while_pressed]
( [...] significa : opzionale )
( | significa : or )
Macros
E' possibile scrivere macros complesse usando l' operatore "&" per concatenare comandi o l' operatore "?" e ":" per scrivere scelte
condizionali.
Usando "command1 & command2 & command3" sarà eseguito il command1, poi il command2 e il command3.
Usando "command1 ? command2 : command3" viene interrogato lo stato della variabile command1: se il risultato è
"vero" sarà eseguito il command2 altrimenti sarà eseguito il command3.
Per esempio:
Usando "action_deck 1? command1 : command2" viene eseguito il “Command1” se il pulsante sul controller è stato definito nel lettore 1 (vedi il file "definizione" xml) o esegue il “Command2” se il pulsante è stato definito nel lettore 2.
Actions vs queries
I comandi possono essere utilizzati sia come azioni o come query, a seconda del contesto.
Per esempio, il commando "play" usato in un collegamento da tastiera, sarà un'azione che farà partire la riproduzione del brano quando eseguita.
Lo stesso comando "play" può essere usato per mappare un LED del controller, quindi sarà una query che restituirà true(vero) se il brano è in riproduzione, o false (falso) se non lo è.
Alcuni comandi possono restituire un valore booleano (vero o falso) o un valore, a seconda dei parametri:
- "crossfader" restituirà il valore (between 0.0 and 1.0) se utilizzato in una query
- "crossfader 42%" restituirà il valore true (vero) se il crossfader è al 42%, oppure false (falso) per gli altri valori.
I Comandi che utilizzando la parola chiave "get" possono anche restituire una stringa o un numero, a seconda del verbo.
Parametri
Il VDJscript sa 6 tipi di parametri::
- testo: devono essere racchiuso tra singoli apici (') o doppi apici ("): "load 'myfile.mp3'"
- booleano: possono essere le parole chiave "on", "off" o "toggle".
(spesso sono equivalenti ai numeri interi 1, 0 e -1 rispettivamente):
"smart_play off"
- tempo: sono specificati aggiungendo la parola chiave "ms": "nudge 100 ms"
- interi: "effect select 1"
- decimali: "crossfader 0.5"
- percentuale: "crossfader 50%"
Nella maggiorparte dei casi, i decimali e le percentuali sono sono trattati alla stessa maniera (ovviamente dividendo la % per 100).
Ci sono alcune eccezioni, come il verbo "pitch", con "pitch 100%" viene impostato nella metà mentre "pitch 1.0" al massimo.
Anche "nudge 1" e "nudge 1,0" non sono la stessa cosa.
La prima action muove di 1 beat la traccia,mentre la seconda equivale a"nudge 100%", qindi fa avanzare la traccia alla fine.
Nella maggior parte delle volte è consigliato utilizzare percentuali invece di decimali, ma è bene conoscere queste differenze utili nel caso della scrittura di script complessi.
Parametri impliciti
Quando un comando viene utilizzato come l'azione di un cursore (manopola,jogwheel,ecc),il valore del cursore verrà aggiunto come un
parametro implicito.
Quando si aggiunge un parametro implicito,questo è aggiunto alla fine di ogni comando, come un ulteriore parametro che segue di poco,quelli già esistenti.
Quindi,se l'azione scritta è "volume" e si mappa ad un cursore che si sposta al 42%, l'azione inviata sarà "volume 0,42".
Ma se l'azione scritta è "volume 10%", l'azione inviata sarà "volume 10% 0,42" (il secondo parametro 0,42 sarà ignorato,perché il verbo "volume" richiede solo un parametro).
Se è necessario modificare il parametro implicito,possiamo utilizzare alcuni verbi come "param_multiply", "param_add", ecc...
Così scrivendo "param_multiply 0,1 & volume "avremo l'impostazione del volume al 4,2%
Se si dispone di una macro con diversi comandi, ogni comando avrà il parametro implicito aggiunto.
Quindi, se scriviamo "crossfader & loop" per mappare un cursore che si sposta a 42 %, l'azione inviata sarà "crossfader 0,42 & loop 0,42".
Se vogliamo evitare che il parametro implicito possa agire su alcuni comandi, è possibile utilizzare la parola chiave "value" per specificare
dove il parametro implicito deve agire.
Così scrivendo "value & loop" invierà "crossfader 0,42 & loop". (se si ha bisogno di scrivere diversi "value" nella macro, ognuno sarà sostituito dal parametro implicito).
Inoltre,è bene sapere che aggiungendo un parametro decimale ai cursori ( "crossfader" -> "crossfader 0,42"),alle jogwheel verrà aggiunto un valore decimale relativo così ("crossfader" -> "crossfader 0,42", 1,0 essendo un giro completo della wheel),agli encoder verrà aggiunto un valore intero relativo ("crossfader "->". crossfader 1").
Se si utilizza un encoder per un verbo che prevede un cursore, il numero intero sarà automaticamente convertito in decimale dividendolo per 32 (in modo che avrà bisogno 32 passi dell'encoder per spostare il cursore dallo 0% al 100%).
Quindi, nell'esempio precedente "crossfader 1" equivale a "crossfader 0,03125".
È possibile utilizzare "param_multiply" se si ha bisogno di un'altra risoluzione.
Variabili
Il VDJscript può gestire i valori e gli stati delle variabili interne.
Se il nome della variabile inizia con l'operatore $ (come "set $myvar"), la variabile sarà 'globale' di entrambi i deck.
Se il nome della variabile comincia con l'operatore % ("set %myvar") o con niente ("set 'myvar'"), la variabile sarà 'locale' di un deck (e può
avere un valore diverso se usato sull'altro deck).
Variabili sono persistenti per tutto il tempo d'uso di VirtualDJ (non sono legate a un controller specifico o ad una skin).
Per impostare una variabile, è possibile utilizzare verbi come "set","toggle","cycle".
Per leggere una variabile, è possibile utilizzare verbi come Pagina 3script "var","var_equal","var_smaller", ecc ..
Un tipico esempio di utilizzo di variabili è scrivere "set $myshift while_pressed" sul tasto shift,oppure "var $myshift? comando1 : comando2 " su un altro pulsante.