In generale non c'è bisogno di sincronizzare i nodi dato che vvvv è organizzato in frames. In ogni frame ogni nodo viene calcolato il tempo necessario per essere in grado di generare l'output così che gli altri nodi possano riceverlo.
vvvv si prende cura di tutte le dipendenze tra i nodi: un nodo, connesso tramite i suoi input pins ad altri nodi cerca di valutare sé stesso per emettere un output valido, e così fanno anche i nodi a monte. Questo spiega anche perché grafici a loop non sono ammessi. Per ottenere un loop è necessario ricorrere a valori dell'ultimo frame (non di quello attuale), utilizzando ad esempi il nodo FrameDelay(Animation).
Per trigger di delay, di estrazione, interruttori, alternatori vedere nodi come questi: Delay (Animation), MonoFlop (Animation), FlipFlop (Animation), TogEdge (Animation), Toggle (Animation), Switch?.
Non puoi. Nello stesso momento, in vvvv, tutti i nodi ricevono i loro nuovi valori. VVVV ha a che fare coi valori, non col cambio di valori. VVVV divide il tempo in frames, ed in ogni frame tutte le cose succedono contemporaneamente. Tutti i valori vengono campionati, tutti i nuovi valori vengono calcolati, tutti i valori risultanti vengono inviati ai pins contemporaneamente.
Ogni nodo viene calcolato una volta sola in un frame. Quindi vvvv cerca di evitare loops nei flussi di dati, altrimenti avremmo un valore in input di un nodo come funzione del suo output. Vedere Generare Feedback Loops.
Leggi sopra. Probabilmente sei abituato a Max/PD. Non c'è quel tipo di "Bang" in vvvv. Tutte le connessioni contengono sempre un valore, e gli eventi non possono prescindere dalle connessioni.
Un bang, in vvvv, è semplicemente un 1 per un frame, a cui segue uno 0 in tutti gli altri frames.
Inoltre gli IOBoxes non vengono azionati in alcun modo - mostrano solamente il valore in ingresso. Le modalità toggle e bang esistono solo per comodità dell'utente nell'input dei dati - i valori non vengono processati dagli IOBoxes.
Gli Arrays vengono chiamati Spreads, in vvvv. Molti nodi li trattano come liste o liste di proprietà. Vedere Spreads
Le Subroutines possono essere simulate con le Subpatches. Vedere Subpatches
If-Then-Else può essere invece facilmente emulato con Switch?, che opera una selezione tra differenti inputs. VVVV risparmierà calcoli, non processando percorsi non utilizzati nel grafico. Anche per simulare "Case statements" si possono usare gli Switches, facendo attenzione al pin InputCount e controllandolo nell'Ispettore - oppure usare GetSlice? per operare selezioni tra le slices di uno spread.
Se si vuole generare un loop per ripetere semplicemente un certo numero di azioni in un array, allora gli spreads sono il rimpiazzo giusto: Basta fare tutte le cose contemporaneamente (pensaci sopra).
Sorprendentemente quasi tutti gli altri loops possono essere effettuati con nodi come Select?, I (Spreads), Cross (2d), Sort (Spreads), Cons?, le varianti spectral di certi altri nodi, o i vari altri oggetti high level. Assicurati di consultare le loro pagine di aiuto.
Se il loop deve produrre una sequenza di azioni nel tempo (come contare da 10 a 0) si possono usare questi nodi:
Per ora no - sarà necessario che te lo costruisca su misura.
Dovrai convertire i valori in stringhe, con qualcosa come i nodi + (String Spectral) ed udare Writer (File) per salvarlo sul disco. Poi la combinazione del nodo Reader (File) col nodo RegExpr (String) per ricostruire il tutto.
Il nodo OnOpen (VVVV) potrebbe essere utile.
kalle ha preparato un set di modules per questo scopo, che possono essere trovati qui: kalle.Modules.Sequencer.
Per ragionevole possa essere, per ora non è possibile. Per aggirare il problema comunque si può:
definire un nodo S (Value) per ogni selezione che si vuole ottenere, generare un nodo R (Value) e connetterlo ad un IOBox (Enumerations). Tutti i nodi S ora dovrebbero apparire nell'EnumBox. Il nodo R emette il valore del S selezionato.
Esiste però, di contro, il problema che usando S o R si ottengono più enumerazioni in R...
Le enumerazioni possono ricevere voci nuove se sono specificate nella patch salvata; per esempio con le enumerazioni di schede audio o adattatori video. se si apre una patch salvata su una macchina con un hardware differente, questo hardware che è stato salvato nella patch, comparirà accanto all'hardware della macchina in cui si sta aprendo la patch. Comodo, no? Inoltre questo semplifica molto lo sviluppo di setups multipatch con dipendenze circolari.
Niente. Si tratta solo di uno Spread Vuoto. La maggior parte dei nodi in output restituisce uno spread vuoto se in input ce n'è uno. Sebbene all'inizio possa irritare, aiuta nel gestire valori indefiniti nel grafico, ed è uno stato perfettamente ragionevole. Tieni presente che uno spread vuoto può influenzare molti nodi lungo la catena delle connessioni, da monte a valle. Quindi per individuare il nodo problematico si deve risalire il grafico.
C'è un aspetto interessante legato ai loops. In alcuni casi un loop, all'avvio della patch può impostarsi su uno spread vuoto. Usando Switch, si può provare a collegare, all'altro pin che non farà parte del loop, una costante. Usando la costante si potrà quindi riavviare il loop senza problemi. Anche usare Resample ha dato buoi risultati. Vedere Spreads
Leggere qui.
La maggior parte dei nodi, se influenzati da uno spread, possono essere usati coi vettori. Due esempi? I nodi InputMorph (Value) e Map (Value).
Dai un'occhiata al nodo CircularSpread (Spreads) (suggerimento: anche lo spreadcount dovrebbe esser 1...). E poi i nodi WaveShaper (Value) e Expr (Value).
Se il valore richiesto è un intero, ovviamente vvvv lo converte in automatico. Negli altri casi c'è il nodo Frac (Value), ed anche FormatValue (String) può dare una mano.
Sì. SetPatch (VVVV) e GetPatch (VVVV) consentono di recuperare o cambiare la struttura XML della patch attualmente in esecuzione. Analizzando ed impostare la struttura di una patch è un po' complicato, ma molto utile. Maneggiare con cura.
Stiamo ottimizzando vvvv per avere prestazioni ottimali quando la patch non cambia ad ogni frame. Si ottiene il massimo delle prestazioni quando il grafico è solo in esecuzione, e ci si aspettano cali quando si cambiano porzioni del grafico.
Con le versioni precedenti alla beta9 non facilmente. C'è una soluzione stramba, che si sviluppa in un temuto Visual Basic Script per gestire la cosa con le versioni precedenti.
set WshShell = WScript.CreateObject("WScript.Shell") WshShell.AppActivate "NAME-OF-PATCH-TO-CLOSE.v4p" WshShell.SendKeys "^w" WshShell.SendKeys "{ENTER}"
salva in .VBS, quindi esegui con shellexecute. Se ci sono spazi assicurarsi di inserire " all'inizio ed alla fine.
Fare attenzione al fatto che questo tipo di soluzioni non sono sicure e, in casi particolari, potrebbero portare lo script a non funzionare correttamente.
Inoltre l'host di Windows Script deve essere in esecuzione e non ostacolato per esempio da un antivirus. Per ulteriori dettagli vedere questo articoli su MSDN http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wsmthsendkeys.asphttp://www.icpug.org.uk/national/features/030316fe.htm
C'è un nodo Switch (Value, Input) . Un sequencer semplice potrebbe essere costruito in questo modo: generare i seguenti nodi nella patch: LFO (Animation), Counter (Animation), Switch (Value Input).
Ora collegate l'output di LFO al pin up del Counter e l'output del Counter al pin switch dello Switch. Imposta "Input Count" dello switch, tramite l'Ispettore, su 16; immettete ora qualche valore per i 16 pin del vostro nuovo sequencer.
Una soluzione più avanzata ci potrebbe essere utilizzando GetSlice (Spread) invece dello Switch (vedi la patch di aiuto). E' simile nel funzionamento, ma utilizza slices differenti piuttosto che gli input pins.
Un'altra caratteristica notevole di vvvv è che l'input dello Switch ricomincia da capo automaticamente quando vengono immessi numeri interi più grandi della quantità dei pins. Così si può anche collegare direttamente l'input dello Switch con il pin Period Out del nodo LFO, ed abbandonare il counter. Lo stesso vale con GetSlice.
Fai esperimenti con il nodo InputMorph (Value). Simile allo Switch, anche con una quantità variabile di input pins, consente però di interpolare tra diversi inputs immettendo numeri frazionari.
Il nodo Map (Value Interval) o il modo Spline del nodo Resample (Spreads) sono molto utili per costruire un sequencer - dai un'occhiata alle patch di aiuto.
sven ha realizzato due diversi moduli sequencer che possono essere trovati qui.
kalle ha preparato un set di modules che sono un po' diversi. Li puoi trovare su kalle.Modules.Sequencer.
anonymous user login
~10h ago
~10h ago
~8d ago
~10d ago
~12d ago
~15d ago
~15d ago
~22d ago
~29d ago
~29d ago