» FAQ Patching
This site relies heavily on Javascript. You should enable it if you want the full experience. Learn more.

FAQ Patching


Is there something like a message-order in vvvv like in PD, where you can define exactly, what action should be taken in which order ? (i.e. something like PD's "trigger" object)?

In general you don't need to synchronize nodes since vvvv is organized in frames. In each frame every node is calculated as long as needed to be able to set the outputs which others then can read again.
vvvv takes care of all dependencies between nodes: if a node tries to evaluate itself and has inputs connected with nodes above, then these nodes are pleased to evaluate themself so that their outputs can be taken as valid inputs of the former node. This explains also why strict cyclic graphs are not allowed. To do cyclic graphs you need to somewhere resort to values from the last frame (this is possible by using the node FrameDelay)
For delaying triggers, extracting triggers (up edge of a signal), toggling, switching see nodes like Delay (Animation), MonoFlop (Animation), FlipFlop (Animation), TogEdge (Animation), Toggle (Animation), Switch?.

How vvvv handles priorities. Lets say i have a TogEdge (Animation) node with a Counter (Animation) and a RingBuffer (Spreads) connected on its outlet. How i can ensure that the Ringbuffer get the Bang bevor the Counter?

You cant. All nodes get their new value at the same time. vvvv deals with values, not with changes of values (unlike PD or MAX). vvvv splits time in separate frames, and in each frame all things happen at the same time. All values get sampled at a given time, new values get calculated, and the resulting values are set to the pins.
Note that each node gets calculated only once in a given frame. Therefore vvvv takes some effort to disallow the creation of loops in the data flow, which would make an input value of a node a function of its output value. See Creating Feedback Loops

How do you make a toggle IOBox switch values only when it is triggered by a bang IOBox?

See above. You have probably used PD or Max before. There are no "bangs" in vvvv like in max or pd. all connections contain always a value. there are no events going over the connections.
A bang in vvvv is simply a 1 for one frame, followed by 0 for all other frames.
Also, the IOBoxes doesnt get "triggered" in any way – they just display their incoming value. The various toggle and bang modes of the iobox are just for convenience of the user when inputting data - they do not process the values going through the IOBox in any way.

I know Java, JavaScript, PHP, Perl, ActionScript and even C++ - How can do I do Arrays, Subroutines, If-Then-Else and Loops?

Arrays are called Spreads in vvvv. Many nodes do treat them like lists or property lists. See Spreads

Subroutines can be simulated with Subpatches. See Subpatches

If-Then-Else can be easily emulated with Switch?, which select between different inputs. VVVV will save calculations by not calculating the unused path in your graph. For simulating Case statements use also Switches but note the InputCount pin in the inspector - or use GetSlice? to select between different slices of a spread

If you want to do loops and your loop is simply intended to repeat a number of actions on an array, then spreads will be the replacement: Just do all things at the same time (Think about it).
Surprisingly allmost all other loops we have encountered yet can be replaced by nodes like Select?, I (Spreads), Cross (2d), Sort (Spreads), Cons?, the spectral variants of certain nodes, or the various included other high level objects. Make sure you have seen their help pages.

I want a clock, a counter, a timer

If your Loop is supposed to deliver a sequence of actions over time (like count down from 10 to 0) there are many nodes for that:

Is there a snapshot object, where can I store presets?

For now there is no handy snapshot object - you need to write something like this yourself.
you´d need to convert your values to a string (use something like + (String Spectral) and use Writer (File) to save that to disk. use Reader (File) with RegExpr (String) to reconstruct your value spread from disk.
OnOpen (VVVV) might come handy.
kalle made a set of modules for those purposes. they can be found at kalle.Modules.Sequencer

I want to define my own enumeration pins for my modules.

Sounds reasonable, but: No, for now you can't define your own
enumerations. Anyway there is a little workaround:

Define for every selection you want to get an S (Value) node. now create the R (Value) and connect an IOBox (Enumerations). all defined S nodes should appear now in the Enum box. the R node outputs the value of the selected S.
But if you are using S or R anyway you have the disadvantage that you have more enumerations at your R...

I have encountered a new entry in an enumeration pin, what is it for?

Enumerations can get additional entries if these are specified in the saved patch file. For example this usually happens with enumerations of sound card drivers or video card adapters: If you are opening patches which are created on a machine with a different hardware configuration, the name of that hardware gets stored in the patch file - on another machine with the different hardware this extra entry occurs in addition to the installed hardware. The advantage is, that if you save the patch and open it again on the orginal machine everything is the same as before. So the values in the patch file do not get lost - even if they are not included in the enumeration of the currently running implementation.
Also this strategy simplifies the implementation of loading of multipatch setups with cyclic dependencies a lot.

What if i have a spreadcount of 0?

Never mind. You have encountered an empty spread. Most of the nodes will output an empty spread when they have an empty spread on any input. While irritating at first this allows for a clean handling of undefined values in your graph, and is a perfectly reasonable state. Note that empty spreads tend to influence many nodes - one node way upwards can make the output of all decendants empty. So if you encounter empty spreads go up in the graph until you find the evil.
If your graph contains loops things can get more interesting: Depending on your initialization a loop may settle down in a state where all data in the loops consists of empty spreads - instead of your valuable data.
Try to set a constant start value for the spread via a switch (one input is in the loop and the other has a constant). By shortly switching to the constant you should then be able to re-initialize the loop. Alternatively a Resample with a constant length proved to be helpful as well. See Spreads

Why cant i connect two pins of the same data type?

This is most likely because it would create a loop in the graph. See Creating Feedback Loops. Simple solution is closing the loop over a FrameDelay? node.

How can I do linear interpolations bewtween two vectors, similar to Slerp (Quaternion) node?

Most nodes can be used on vectors as well. So a InputMorph (Value) or Map (Value) does the trick when spreaded.

How do I generate sine values?

have a look at CircularSpread (Spreads) (a hint: spreadcount might be 1 also...). WaveShaper (Value) and Expr (Value) might also be an option.

How can I round an float to a integer value.

Obviously you can directly connect the pins, and vvvv does automatic rounding if the required value is an integer. But if you need to round yourself Frac (Value) does the job. FormatValue (String) might help as well.

Is it possible to add patches to a running vvvv patch?

Yes. (SetPatch (VVVV) )) and (GetPatch (VVVV) )) allow you to retrieve or change the XML structure of the currently running patch. Analysing and Setting patch struture is a little tricky, but very powerful. Use this with care.

Note that we are ptimizing vvvv for having optimum performance when the patch is not changing each frame. So do expect maximum performance when the graph is just running and expect delays when you change portions of the graph.

Is it possible to remove patches from a running vvvv patch?

With versions prior to beta9 not easily. Our workaround weirdo developed the following dreaded Visual Basic Script for dealing with older versions

 set WshShell = WScript.CreateObject("WScript.Shell")
 WshShell.AppActivate "NAME-OF-PATCH-TO-CLOSE.v4p"
 WshShell.SendKeys "^w"
 WshShell.SendKeys "{ENTER}"

save as "filename.VBS", then run with shellexecute. If you want to open a file with spaces make sure you include the " on beginning and end
Note that all of these macro recording / context-switching workarounds are unsafe - for example by wildly clicking around, a user might be able to intercept the script and avoid it from running properly.
Also, Windows Script host must be running and not disabled by some antivirus software.
for more see this article on MSDN http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wsmthsendkeys.asphttp://www.icpug.org.uk/national/features/030316fe.htm

The way i learned to make a sequencer in max is using a counter to do lookup on a table, and then increment the counter with a metronome. i can find a counter object in vvvv, but not the other two. is there a really easy way to make a sequencer?

There is a node Switch (Value, Input) . A simple sequencer could be built like this: Put the following nodes in your patch: LFO (Animation), Counter (Animation), Switch (Value Input)
Now connect LFO Output-Pin to Counter Up-Pin and Counter Output-Pin to Switch Switch-Pin. Set the Switch "Input Count" in HerrInspector to 16. Set some values for the 16 Input pins. Now you have a 16 Step-Sequencer.
A more advanced solution would be using GetSlice (Spreads) instead of Switch (see the help patch). It is similar in function, but it uses different slices to select from instead of different input pins.
Another remarkable feature of vvvv is, that the switch input gets automatically wrapped over, when confronted with integers larger than the pin count. So you can also directly connect the switch input with the LFO Period out, and drop the counter object. The same applies for the GetSlice technique.

Also experiment with InputMorph (Value). It is similar to the Switch and also has a variable number of inputs, but it allows you to interpolate between different inputs by inputting fractional numbers.
Also Map (Value Interval) or the Spline modes of Resample (Spreads) comes quite handy when building sequencers - look into their help patches.

sven made two different sequencer modules which can be found at sven
kalle made a set of modules which are a bit different. They can be found at kalle.Modules.Sequencer.