Whorld is a free, open-source visualizer for sacred geometry. It uses math to create a seamless animation of mesmerizing psychedelic images. You can VJ with it, make unique digital artwork with it, or sit back and watch it like a screensaver.
Whorld's visualization is controlled via parameters which can be adjusted manually, or modulated by oscillators. A given setting of the parameters and their oscillators form a patch. You can use the demo patches, or create your own.
Patches can be grouped together in a playlist. You can play patches manually, or Whorld can autoplay them for you. Whorld also includes a crossfader, which allows you to interpolate between two patches.
Whorld is optimized for performing. All of its functions can be accessed in full-screen mode, via shortcut keys, mouse or trackball, or MIDI controllers. Whorld can be synchronized to music, using tap tempo, or MIDI clocks.
Still frames can be captured as snapshots, printed, or exported as bitmaps. Whorld can also record movies, and export them as AVI files or numbered bitmaps.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
Pentium III 833MHz
Windows 2000 SP4
640 x 480 / 16-bit color
AMD Athlon 64 4000+ San Diego 1GHz FSB
Foxconn NF4K8MC-EKRS Socket 939 Micro ATX
2GB OCZ 184-Pin DDR SDRAM
ATI Radeon X800XL 256MB GDDR3 PCI Express x16
Western Digital SE WD2000JD 200GB 7200 RPM Serial ATA150
ASPIRE X-QPACK-AL/420 MicroATX Case 420W Power Supply
Microsoft Explorer 1.0 optical trackball
X-Session MIDI controller
Windows XP SP2
1024 x 768 / 32-bit color
Installing for the first time:
Whorld is distributed as a .zip file. Unzip the distribution file, using WinZip or an equivalent program, and then double-click on Whorld.msi to launch the installer. The installer is about as simple as an installer can be: just keep hitting "Next."
Note that by default, Whorld is installed for the current user only. This means additional users must manually create desktop and start menu shortcuts to Whorld. If this is inconvenient, you may prefer to install Whorld for all users, using the following procedure:
Whorld is optimized for 1024 x 768 resolution, with 32-bit color. At higher resolutions, lines may look too thin, and performance may suffer, especially in full-screen and Veejay mode. At lower resolutions, lines may look jagged, though performance may improve. Whorld does not change the display resolution; you must change it yourself, using the Windows Control Panel.
Upgrading a previous installation:
Note that double-clicking Whorld.msi won't work: you will get the message "Another version of this product is already installed".
To uninstall Whorld, use Add/Remove Programs in the Control Panel, or double-click on Whorld.msi and select the "Remove" option.
Viewing the demo
When you run Whorld, you'll see a dialog asking if you want to view the demo. This dialog can be permanently suppressed by checking the "don't show me this again" checkbox. The demo can be viewed later, by selecting View/Demo from the main menu. To stop the demo, select View/Demo again.
During the demo, you can experiment with Whorld's effects. For example, try pressing:
Note that fill and X-Ray may cause the animation to slow down or become jerky; see performance.
A parameter is a numerical value that affects an aspect of the visualization. Parameters can be adjusted manually, via the parameters dialog, or via MIDI, but they also can be programmed to change automatically, using oscillators.
The visualization is based on rings. A ring is a regular polygon (e.g. a triangle, square, or pentagon) with various distortions applied to it. Rings are born, grow away from the center (or shrink towards it), and eventually die.
Note that almost all of the parameters only affect new rings. The only exceptions are Ring Growth, and the background color parameters. Parameter changes propagate through the image gradually as new rings are born; in this respect Whorld behaves somewhat like a digital delay. To affect all existing rings at once, use the global parameters.
Ring Growth determines how quickly rings expand, in pixels per frame. It also determines the rate at which new rings are born (the birth rate). Ring Growth can be positive, negative, or zero, as shown below:
|positive||Rings are born in the center, and grow outward, towards the edges of the canvas; a ring dies when all of its vertices are outside the canvas.|
|negative||Rings are born at the edges of the canvas, and grow inward, towards the center; a ring dies when its radius reaches zero.|
|zero||Rings don't expand or contract, no new rings are born, and none die.|
The direction of ring growth can also be reversed using Image/Reverse or the Backspace key.
Ring Spacing is the amount of space between each ring, in pixels. Ring Spacing can be as big as you like, but it can't be less than one. It's one of several methods for controlling image complexity, and it's often necessary to increase it when using wide lines or fill, to avoid performance problems.
Line Width is the width of each ring, in pixels. It's displayed as a real number, but internally it's rounded to an integer. Note that the default line width of one is a special case: one-pixel-wide lines are typically drawn by hardware and execute much faster than other line widths. Line widths greater than one may cause performance problems. As Line Width is increased, the rings begin to overlap unless Ring Spacing is also increased.
Ring Sides is the number of sides each ring has. It's displayed as a real number, but internally it's rounded to an integer. It can range from 3 (a triangle) to 50 (an approximation of a circle). Note that large numbers of sides may reduce performance.
Rotate Speed is the amount each ring rotates per frame, in degrees. Positive is counterclockwise, and negative is clockwise. Pleasing values typically range from −1 to 1; larger values may cause dizziness.
Aspect Ratio stretches the rings horizontally or vertically. Positive values make the rings wider; negative values make the rings taller. At zero, Aspect Ratio has no effect. Aspect Ratio is exponential, and normalized so that at 1, the rings are twice as wide, at 2 they're four times as wide, and at three, they're eight times as wide.
Skew Radius is the amount that each ring's origin shifts per frame, in pixels. The direction of the shift is determined by Skew Angle. In small amounts, skew makes the image appear to have depth, or resemble a tunnel. In large amounts, Skew causes the image to be completely biased to one side of the screen, leaving the remainder of the screen empty.
Skew Angle is the direction of the per-frame origin shift, in degrees. At zero degrees, the skew direction is due south; at 90 degrees, it's due east. The magnitude of the shift is determined by Skew Radius.
Star Factor causes the sides of a ring to bulge outward, or collapse inward, forming a star shape, as illustrated in the following diagram:
Star Factor is normalized such that at 1, a hexagon becomes a Star of David, a square becomes a diamond, and a triangle becomes a hexagon. At Star Factor = −1, a triangle becomes the Mercedes symbol. At zero, Star Factor has no effect.
A ring is composed of two alternating sets of vertices, called even and odd. The even vertices are the "real" polygon. The odd vertices are normally hidden, but they become the points of the star when Star Factor is positive, or the inner angles when Star Factor is negative.
The odd vertices collectively form a second polygon, which can be independently rotated; see Pinwheel. Note that when Star Factor has a large negative value, the odd vertices stay visible for a long time, which may reduce performance.
Pinwheel rotates the points of a star, causing the overall shape to resemble a pinwheel or turbine, as illustrated in the following diagram:
Pinwheel is normalized such that at 1, each "tooth" has one of its edges (the "cutting" edge) positioned on a line that passes through the center. At −1, the teeth face clockwise instead of counterclockwise. At zero, Pinwheel has no effect.
Pinwheel is typically used in combination with Star Factor, but it has an effect even when Star Factor is zero. Pinwheel's range is twice the ring's number of sides, i.e. for a six-sided ring, Pinwheel = 6 is the most extreme value, and Pinwheel = 12 is the same as Pinwheel = 0. Extreme values cause the ring to overlap itself in interesting ways, but may also reduce performance.
Color Speed determines how fast the ring color's hue cycles around the color wheel, in degrees per frame. The color's lightness and saturation are controlled separately; if lightness is 0 or 1, or saturation is 0, hue has no effect. The hue normally cycles a full 360°, but hue cycling can also be limited to a range, using the Loop Hue command.
This is the lightness of the ring color, ranging from 0 (black) to 1 (white). The color's hue and saturation are controlled separately.
This is the saturation of the ring color, ranging from 0 (monochrome) to 1 (full saturation). The color's hue and lightness are controlled separately.
This is the hue of the background color, in degrees. The color's lightness and saturation are controlled separately; if lightness is 0 or 1, or saturation is 0, hue has no effect. The background color is also used as the outline color in Fill mode.
Note that hue is implemented differently for rings than for the background: for rings, hue is controlled indirectly via Color Speed, whereas background hue is an absolute setting. As a result, hue cycling for the background color requires an oscillator. For 360° cycling, set the waveform to "Ramp Up", the amplitude to 180, and the frequency non-zero.
This is the lightness of the background color, ranging from 0 (black) to 1 (white). The color's hue and saturation are controlled separately. The background color is also used as the outline color in Fill mode.
This is the saturation of the background color, ranging from 0 (monochrome) to 1 (full saturation). The color's hue and lightness are controlled separately. The background color is also used as the outline color in Fill mode.
This is the curvature at even vertices, i.e. the vertices that are NOT affected by Star Factor and Pinwheel. The curvature at odd vertices is controlled separately, via the Odd Curve parameter. Curvatures are normalized such that positive values produce simple curves, negative values produce loops or curls, and at zero, there's no curvature. Note that curves require considerably more processing power than straight lines, and may reduce performance.
Each pair of adjacent vertices forms a Bézier curve, with a control point at either end. The control points are constrained such that the vector between a control point and its corresponding vertex is always tangent. The vector's length is the ring's radius multiplied by the appropriate curvature (odd or even). Thus curvature doesn't vary with radius.
The following diagram shows the shapes that result from various combinations of odd and even positive curvature, with Star Factor = 1. An arbitrary curvature of 1/3 is used in all cases, to simplify the illustration.
The following diagram shows the shapes that result from various combinations of odd and even negative curvature.
This is the curvature at odd vertices, i.e. the vertices that are affected by Star Factor and Pinwheel. The curvature at even vertices is controlled separately; see the Even Curve parameter for details.
Even Shear makes the curvature at even vertices asymmetrical. Curve asymmetry at odd vertices is controlled separately, via the Odd Shear parameter. The two curve control points at each vertex are normally contrained to be equidistant from the vertex. Removing this constraint yields two distinct distances, one between the counterclockwise point (A) and the vertex, and the other between the clockwise point (B) and the vertex. Shear changes the ratio of these two distances. Shear is normalized so that at zero, the control points are equidistant as usual, while at −1, the counterclockwise point coincides with the vertex, eliminating curvature on that side. Note that for Even Shear to have any effect, Even Curve must have a nonzero value.
Odd Shear makes the curvature at odd vertices asymmetrical. Curve asymmetry at even vertices is controlled separately; see the Even Shear parameter for details. Note that for Odd Shear to have any effect, Odd Curve must have a nonzero value.
Changing a regular parameter only affects new rings. A global parameter corresponds to a regular parameter, and has the same effect, except that it operates on all existing rings at once. For example, Global Aspect Ratio is identical to Aspect Ratio, except that it stretches the entire image, not just new rings. The global parameters are accessed in the Parameters dialog by selecting Edit/Global Params.
A global parameter doesn't override its corresponding regular parameter; rather, it adds to it. Thus global parameters can be combined with regular parameters, e.g. global parameters can modify the behavior of patches. Global parameters aren't saved in patches, but they are saved in playlists.
Global parameters have their own oscillators, which are independent of the regular parameter oscillators. A given parameter can be modulated by both oscillators simultaneously: one affects new rings, while the other affects existing rings.
Regular parameter changes propagate gradually, depending on the rate of Ring Growth, which causes the output to lag behind the parameter changes. This lag (AKA hysteresis) is essential to Whorld's look, but it has a down side: if you try to control regular parameters via MIDI, the controls can feel sluggish because they're not having enough impact. Since global parameters affect the whole image at once, they give a stronger impression of realtime control.
When global parameters are controlled via MIDI, they are affected by damping. This allows you to make a tradeoff between responsiveness and smoothness. It's particularly useful for avoiding jerkiness when controlling global parameters with a noisy MIDI device.
Most of the parameters have global equivalents; the only ones that don't are Ring Growth, Ring Spacing, and the six color parameters. Global hue can already be controlled via mouse and MIDI, and the background color is global by definition.
A patch is a particular setting of the parameters and their oscillators. A patch can be saved to a file, and then restored from the file later. To open a patch, use File/Open. To save the current patch, use File/Save or File/Save As.
Patches are edited using the parameters dialog. Whorld has various buffers in which patches can be edited. The parameters dialog operates on one of these buffers at a time; see edit selection.
In addition to the parameters and their oscillators, a patch also contains other settings, which may or may not be restored, depending on the patch mode.
This dialog allows you to edit the parameters and their oscillators. It typically operates on the document, but it can also operate on the crossfader inputs or mix, or the master offsets; see edit selection. To show or hide the dialog, use View/Parameters or Shift+P. The dialog consists of a two-dimensional table, containing one row for each parameter. The columns are described below.
Whorld has various buffers in which patches can be edited. The edit selection determines which one of these buffers the parameters dialog operates on. To change the edit selection, use the Edit menu, or the parameters dialog's system menu (left-click the icon in the dialog's upper-left corner). The choices are as follows:
|Document||The patch that the File menu opens and saves, and the name of which appears in the main window's caption.|
|Crossfader A||The crossfader's input patch 'A'; can be loaded, edited, and saved via the crossfader dialog.|
|Crossfader B||The crossfader's input patch 'B'; can be loaded, edited, and saved via the crossfader dialog.|
|Crossfader Mix||The crossfader's output patch; can be edited and saved, but note that edits are overwritten without warning if the crossfader position or inputs change.|
|Master Offsets||This pseudo-patch contains offsets which are added to the parameters from the document or crossfader mix; for a schematic, see Signal Flow. It also includes an optional oscillator override for each parameter.|
|Global Params||This pseudo-patch contains the global parameters, which affect all existing rings, unlike regular parameters, which only affect new rings.|
The animation is always controlled by either the document, or the crossfader mix; the View Mix setting determines which one. Edits made via the parameters dialog may or may not affect the animation, depending on the combination of View Mix and edit selection, as shown below:
|Do parameters dialog edits affect the animation?||View|
For normal patch editing, the edit selection should be "Document", and View Mix should be off, so you can see the effect of your edits. If some cases you may want to edit the crossfader inputs or mix. More likely you'll want to edit the master offsets.
Each parameter has an oscillator (modulator) associated with it. The oscillator generates a repeating waveform (e.g. a sine wave), which is then used to modulate (change) the corresponding parameter's value. Oscillator waveforms are normalized, such that they always range from −1 to 1. An oscillator has the following properties:
|Waveform||The type of waveform the oscillator generates: Triangle, Sine, Ramp Up, Ramp Down, Square, Pulse, or Random.|
|Amplitude||The width of the modulation. The oscillator's waveform, which ranges from −1 to 1, is scaled (multiplied) by Amplitude before being added to its parameter.|
|Frequency||The rate at which the oscillator's waveform is repeated, in Hertz (cycles per second). The frequency must be greater than zero, otherwise the oscillator has no effect.|
|Pulse Width||When the oscillator's waveform is "Pulse", this value sets the pulse wave's duty cycle (ratio of low to high), ranging from 0 to 1. At .5, the result is identical to a square wave. For other waveforms, Pulse Width has no effect.|
In algebraic terms, an oscillator's behavior is:
Result = Parameter + (Waveform × Amplitude).
Note that when the amplitude is zero, the parameter is unchanged.
Since oscillators always swing both positive and negative, in some cases it may be necessary to offset a parameter to achieve the desired effect. For example, to make Ring Sides vary between 3 and 7, you would need to set Ring Sides to 5, and its oscillator's amplitude to 2:
5 + (−1 × 2) = 3
5 + (1 × 2) = 7
While programming oscillators, it may be helpful to view the numbers dialog, because it displays the modulated values of the parameters.
Each parameter has a master offset associated with it. The master offset is added to its corresponding parameter, and shifts it by some amount, which can be positive, negative, or zero. If the parameter is being modulated by an oscillator, the master offset shifts the modulated value.
Master offsets are applied after all other processing, just before the frame is drawn, and they affect the animation at all times, regardless of what patch is loaded, and regardless of whether you're viewing the document or the mix. For a schematic, see Signal Flow.
The master offsets can be edited via the parameters dialog; to do this, set the edit selection to "Master Offsets". The master offsets can also be changed via MIDI: when a controller is assigned to a parameter, it actually modifies the parameter's master offset. To zero all of the master offsets at once, use Edit/Zero Controllers or Shift+Z.
Master offsets are saved as part of the playlist. If any master offsets are non-zero while you're editing a patch, the patch may not look the same when it's inserted into a different playlist. To avoid confusion, keep master offsets zero while editing patches. To save the current mix as a new patch, including the master offsets, use File/Save Mix or Shift+S.
Each parameter is modulated by its associated oscillator. An oscillator behaves according to its properties (e.g. waveform, amplitude, frequency, pulse width) which it normally obtains from the document, or when View Mix is enabled, from the crossfader mix (see Signal Flow). It's also possible to override an oscillator's properties with alternate values, which the oscillator then obeys regardless of what document is loaded, or what patch is played. Put another way, overriding an oscillator disables its default behavior, allowing you to control the oscillator manually in all situations.
To create or edit oscillator overrides, display the Parameters dialog, and set the edit selection to "Master Offsets". The waveform, amplitude, frequency, and pulse width columns now display the override values for each oscillator. Note that an override is only enabled when its frequency is non-zero; if the frequency is zero, changing the other override properties has no effect. This feature allows you to preset an override, by adjusting its waveform, amplitude, or pulse width, but leaving its frequency zero. The override can then be enabled and disabled live, by controlling the override frequency via MIDI. Oscillator overrides and their MIDI assignments are saved in the playlist.
It's theoretically possible to control all properties of all oscillators via MIDI, but controllers are typically a limited resource. In most cases, you'll want to override selected oscillators, and assign MIDI to their amplitudes and frequencies, or in some cases, only to their frequencies, using preset waveforms and amplitudes. For example, to control Background Hue cycling manually via a single MIDI control, follow these steps:
This dialog continuously displays the current values of the parameters, as well as the current hue, origin, and ring count. The parameters are captured just before they're passed to the rendering engine, so the displayed values include any modulations via oscillators, and also take into account the master offsets and master speed. To show or hide the dialog, use View/Numbers, or Shift+N.
The crossfader allows you to interpolate between two input patches, called 'A' and 'B'. The result is a new patch, called the crossfader mix, which varies between 'A' and 'B', depending on the position of the crossfader. The position can be adjusted manually, or automated, so that it moves by itself. Note that the crossfader has no effect on the animation unless View Mix is enabled. To show or hide the crossfader dialog, use View/Crossfader, or Shift+X.
|At end-of-travel?||Moved since Stop?||Result|
|Yes||N/A||Moves towards opposite end.|
|No||Yes||Moves from left to right.|
|No||No||Moves in same direction it was moving before.|
|Document||Loads the patch currently being edited.|
|Crossfader A/B||Loads the other input's patch.|
|Crossfader Mix||Loads the current crossfader mix.|
Interpolation is a type of mixing, but it's different from audio or video mixing: it's similar to "tweening" in animation, which is shorthand for "generating in-between values." In Whorld, the crossfader is used to interpolate between two patches. The interpolation affects the parameters and their oscillators, as shown below:
|Oscillator Waveform||Switches halfway|
|Oscillator Pulse Width||Linear|
Each variable has a value in patch 'A', and a corresponding value in patch 'B'. If the two values are the same, crossfading has no effect on that variable. Otherwise, moving the crossfader from left to right changes the variable continuously from its 'A' value to its 'B' value, such that the variable is halfway between its 'A' and 'B' values when the crossfader is in middle. This is linear interpolation, and it's used for all variables except the waveforms. The waveforms don't change continuously: they switch from their 'A' value to their 'B' value when the crossfader reaches the middle.
For example, if Ring Spacing is 5 in patch A, and 10 in patch B, the output Ring Spacing will be 7.5 when the crossfader is in the middle.
The crossfader can be used to generate random patches. Inputs 'A' and 'B' are hybridized, creating a new patch with a random mix of attributes from both inputs. The result is output to the crossfader mix. Note that the result will not be visible unless View Mix is enabled. To generate a random patch, use Edit/Random Patch or F10. To save the patch, use File/Save Mix or Shift+S. Until the patch is saved, be careful not to change the crossfader position, otherwise the patch will be overwritten.
The process affects the parameters and their oscillators, in a manner similar to interpolation. Each variable has a value in patch 'A', and a corresponding value in patch 'B'. If the two values are the same, that variable is unaffected. Otherwise, the variable's output value is a random number somewhere between the two input values. In effect, only the differences between the two inputs are randomized, which means that the more similar the inputs are, the less random the results will be.
A playlist is a list of patches. As of version 1.5, a playlist may also contain videos. Playlists are created and edited via the playlist dialog. To open a playlist, use File/Playlist/Open; to save it, use File/Playlist/Save. Playlists can also be opened and saved from within the playlist dialog, which has its own menus.
You can play patches from the playlist manually, via the keyboard or MIDI, or Whorld can autoplay the patches, like a jukebox. The transitions can be made gradual, using automated crossfades.
Patches can be assigned shortcut keys, which allow them to be played via the keyboard in Veejay mode. Patches can also be organized into banks. A playlist has twenty banks, and each bank can hold an unlimited number of patches.
A playlist doesn't actually store patches; instead, it stores links to patches. Consequently, when you modify a patch, any playlists that include that patch get the new version automatically. If patches are moved or renamed, broken links can occur; see missing files.
Playlists also store other data, including the effects, master dialog settings, and MIDI setup. In general, all non-patch settings are stored in the playlist, except for the options, which are stored in the registry.
This dialog allows you to create and edit playlists, play patches, assign keys to patches, and control autoplay. To show or hide the dialog, use View/Playlist or Shift+L. The dialog has its own menus, which differ from the main window's menus, e.g. the File menu opens and saves playlists instead of patches. The dialog's controls are as follows:
Playlists are created and edited using the playlist dialog. The playlist dialog has its own menus, which differ from the main window's menus. This topic refers to the playlist dialog's menus, and their shortcuts.
To insert patches into a playlist, use File/Insert Patches, or press Insert. A file dialog is displayed, allowing you select the patches. Press "Open" to insert the patches; they're inserted before the list's current position. To use the context menu instead, right-click the insert position, and choose Insert Patches. Patches can also be inserted by dragging them onto the playlist from Windows Explorer.
The playlist dialog has clipboard support, and the standard editing commands (copy, cut, paste, delete) behave as usual. For example, to copy patches to a different bank:
To use the context menu instead, select the desired patches, right-click one of them, choose Copy, select the destination bank, right-click the insert position, and choose Paste.
Patches can also be moved around within the list by dragging them. To move multiple patches at once, select them, and then drag the entire selection.
Before you can play patches from the keyboard, you must first assign keys to them, using the playlist dialog. You can assign keys individually, or let Whorld make the assignments for you. Each bank of patches has its own key assignments, but within a given bank, a key can only be assigned to one patch at a time.
To let Whorld make the assignments, choose Edit/Auto-Assign Keys from the playlist dialog's menus. This assigns keys A..Z to the first 26 patches, in QWERTY order.
Individual assignments are made using one of two methods: the "Assign key" hotkey control, or the Shift key. To use the hotkey control, do the following:
The Shift key method is considerably easier: select the desired patch in the playlist, and while holding down the Shift key, press the key you want to assign. Again, only keys A..Z are accepted.
To remove one or more key assignments, first select the patches, and then choose Edit/Remove Key from the playlist dialog's menus, or press Backspace. You can also do this via the context menu: select one or more patches, right-click one of them, and then choose Remove Key.
The main reason it's useful to group patches together in playlists is because this allows you to easily switch from one patch to another. The changes can be manual, or automated; in either case, you're playing patches.
Patches can be played manually in various ways. One way is by double-clicking them in the playlist dialog, but this requires the dialog to be visible. In Veejay mode, patches are played via the keyboard, or MIDI.
To play patches via the keyboard, you must first assign keys to them. The assignments are stored as part of the playlist. Only the keys A..Z can be assigned to patches.
Patches can be organized into banks. A playlist has twenty banks, and they can be selected via the keyboard's numeric keys: 1..9 select the first nine banks, and 0 selects the tenth bank. The upper ten banks are selected in the same way, but while holding down the Shift key. The keys A..Z can be assigned to different patches in each bank, so the maximum number of patches that can be played via the keyboard is 520.
When playing a patch in a different bank, always select the bank first, and then the patch. For example, if you're currently in bank 1, and you want to play patch F in bank 2, press '2', and then 'F', not the other way around.
Patches that work well together should be placed in the same bank, to minimize the need for bank-switching. Note that to avoid confusion, empty banks can't be selected via the numeric keys; they can only be selected via the playlist dialog.
When patches are played from a playlist, the transitions can be made gradual, using automated crossfades; this works whether the patches are played manually, or via autoplay.
Playing a patch causes it to be loaded into one of the crossfader inputs. Typically the crossfader is stopped on one input or the other, in which case the new patch is loaded into the opposite input. If the crossfade time is non-zero, the crossfader auto-fades to the new patch, otherwise it simply jumps to the new patch.
If an auto-fade is already in progress when the patch is played, the current mix is copied to one of the inputs, and crossfader is moved to that input; then the new patch is copied to the other input, and a new auto-fade begins. This keeps the transition smooth, even though the first auto-fade was aborted.
The crossfade time can be set in the playlist dialog, using either a slider or an edit box. It can also be set via the mouse (Ctrl+wheel), or MIDI. The unit varies, depending on the method used, as shown below:
|slider or mouse||fraction of Patch seconds|
|edit box or MIDI||absolute time, in seconds|
Patch seconds is the interval between patch changes in autoplay; it has its own edit box in the playlist dialog, and can also be set via MIDI. Note that setting the crossfade time via any of the above methods won't affect an auto-fade that's already in progress; the new time affects the next auto-fade.
It's possible to make the crossfade time longer than Patch seconds, and this has a curious effect in autoplay: each patch change occurs while the previous auto-fade is still in progress, so the mix accrues and becomes a synthesis of many patches. To demonstrate this, set Patch seconds to 5 and Crossfade seconds to 20.
Whorld can play patches from a playlist automatically, like a jukebox; this is autoplay mode. Autoplay reduces the need for user interaction; it's how the demo works. Note that autoplay can only play patches in the current bank. Autoplay can be configured, as follows:
This dialog lets you map MIDI messages to your playlist, so that you can play its patches via MIDI. To show this dialog, choose Edit/MIDI Mapping from the playlist dialog's menus. Two mapping schemes are supported: one uses program change messages, and the other uses a range of notes. Use the dialog's radio buttons to choose a scheme, as follows:
Note that you can only play patches in the current bank. To play patches in a different bank, you must select the bank first. Banks can also be selected via MIDI.
By default, Whorld responds normally to controller 0 (bank select MSB): data values 0..19 select one of Whorld's twenty banks, and other values are ignored. If you prefer, you can assign a different MIDI message to the bank property, using the MIDI Setup dialog. Since up to 128 patches can be addressed per bank, the maximum number of MIDI-playable patches in a playlist is 2,560.
A playlist contains links to patches. If a playlist's patches are moved or renamed, broken links can occur. Broken links must be repaired before the playlist can be opened. If you try to open a playlist with broken links, Whorld displays the Missing Files dialog, which gives you the following options:
Warning: In all of the above cases except "Cancel", it's possible to open the playlist with patches still missing. If you save the playlist in this situation, the missing patches are permanently deleted from the playlist. To avoid doing this accidentally, save the playlist under a new name (using File/Playlist/Save As) before proceeding.
If "Open Dialog" is selected in the Missing Files dialog, the Replace Files dialog is displayed. It lists the name and current status of each missing patch, and gives you the following options:
Warning: If patches are still missing when you press "OK", they are removed from the playlist. If you save the playlist in this situation, the missing patches are permanently deleted from the playlist. To avoid doing this accidentally, save the playlist under a new name (using File/Playlist/Save As) before proceeding.
As of version 1.5, the playlist dialog can display a preview image for each patch or video in your playlist. These preview images are called thumbnails. To show thumbnails, choose View/Thumbnails from the playlist dialog's menus. To hide thumbnails, choose View/Details.
The first time you view thumbnails, they have to be created, and depending on the size of your playlist, this can take a while, so a progress dialog is displayed. Once the thumbnails have been created, you can switch back and forth freely between the thumbnail and detail views, without recreating the thumbnails each time. Note that if you add patches or videos to your playlist while in thumbnail view, there may be a pause while the new thumbnails are created.
Thumbnails can be created in a range of sizes. To change the thumbnail size, choose View/Thumbnail Size and select a size. If you're currently in thumbnail view, the thumbnails are recreated immediately; otherwise, they're recreated the next time you switch to thumbnail view. To explicitly recreate the thumbnails without changing their size, use View/Refresh Thumbnails.
A video thumbnail is created by simply extracting the video's first frame. A patch thumbnail is more complicated: it's created by stepping the patch forward in time until it draws a fixed number of rings. The result is identical to what you would see if you played the patch. Note that a patch thumbnail may vary slightly each time it's created, due to the unpredictable nature of the oscillators.
Patch thumbnails are affected by the patch mode. In Full mode, each patch thumbnail is drawn using the effects and master settings stored in that patch. By contrast, in Geometry mode, all patch thumbnails are drawn using the current effects and master settings. This feature allows you to preview an effect or master setting on all of your patches at once. For example, while in Geometry mode, if you enable mirroring, and then recreate the thumbnails, all of the patch thumbnails will be mirrored.
This setting determines whether the animation is controlled by the document, or the crossfader. When View Mix is off, the animation is controlled by the document. When View Mix is on, the animation is controlled by the crossfader. To toggle this setting, use View/Mix or Ctrl+M.
Edits made via the parameters dialog may or may not affect the animation, depending on the combination of View Mix and edit selection. If you're editing the document, View Mix should be off, so you can see the effect of your edits. If you're playing patches from a playlist, View Mix should be on, because the playlist sends its output to the crossfader; see Signal Flow.
Note that playing a patch from a playlist automatically turns View Mix on. If you're editing a patch and the image isn't changing accordingly, it's probably because you turned View Mix on without realizing it.
The origin is the center of the Whorld image. It's the point from which the rings emanate, or in Reverse, the point towards which they converge. The origin can move, and the types of motion are as follows:
|None||The origin stays put.|
|Drag||The origin follows the mouse.|
|Random||The origin jumps to random locations.|
In Random mode, the jumps occurs at evenly spaced intervals, and the time between jumps is determined by the tempo. The tempo can be entered manually, via the Master dialog's tempo slider, or by tapping the Tab key along with the beat (see tap tempo). The tempo can also be synchronized to MIDI clocks.
Origin motion can be enabled via Image/Origin or the toolbar, using the commands listed below. In Veejay mode, F1 toggles between drag and random.
|Center||Shift+C||Stops the origin and centers it within the window.|
|Drag||Shift+D||Enables drag, or if it's already enabled, disables it.|
|Random||Shift+R||Enables random, or if it's already enabled, disables it.|
Origin motion is affected by damping. Damping controls how precisely the origin tracks new positions, whether drag-generated or random. When damping is zero, the origin tracks precisely. As damping increases, the origin lags behind new positions, and catches up gradually, slowing down as it gets closer.
Origin motion is also affected by trail. Trail determines whether the rings stay together, or spread themselves out. When trail is zero, the rings stay together; as trail increases, rings further from the origin lag behind, creating a slinky effect. When trail is at maximum, rings don't move from their birth positions.
In full-screen mode, the window is maximized, and the frame, menus and toolbars are hidden, so that the Whorld image fills the entire screen. Whorld's dialogs remain visible however, so it's possible to edit a patch or playlist in full-screen mode. Note that full-screen differs from Veejay mode, which is similar but optimized for live performances.
To enable/disable full-screen mode, use Window/Full Screen or F11.
Veejay mode is intended for live performances. It's similar to full-screen (again, the Whorld image fills the entire screen) but with an important difference: no other windows of any kind are allowed. Veejay mode "locks out" (disables) any feature or key that could cause Whorld, another application, or Windows itself to display a dialog, menu, or other window. Even the standard Windows task-switching keys are disabled, except Ctrl+Alt+Delete. This prevents accidental disruptions, e.g. showing the desktop, exiting the application, etc.
Veejay mode also eliminates tearing, provided DirectDraw and Exclusive mode are enabled in the DirectDraw options.
To enter Veejay mode, use Window/Veejay or Ctrl+F11. Note that the ONLY way to exit Veejay mode is by pressing Ctrl+F11. In a new installation, entering Veejay mode causes a warning dialog to appear. To permanently disable this warning, check the "don't show me this again" checkbox.
The following commands are disabled in Veejay mode:
The following commands, which normally display a file dialog, use the default output folder instead:
The mouse has the following functions:
|No modifiers||Drag Origin||In drag mode, the origin (center) of the image follows the mouse. How precisely the origin tracks the mouse is affected by the amount of damping. Drag mode is enabled via Image/Origin/Drag or Shift+D.|
|Left button held down||Zoom||Vertical motion changes the zoom; up zooms in, down zooms out. Horizontal motion is ignored. How precisely the zoom tracks the mouse is affected by the amount of damping.|
|Right button held down||Rotate Hue||Vertical motion rotates the hue; up is clockwise (red to green), down is counterclockwise (red to blue). Horizontal motion is ignored.|
|Middle button held down||Master Speed||Vertical motion changes the master speed; up is faster, down is slower. Horizontal motion is ignored.||Alt key held down||Rings||This works in Veejay mode ONLY. Vertical motion changes the maximum number of rings; up is more, down is less. Horizontal motion is ignored.|
The wheel has the following functions:
|No modifiers||Damping||The wheel sets the amount of damping for origin motion and zoom. Moving the wheel up increases damping; moving it down decreases damping. When damping is zero, origin motion and zoom follow mouse motion exactly; as damping increases, tracking becomes less precise, and motion becomes more fluid.|
|Shift key held down||Trail||The wheel sets the amount of trail for origin motion. Moving the wheel up increases trail; moving it down decreases trail. When trail is zero, the rings stay together; as trail increases, rings further from the origin lag behind, creating a slinky effect.||Ctrl key held down||Crossfade Time||The wheel sets the amount of time the crossfader takes to auto-fade from one patch to another. If the crossfade time is zero when a new patch is played, the image parameters jump from their current values to the new ones; otherwise, the parameters are interpolated. The time isn't absolute: it's a percentage of Patch Seconds in the playlist dialog.|
Note that since the middle button is usually also the wheel, both master speed and damping must be adjusted with some care.
To change the master speed, press the wheel, and while keeping it pressed, move the mouse or trackball. Be careful not to spin the wheel, or you might unintentionally change the damping.
To change the damping, gently spin the wheel. Be careful not to press the wheel, or you might unintentionally change the master speed.
The animation is normally displayed in Whorld's main window, but in dual-monitor mode, a secondary window, called a detached view, is created for the animation. The detached view can be displayed on a different monitor than the main window. This allows you interact with Whorld's GUI (graphical user interface) on one monitor, while viewing the animation full-screen on another. Note that this feature may not work under Windows 2000.
To run Whorld dual-monitor:
To exit dual-monitor mode, press F11 to exit full-screen, and then close the detached view, or select Window/Detach again.
Here's how to extend the Windows desktop with an ATI Radeon X800XL. Other graphics cards will have a similar procedure.
In demo mode, Whorld loads a playlist called "demo.whl" from the program folder. This playlist includes patches that demonstrate some of Whorld's capabilities. There's nothing magical about the demo playlist except its name: it's just another playlist, and you're free to modify it, but don't rename it or move it to a different folder. To enable or disable demo mode, select View/Demo. While watching the demo, you can experiment with some of Whorld's effects; see Viewing the demo.
Pause freeze-frames the animation. To pause, select Window/Pause or press Space. To resume animating, select Window/Pause or press Space again.
While paused, no rings are born or die, the crossfader and oscillators are frozen, and editing parameters has no effect. The features that do work while paused are listed below. Note that these restrictions also apply to Snapshot Mode, which is an extension of pause.
The patch mode determines what settings are affected when a patch is played. The available modes are as follows:
Full mode is recommended for beginners, and for editing patches, but it may not always be what you want. For example, if you're controlling the effects manually during a performance, you might not want your patches to modify the effects. Ask yourself this: if mirroring is on, and I play a patch that doesn't use mirroring, should mirroring automatically turn off? If the answer is yes, use Full mode, otherwise use Geometry mode.
The patch mode can be changed live via keyboard or MIDI, so another option is to switch back and forth, e.g. you could use Geometry mode for jamming, and Full mode for dramatic changes. Playing a patch in Full mode puts all the settings in a known state, which can be helpful if you get confused while using Geometry mode. The patch mode is saved in the playlist.
|Geometry||Parameters, Oscillators||All modes|
|Master Controls||Speed, Zoom, Damping, Trail, Rings, Tempo, Hue Loop Length, Canvas Scale||Full mode only|
|Effects||Origin, Draw Mode (Fill/Outline/X-Ray), Origin Motion, Hue, Mirror, Reverse, Convex, Invert Color, Loop Hue, Pause, Zoom Type||Full mode only|
This effect causes the output window to be divided equally into four rectangles or quadrants. Only the upper-left quadrant is drawn to in this mode; the other three quadrants are mirror images of the upper-left, as shown below:
|upper right||upper left, flipped horizontally|
|lower left||upper left, flipped vertically|
|lower right||upper left, flipped horizontally and vertically|
The result is similar to a kaleidoscope. Note that since origin motion still ranges over the entire canvas, it's possible to hide some or all of the Whorld image, by placing the origin in any quadrant other than the upper-left. Pleasing results can often be obtained by moving the origin along the edges of the upper-left quadrant, especially when damping is used.
To enable/disable mirroring, use Image/Mirror or F5.
Mirroring performance depends almost entirely on the capabilities of your graphics card. Most 2000/XP-era PCs should be able to handle it acceptably, but if not, try upgrading your graphics card first before upgrading anything else. Mirroring may also be affected by the DirectDraw options.
This effect causes rings to appear as filled areas instead of lines. For each ring, the area bounded by it and the previous ring is filled, using the same color that would have been used to draw the line. A ring can be both filled and drawn as a line; see Outline.
To enable/disable fill for new rings only, use Image/Fill or F6. Since existing rings are unaffected, the change occurs gradually. To enable/disable fill for both new and existing rings, use Image/Invert/Fill or Shift+F6.
Fill increases graphics overhead and may reduce performance.
This effect causes filled rings to be outlined (i.e. drawn as lines), using the background color. Rings that aren't filled are unaffected.
Generally, filled rings tend to look gaseous without outlining, and faceted with it. Note that without outlining, neighboring filled rings of the same color are indistinguishable, though this isn't necessarily a problem.
To enable/disable outlining for new rings only, use Image/Outline or F7. Since existing rings are unaffected, the change occurs gradually. To enable/disable outlining for both new and existing rings, use Image/Invert/Outline or Shift+F7.
Outline increases graphics overhead and may reduce performance.
This effect causes rings to appear translucent, by drawing them in a special mode. Normally when an image is drawn, the corresponding pixels of video memory are simply overwritten; whatever image they previously contained is lost. In X-Ray mode, the pixels are modified, instead of being overwritten: the new image is superimposed onto the background, so that the background has transformed colors, but remains visible.
To enable/disable X-Ray for new rings only, use Image/X-Ray or F8. Since existing rings are unaffected, the change occurs gradually. To enable/disable outlining for both new and existing rings, use Image/Invert/X-Ray or Shift+F8.
The X-Ray effect depends entirely on your graphics card's support for XOR operations (eXclusive OR is an operation in boolean math). Note that X-Ray requires the video memory to be read as well as written, and can therefore greatly increase graphics overhead, particularly when combined with fill, outline, and wide lines; see performance. Using X-Ray with fill but without mirroring can make the application unresponsive. If this occurs, try pressing Panic (Esc). In this specific case it may help to locate the back buffer in system memory, rather than video memory; see the DirectDraw options.
This effect reverses the direction of ring growth. If the rings were expanding, they immediately begin contracting at the same speed, and vice versa. A similar effect can be achieved by changing the sign of the Ring Growth parameter, but the Reverse command is much more convenient.
Reverse is handled separately from the Ring Growth parameter, and does not alter it; they combine to determine ring behavior, as shown below:
This effect reverses the order in which rings are drawn. By default, rings are drawn in ascending order by size, i.e. the smallest ring is drawn first. When Convex is enabled, the smallest ring is drawn last. This makes little difference if the rings are drawn as lines, but if the rings are filled, it typically causes the resulting image to appear convex instead of concave (more like a worm and less like a tunnel).
In 3D terms, Convex is a change of perspective: it moves the observer behind the image. When the rings are seen from the opposite side, they overlap differently, which reverses the illusion of depth.
Convex is especially useful when filled rings are moved with trail. Trail causes the outer rings to lag behind the inner ones, so that the rings spread out as they move. If the image is concave, the inner rings are often hidden, which can make the trail hard to see. Convex makes the trail more obvious, by keeping the inner rings visible.
This setting controls the speed of the entire animation. The value is a percentage of normal speed, ranging from 5 (1/20 of normal) to 2000 (20 times normal). The default setting is 100 (normal). Note that at the lowest speed, the animation still moves, though very slowly; to freeze-frame it, use Pause.
Speed is implemented as a scaling factor. The following items are scaled (multiplied) by it: Ring Growth, Color Speed, and the oscillator frequencies for all parameters.
As speed is increased, the animation may appear jerky, because objects are moving further per frame. Jerkiness may also indicate performance problems. Jerkiness can sometimes be improved by increasing Frame Rate. Note that increasing the frame rate also speeds up the animation. To compensate for this, decrease the master speed proportionally.
Speed can be changed via the Master dialog or MIDI, or by moving the mouse vertically while holding down the middle button.
This setting controls the magnification at which the image is displayed. The value is a percentage of normal zoom, ranging from 10 (1/10 of normal) to 1000 (10 times normal). The default setting is 100 (normal).
Zoom is affected by damping. As damping increases, zoom becomes more fluid, but less precise. With too little damping, zoom feels jerky; with too much, it reacts slowly and tends to overshoot the target.
Zoom scales the canvas as well as the image, and therefore also affects origin motion. Origin dragging is limited to either the zoomed canvas or the window, whichever is bigger.
Note that zooming in may reduce performance, particularly when fill or wide lines are used. The performance hit is roughly proportional to the amount of zoom, so it may be possible to manage the problem by zooming in cautiously, and backing off if the animation starts to slow down.
Zoom can be changed via the Master dialog or MIDI, or by moving the mouse vertically while holding down the left button.
Two types of zoom are available: origin zoom, and window-centered zoom, as described below. To toggle between them, use Window/Zoom Center (Shift+W).
|Origin zoom||Zooms into or out of the current ring origin. This is the default.|
|Window-centered zoom||Zooms into or out of the center of the window. This is useful for magnifying an arbitrary portion of the image: drag the image until the portion of interest is in the center of the window, and then zoom. It's also useful in mirror mode, because it allows you to zoom without altering the reflections.|
Damping affects origin motion and zoom, as well as global parameters: it makes them more fluid, but less precise. Damping acts like a low-pass filter: it reduces the high-frequency components (jerkiness) of motions, making them smoother. Damping ranges from 0 (none) to nearly 100 (maximum). Note that when damping is set to its maximum value, the origin and zoom respond to changes very slowly, and may appear to be stuck.
Damping can be changed via the Master dialog, MIDI, or the mouse wheel. It can be also be changed via Image/Damping/More (Up Arrow) and Image/Damping/Less (Down Arrow); the arrow shortcuts are handy if the mouse has no wheel.
This setting determines whether origin motion keeps the rings together, or spreads them out. Trail ranges from 0 (none) to 100 (maximum). When trail is zero, the rings stay together; as trail increases, rings further from the origin lag behind, creating a slinky effect. When trail is at maximum, rings don't move from their birth positions. In short, trail controls how long it takes for the rings to recenter themselves around a new origin.
Trail is essential for simulating elastic motion, e.g. jellyfish, worms, etc. The best results are achieved by combining trail with damping, and limiting the number of rings, via the rings setting. Random origin motion works well, because the pauses give the rings a chance to catch up periodically, instead of remaining spread out all the time. If the rings are filled, it may be more effective to draw them in convex mode, so that the innermost rings are always visible.
Trail can be changed via the Master dialog, MIDI, or by moving the mouse wheel while holding down the Shift key.
This setting limits the number of rings to a specific value, ranging from 0 to 999. A value of 1000 disables the limiting, and the value is displayed as "MAX" to indicate this. The default value is "MAX".
The number of rings is also limited by the canvas size. Setting Rings to "MAX" allows rings to die "naturally", i.e. when their all vertices are off-canvas. Setting Rings below "MAX" can cause rings to die before their time.
Limiting the number of rings is essential for solving performance problems, but it's also interesting as a special effect, because it provides a means of simplifying the composition.
The ring limit can be changed via the Master dialog, via MIDI, or in Veejay mode ONLY, by moving the mouse vertically while holding down the Alt key.
This setting controls the tempo, in beats per minute (BPM). When origin motion is set to Random, the tempo determines how frequently the origin jumps to a new position. If origin motion isn't set to Random, tempo has no effect on the origin. As of version 1.5, the tempo also controls the rate of video cycling.
The origin jumps can be synchronized to music by adjusting the tempo appropriately. This is particularly effective when the animation is mirrored. It's also interesting to smooth the jumps, using damping.
The tempo is typically synchronized manually, via tap tempo, though it can also be synchronized to MIDI clocks. The Master dialog's tempo controls aren't useful for synchronization, but they do allow a specific tempo to be entered directly.
Hue loop length
The image color normally cycles around the entire hue wheel, at the speed and direction dictated by the Color Speed parameter. In Loop Hue mode, cycling is limited to a subset of the hue wheel; hue loop length is the size of the subset, in degrees. Loop Hue must be enabled for hue loop length to have any effect.
If the loop length is zero, Loop Hue makes the image monochromatic: all rings will have the same hue, though they may differ in lightness or saturation. With a small length (e.g. 30°), Loop Hue makes the image nearly monochromatic, but still allows rings to be distinguished from one another by hue.
Hue loop length can be changed via the Master dialog, or MIDI.
The canvas is the rectangular area within which rings can exist. A ring normally grows outward from the origin, and when it gets big enough so that all of its vertices are outside the canvas, it dies (i.e. it's deleted from the ring list). In reverse, a ring grows inward from the edges of the canvas, and dies when its radius reaches zero.
Canvas Scale is the size of the canvas, expressed as a percentage of the current window size. It ranges from 100 to 300. The default value (140) ensures that in almost all cases, rings will die (or be born, in reverse) entirely off-screen. At 100, the canvas is the same size as the window, in which case ring deaths (or births) may be visible.
Canvas scale also interacts with zoom to determine how far outside the window the origin can be dragged. Origin dragging is limited to either the zoomed canvas or the window, whichever is bigger. If both canvas scale and zoom are 100%, origin dragging is limited to the window.
Canvas scale and window size both affect performance, because the bigger they are, the more rings can exist at once. Performance can be improved by reducing canvas scale, the window size, or both. The number of rings can also be limited explicitly, via the master Rings setting.
Canvas scale can be changed via the Master dialog, or MIDI.
This setting, combined with the Spread setting, allows you to draw multiple groups of rings at once. Copies is the number of groups to draw, and Spread is their distance from the origin, in pixels. The groups are evenly spaced along a circular path around the origin: e.g. if Copies is 5, the groups will form a pentagon, centered on the origin, with a radius of Spread.
The resulting effect is different from mirroring: the groups may interleave, and usually aren't identical. As new rings are born, each group takes a turn to receive a ring, in round-robin fashion, similar to dealing cards. The groups usually have subtle differences from each other, because in a typical patch, the ring parameters are gradually changing as the rings are dealt.
The amount of interleaving depends on how far apart the groups are spread, and the ring limit. Using Trail with multiple groups of rings and a low ring limit results in an effect somewhat like a swarm of bees, or airplanes flying in formation. If the number of copies is large, the effect will be perceived as a circular origin motion rather than distinct groups.
Note that as the number of copies increases, the distance between rings within each group also increases proportionally. This occurs because the same number of rings that would normally form a single group are now being divided among multiple groups. If this is a problem, you can compensate for it by decreasing Ring Spacing.
Also note that large Spread values can cause new rings to die immediately as soon as they're born. This is probably a bug, but you can work around it by increasing Canvas Scale, or by decreasing Spread.
This setting, combined with the Copies setting, allows you to draw multiple groups of rings at once. Copies is the number of groups to draw, and Spread is their distance from the origin, in pixels. See Copies for details.
Whorld uses the HLS color model, which stands for Hue, Lightness, Saturation. HLS organizes the visible spectrum into a double cone, with the two cones joined at their bases and pointing north and south respectively. Black is at the tip of the south cone; white is at the tip of the north cone. The vertical axis is lightness; distance from the center is saturation; angle is hue.
The model can be viewed in cross-section as a series of discs which increase in diameter until they reach the middle, and then decrease again. Each disc corresponds to a level of lightness. At each level, fully saturated colors occur on the rim of the corresponding disc. Movement within the color model can be summarized as follows:
|Hue change||Moving clockwise or counterclockwise, while maintaining a constant radius.|
|Saturation change||Moving towards or away from the center, while maintaining a constant angle.|
|Lightness change||Moving to a higher or lower disc.|
The center of any disc is a pure gray; if a straight line is drawn from black to white, through the center of the model, all pure grays lie along this line. The middle disc contains the largest number of colors, and the pure primaries and secondaries occur on the rim of the middle disc, at 60° intervals.
The values are normalized as follows: lightness ranges from 0 (black) to 1 (white), with middle gray at .5; saturation ranges from 0 (monochrome) to 1 (full saturation); hue ranges from 0 to 360, with red at 0°, yellow at 60°, green at 120°, etc. Note that at saturation = 0, hue is irrelevant, and at lightness = 0 or lightness = 1, both saturation AND hue are irrelevant.
The image color normally cycles around the entire hue wheel, at the speed and direction dictated by the Color Speed parameter. In Loop Hue mode, cycling is limited to a subset of the hue wheel. The size of the subset is determined by Hue Loop Length. Loop Hue affects new rings only; existing rings are unaffected.
Enabling Loop Hue causes the hue to immediately reverse direction: the current hue becomes one end of the loop, and the loop length determines the other end. For example, suppose the hue is currently 240° (blue), Color Speed is positive (clockwise), and the loop length is 60°. In this case, enabling Loop Hue causes the hue to cycle counterclockwise until it reaches 180° (cyan), at which point it reverses direction again and heads back towards blue.
A hue loop can be moved around the hue wheel, using the mouse or the Rotate Hue command. Manual hue changes are more dramatic when cycling is limited; 360° cycling tends to upstage them.
This command rotates the hues of both new and existing rings by 90°. The background color is not affected. The rotation is cumulative, so after four repetitions you're back where you started. Only hues are affected, not lightness or saturation. The effect is more dramatic when hue cycling is limited; see Loop Hue.
Hues can be changed gradually via MIDI, or by moving the mouse vertically while holding down the right button.
While this mode is enabled, the colors of both new and existing rings are inverted. The background color is not affected. Inversion is not the same as rotating the hue 180° (e.g. by doing two Rotate Hue commands), because it's done in RGB space, and therefore flips the lightness as well as the hue. Note that in Invert Color mode, the direction of the Lightness parameter is reversed: increasing it makes the image darker.
A snapshot is a file that captures a still frame of the animation, so that it can be restored later exactly as it was, with no loss of information. Snapshots are captured using Take Snapshot, and restored using Load Snapshot.
Snapshots are vector-based: they store ring data, rather than pixels. This makes them much more compact than bitmaps, and resolution-independent, i.e. a snapshot can be zoomed without becoming pixelated.
Still frames should always be saved as snapshots, rather than bitmaps, because snapshots are non-lossy, save space, and are much more flexible. Snapshots can be printed, viewed as a slide show, or exported as bitmaps. Snapshots can also be edited to some extent. They can't be opened by other applications, but you can't have everything.
Still not convinced? Suppose you capture some frames by exporting bitmaps. They look fine on the screen, but when you print them, they're too small, and enlarging them makes them pixelated. You can't redo the exports, because the original frames are gone. If you had captured them as snapshots, you could restore and re-export them.
This command captures the current image as a snapshot. To take a snapshot, use File/Take Snapshot or Ctrl+T. The command freezes the current frame, and displays a file dialog, allowing you to specify the output file's name and location.
Note that in Veejay mode, the file dialog is not displayed; in this case the snapshot is created in the default output folder, and its name is generated automatically. If the Use default folder option is set to "Always", taking a snapshot never displays a file dialog.
This command restores one or more snapshots that were previously captured using the Take Snapshot command. To load snapshots, use File/Load Snapshot or Ctrl+L. The command displays a special file dialog that allows multiple files to be selected, and also allows snapshots to be previewed.
To preview the snapshots, check the "Preview" box in the lower-left corner of the file dialog, and select the files one at a time; note that preview doesn't work with multiple selections.
To load the snapshots, press "Open" in the file dialog. Loading snapshots causes Whorld to enter Snapshot Mode, which allows the snapshots to be viewed, printed, exported, etc.
In this mode, the window displays the current snapshot, instead of the usual animation. The animation is frozen, and doesn't resume until you exit snapshot mode. Snapshot mode is an extension of pause, and has the same restrictions. To enter snapshot mode, load one or more snapshots; to exit snapshot mode and resume animating, select Window/Pause, or press Space.
While in snapshot mode, Whorld displays a Snapshot menu, between the File and Edit menus. This menu allows you to access commands that are only meaningful in snapshot mode:
|Previous||Page Up||Go to previous snapshot|
|Next||Page Down||Go to next snapshot|
|First||Home||Go to first snapshot|
|Last||End||Go to last snapshot|
|Slide Show||(none)||Display a slide show of the snapshots|
|Export All||(none)||Export the snapshots as bitmaps|
To display Snapshots as a slide show, first load them, and then select Snapshot/Slide Show. Whorld displays the Slide Show dialog. Configure its options as desired (see below), and press "OK" to start the show. After the show begins, it can be canceled by pressing any key, or left-clicking in the window.
To open snapshots in other applications, you must first export them as bitmaps. It's possible to export them one at a time using File/Export, but for large numbers of snapshots this becomes tedious. Export All allows you to export multiple snapshots at once, using the same settings for all of them.
To export multiple snapshots, first load them, and then select Snapshot/Export All. Whorld displays a folder dialog, allowing you to choose a destination for the bitmaps. After you select a folder and press "OK", the Export dialog is displayed; configure the options as desired, and press "OK" to begin the export.
A snapshot can be edited to a limited extent, e.g. by changing its origin, effects, zoom, and colors, though rings can't be added or deleted. To edit a snapshot, you must first load it. After editing it, save your changes by taking another snapshot. Note that you will not be prompted to save your changes, so to avoid confusion, only edit one snapshot at a time. For a complete list of the edits that can be performed on a snapshot, see Pause.
A movie is a file containing a sequence of frames from Whorld's animation. After a movie has been recorded, it can be played in Whorld, but to use it in another application, it must be exported first.
Movie frames are stored in a non-lossy format, so that the animation can be restored later exactly as it was, with no loss of information. Movies are implemented using snapshots, so they're vector-based, rather than pixel-based.
Movie files can be quite large. Typical data rates range from 0.5 to 3.0 MB per second, which means a 1-hour recording can require anywhere from 1.5 to 10 GB. In practice, movies are often at the low end of this range. A movie stores the ring data for each frame, which means a movie's size is proportional to the average number of rings. Various factors can affect the number of rings; see performance.
To record a movie, use File/Movie/Record or Ctrl+R. The command displays a file dialog, allowing you to specify the output file's name and location. Press "Save" to begin recording.
Note that in Veejay mode, the file dialog is not displayed; in this case the movie is created in the default output folder, and its name is generated automatically. If the Use default folder option is set to "Always", recording a movie never displays a file dialog.
The movie is recorded at the current Frame Rate. The frame rate defaults to 25, which is fine for PAL, but not for NTSC. If you intend to encode the movie for an NTSC medium (e.g. NTSC DVD), you should change the frame rate to 30, otherwise the encoding may distort the movie, or speed it up.
A movie includes a frame size, which is set to the window size when you start recording. If you start recording before switching to full-screen or Veejay mode, the frame size will be incorrect. The movie can be resized later, but to avoid this step, go full-screen first, and then start recording.
The keyboard Scroll Lock LED blinks periodically while you're recording a movie. This allows you to verify that you're actually recording, even when Whorld is full-screen. Note that the blinking may not work on USB keyboards.
To stop recording, select File/Movie/Record or press Ctrl+R again. The animation may pause briefly when you stop recording.
To play a movie, use File/Movie/Play. The command displays a file dialog, allowing you to browse for the movie. Press "Open" to begin playback.
During playback, the Movie Player dialog is displayed. This dialog includes the standard transport buttons (Play, Pause, Stop, and Loop), and a position slider. To skip around in the movie, left-click in the position slider, or drag its thumb.
The dialog also allows you to select a range of frames. Buttons are provided for marking the range's in and out points, and for jumping to the start or end of the range. If a frame range exists while the player is looping, the selected frames are repeated. The frame range is also passed to the export dialog (see below).
The Save button brings up the Movie Export dialog. Note that if a frame range exists, it's passed to the export dialog, so that by default, only the selected frames are exported. This allows you to select an export range visually in the player, instead of entering it numerically in the export dialog.
The dialog also includes a Take Snapshot button, which exports the current frame as a snapshot.
The dialog's minimize and maximize buttons have special meanings, as follows. Minimize hides the dialog; to show it again, left-click on the window, or press any key. Maximize causes the main window (not the dialog) to become full-screen, and also hides the dialog; to exit full-screen mode, press any key.
To exit playback mode, close the Movie Player dialog, or press Esc. The normal animation resumes.
Movies must be exported before they can used by other applications. A movie can be exported as a compressed or uncompressed AVI file, or as a numbered sequence of bitmaps.
To export a movie, use File/Movie/Export. The command displays a series of dialogs, as shown below.
Movies include a frame size, which is the width and height of each frame, in pixels. Frame size doesn't affect playback, but it can affect exporting: it's needed to calculate the scaling factor when you export a movie with the "Scale to fit" option. Typically you're exporting to a smaller format, and you want the original frames scaled down so they fit. If the frame size is incorrect, frames may be cropped unintentionally.
The frame size is set to the window size when you start recording. If you start recording before switching to full-screen or Veejay mode, the frame size will be incorrect.
To correct the frame size, use File/Movie/Resize. The command displays a file dialog, allowing you to browse for the movie. After you press "Open", the Resize Movie dialog is displayed. Enter the correct width and height, and press "OK" to save your change.
As of version 1.5, a video clip can be overlaid onto the animation, using various types of blending. Videos are handled in much the same way as patches, and must be inserted into a playlist beforehand, using the playlist dialog. Videos can be played via shortcut keys or MIDI, or automatically cycled in sync with the master tempo. The most recently played videos are cached for easy access.
Note that only AVI files are supported; other video formats, including MPEG, Quicktime, Windows Media, etc. are NOT supported. The appropriate codec(s) must be installed on your PC, and other restrictions may apply; see encoding. The free, open-source XVID codec is recommended.
Before videos can be played, they must be inserted into a playlist, in the same manner as patches, via the playlist dialog. Patches and videos are interchangeable in terms of playlist editing, and can be mixed freely within the same playlist bank. Playing videos is similar to playing patches, except that the crossfader isn't affected. Videos can have keys assigned to them, or MIDI messages mapped to them. Videos can also be played from within the playlist dialog, by simply double-clicking them.
Videos are always looped; once a video is played, it continues looping until a different video is played, or video is disabled via Image/Video/Select/None, the numeric keypad's decimal (Del) key, or the Video Select MIDI property.
The most recently played videos are cached for easy access. When a video is played, if it's found in the cache, it normally plays from wherever it last stopped, rather than from the beginning. This feature allows you to step through several videos at once, either by manually alternating between them, or automatically cycling them. If you prefer your videos to always play from the beginning, you can enable auto-rewind, using Image/Video/Auto-Rewind or Shift+Home. To explicitly rewind the currently playing video, use Image/Video/Rewind or Home.
The ten most recently played videos are cached, and can be selected via Image/Video/Select, keys 0..9 on the numeric keypad, or the Video Select MIDI property. This provides you with a dynamic "working set" of videos that can be accessed easily, without having to remember where they are in your playlist. The cache is kept in ascending order by age, i.e. Num0 is always the most recently played video, Num1 is the second most recently played video, and so on.
Note that a distinction is made between selecting cached videos, and playing videos, which may or may not be already cached. Cached videos are selected as described above; videos are played via the playlist dialog, assigned keys, or MIDI mapping. Selecting a cached video doesn't affect the cache order, whereas playing a video changes the order as follows:
The following diagram illustrates both cases, using names to represent the videos. Bold indicates the currently playing video.
|Initial cache state:||After playing "karl":||After playing "fred":|
The following table associates cached videos with keys and MIDI. Note that a value of 127 disables video. If this is undesirable, set the range of the Video Select MIDI property to 4.99 instead of 5.
The video is blended with the animation, such that both the video and the animation are partially visible. The available blending modes are listed in the table below. Each blending mode corresponds to a Windows GDI Raster Operation (ROP). A raster operation is a boolean operator (OR, AND, XOR) optionally combined with an inversion of the source (the video) or the destination (the animation).
|Key||MIDI||Blending||Description||ROP code||Common name|
|Ctrl+Num0||0..12||~Src & Dst||AND inverted source with destination||DSna|
|Ctrl+Num1||13..25||~Src | Dst||OR inverted source with destination||DSno||MERGEPAINT|
|Ctrl+Num2||26..38||Src & ~Dst||AND source with inverted destination||SDna||SRCERASE|
|Ctrl+Num3||39..51||Src & ~Dst||OR source with inverted destination||SDno|
|Ctrl+Num4||52..63||Src & Dst||AND source with destination||DSa||SRCAND|
|Ctrl+Num5||64..76||Src | Dst||OR source with destination||DSo||SRCPAINT|
|Ctrl+Num6||77..89||Src ^ Dst||XOR source with destination||DSx||SRCINVERT|
|Ctrl+Num7||90..101||~(Src & Dst)||AND source with destination, invert result||DSan|
|Ctrl+Num8||102..114||~(Src | Dst)||OR source with destination, invert result||DSon||NOTSRCERASE|
|Ctrl+Num9||115..127||~(Src ^ Dst)||XOR source with destination, invert result||DSxn|
The XOR modes alter the colors drastically, giving a psychedelic effect. The other modes don't alter the colors as much, but they're also more sensitive to very dark or very light inputs. SRCPAINT is similar to transparency, and causes the least amount of color distortion. SRCAND is similar to luma-keying: the video is only visible in non-black portions of the animation. The default blending mode is SRCINVERT.
The blending mode can be changed via Image/Video/Blending, or by pressing a number on the numeric keypad while holding down the Ctrl key, or via MIDI. Changing the blending mode is a dramatic effect, but caution is advised since extreme changes in brightness may result. Note that the MIDI values given above assume that the Video Blending MIDI property has its default range (five).
Whorld can automatically step through the cached videos, while synchronizing the transitions with the master tempo. This feature is called video cycling. The cycling continues sequentially until the last video is reached, and then begins again with the first video. The order and contents of the cache can be changed during cycling, simply by playing videos. To enable or disable video cycling, use Image/Video/Cycle or Ctrl+J.
By default, the cycle includes all cached videos, but it's also possible to limit cycling to the N most recent videos, where N is the cycle length. To specify a cycle length, use Image/Video/Cycle Length, or press a number on the numeric keypad while holding down the Alt key, or use the Video Cycle Length MIDI property.
The cycle always starts with video 0, i.e. the video that corresponds to the Num0 key. For example, if a cycle length of four is specifed, the cycle will consist of videos 0, 1, 2, and 3. Note that if the cache isn't full, the cycle may be shorter than the specified length, because empty cache slots are skipped. The following table associates cycle lengths with keys and MIDI.
|Alt+Num1||0..12||most recent 1 videos|
|Alt+Num2||13..25||most recent 2 videos|
|Alt+Num3||26..38||most recent 3 videos|
|Alt+Num4||39..51||most recent 4 videos|
|Alt+Num5||52..63||most recent 5 videos|
|Alt+Num6||64..76||most recent 6 videos|
|Alt+Num7||77..89||most recent 7 videos|
|Alt+Num8||90..101||most recent 8 videos|
|Alt+Num9||102..114||most recent 9 videos|
Videos must be AVI files with 16-bit, 24-bit or 32-bit color depth; 8-bit files are not supported. For optimal performance, the videos should have the same color depth as your display mode, i.e. if your display is configured for 24-bit color, your videos should also have 24-bit color. It's also recommended to use a standard frame size, e.g. 320 x 240 or 640 x 480.
The frame rates of the videos are ignored. Videos are always displayed at Whorld's frame rate; frames are never dropped or added. If the videos have different frame rates than Whorld's, they will play faster or slower than expected. To avoid this, encode at Whorld's frame rate, or change Whorld's frame rate to match the videos.
Since Whorld doesn't support audio, the videos needn't contain audio streams. Eliminating audio can reduce the size of your videos by as much as 20%, and may substantially improve performance. If you're ripping from DVD to VOBs, and then using VirtualDubMod to export AVI files from the VOBs, it's easier to eliminate audio during ripping; e.g. in DVD Decrypter, use IFO mode, enable Stream Processing, and uncheck the audio stream(s).
You'll need to experiment to determine an optimal bit rate, since this depends on various factors including your hardware, which codec you use, and how you set the codec. Excessive bit rates will cause jerky animation, particularly if the CPU is already overloaded due to other factors. Good results were achieved on the recommended hardware by encoding at 640 x 480, 24-bit color, and 25 FPS, using XVID 1.1.0 with the default settings. The source material was DVD VOBs with the audio removed, as described above. The output AVIs had bit rates in the range of 100 to 500 kbps.
Most codecs use temporal compression, i.e. they only store the differences between consecutive frames, and this can cause problems, particularly with linked videos. Performance may be improved by avoiding temporal compression, either by making every frame a key frame, or by using a codec that doesn't do temporal compression, e.g. MJPEG. Note however that this is a trade-off, since the resulting video files may be considerably larger. Playing video without temporal compression typically requires less CPU power, but more disk bandwidth.
The video overlay is captured in snapshots, but instead of embedding the video frame in the snapshot, the snapshot contains an external link to the video file. This saves a substantial amount of disk space, but it also means that in order to load or export the snapshot, the video file must exist at the correct location on your disk. If the video is not found, a missing files dialog is displayed.
The video overlay is also captured in recorded movies, again via external links to the video files. If you move, rename or delete the linked videos, attempting to play or export the movie causes a missing files dialog to be displayed.
Note that depending on how you encode your video, you may experience delays when playing back a recorded movie that contains video links. The delays only affect playback within Whorld: if you export the movie, the delays will NOT appear in the exported AVI file. The delays are likely to be worse with long video clips, and typically occur in the following situations:
The delays occur because codecs often exhibit very slow seeking to any position other than the start of the video. The slow seeking is a side effect of temporal compression. You may be able to avoid the delays by encoding your video without temporal compression.
The video overlay has its own origin, which is independent of the drawing origin. The video origin only has an effect when the output is mirrored. In mirror mode, only a quarter of the video frame is used. The video origin allows you to continuously change which portion of the video is used as the mirror source. By default the video origin is (0, 0), i.e. the upper-left quadrant of the video.
To change the video origin manually, move the mouse while holding down the Shift key. The video origin can also be automated, so that it makes random jumps in sync with the tempo; to enable or disable random jumps, use Image/Video/Random Origin, or Ctrl+Shift+R. Note that in either case, video origin motion is affected by Damping.
This dialog allows you to assign MIDI messages to Whorld's properties. To show or hide the dialog, use View/MIDI Setup or Shift+I. The dialog consists of a two-dimensional table, called the property list. Assignments can be made by editing the property list, or via Learn mode or Auto-assign. Note that you must select a MIDI device before MIDI will work.
Each row in the property list displays information about the MIDI message that's assigned to the corresponding property, including the message's range, type, channel, and controller/note number. This information can be edited, and the edits take effect immediately.
For example, to assign controller 1 on channel 12 to Ring Spacing, go to the appropriate row, change the event type to "CTRL", the channel to 12, and the controller to 1. Twiddling the controller should now affect both the ring spacing and the number in the "Value" column.
If nothing happens, open the Options dialog and check your MIDI device selection. Also check your cables and connections. If necessary, use a different application to verify that your PC is receiving MIDI messages.
Note that a given MIDI message can only be assigned to one property at a time. If you assign a message that's already assigned to another property, the other property loses its assignment, and its event type is set to "OFF" to indicate this.
MIDI assignments are saved as part of the playlist. If you already have a playlist with the desired MIDI setup, you can copy the setup into the current playlist, by choosing File/Import MIDI Setup from the playlist dialog's menus.
Whorld has various properties to which MIDI messages can be assigned. The property list is a two-dimensional table that shows the current assignments, and allows you to edit them. Each row in the table displays information about the MIDI message that's assigned to the corresponding property. The columns are described below.
Range lets you make a trade-off between the precision and magnitude of a MIDI control: making the range smaller allows finer adjustments, but reduces the control's overall effect. The range's first value can be greater than the second, in which case the control's effect is inverted.
Whorld's properties can be divided into four groups, as shown below:
|Waveform||0..8||Distributes waveforms evenly along controller's sweep.|
|Amplitude||?||Range depends on the parameter.|
|Frequency||0..1||Oscillator frequency in Hertz.|
|Pulse Width||0..1||Fractional duty cycle; ignored unless waveform is "Pulse".|
|OFF||No message is assigned to the property.|
|CTRL||A continuous controller message is assigned to the property; the controller edit box specifies the controller number.|
|NOTE||A note is assigned to the property. In this case the controller edit box displays and understands MIDI note numbers, e.g. F#4. Pressing the note toggles the property, i.e. flips it back and forth between +Range and −Range. Releasing the note has no effect. Notes are useful for controlling switches (see above).|
|PITCH||The pitch bend message is assigned to the property. In this case the controller edit box is ignored.|
Assigning MIDI messages via editing requires you to know which messages your device sends, and on which channels. Whorld can also "learn" the MIDI assignments, in which case you don't need to worry about those details. To use "learn" mode, do the following:
This dialog allows you to assign MIDI messages to multiple properties at once, as opposed to editing the properties one by one in the MIDI Setup dialog. This can save time in situations where the device sends a contiguous range of messages, and you want to assign them to a contiguous group of properties. To take advantage of this feature, you have to know which messages your device sends; otherwise, use Learn mode instead.
For example, suppose your device sends controllers 20 through 35 on channel 1, and you want to assign them to the parameters. The assignments can be made as follows:
If the device sends a single controller on a range of channels, e.g. controller 20 on channels 1 through 16, the procedure is identical, except that the two Range checkboxes must be reversed.
This command resets the Master Offsets to zero, thereby eliminating their influence on the parameters, and returning the animation to its "natural" state. The change may be drastic, depending on how far from zero the master offsets are at the time. To execute the command, use Edit/Zero Controllers or Shift+Z. Note that Panic also resets the master offsets, along with other critical settings.
If the offsets were being manipulated via MIDI controllers, the positions of the knobs (or sliders, or whatever) are no longer meaningful. To fix this, move the controls to their default positions. These moves may disrupt the animation unless you power off or disconnect the MIDI device before making them.
In addition, any oscillator override properties that have been changed via MIDI are reset. In typical configurations, this effectively disables all oscillator overrides.
Windows includes two systems for drawing 2D graphics: GDI and DirectDraw. Whorld can use either, but DirectDraw is more hardware-oriented and typically gives much better performance than GDI. The following options allow you to control Whorld's usage of DirectDraw.
This is the number of frames generated per second, ranging from 24 to 60. Higher frame rates theoretically result in smoother animation, but only if the computer can handle the increased CPU and graphics load. On an underpowered machine, increasing the frame rate may have no effect, or may even make the animation less smooth, particularly if expensive effects (e.g. fill, X-ray) are used. Whorld never drops (omits) frames, but it can get behind, in which case the actual frame rate can be considerably lower than the desired rate. If it gets too far behind, it may become unresponsive; see performance.
Note that the frame rate selected here has an important side-effect: it's also used as the frame rate for recorded movies. The default frame rate (25) is ideal in countries that use PAL (e.g. Europe), but may be inconvenient in countries that use NTSC (e.g. USA, Japan). Since NTSC runs at approximately 30 FPS, a movie recorded at 25 FPS, and then output to an NTSC medium (e.g. NTSC DVD) will speed up by 20%. Frame-rate conversion is possible but typically causes unacceptable artifacts. Setting the frame rate to 30 eliminates the speed-up for NTSC, but also requires 20% more CPU and graphics power.
Note that increasing the frame rate also speeds up the animation. To compensate for this, decrease the master speed proportionally.
Print from bitmap
The print command normally draws directly to the printer's device context; when this option is checked, the print command draws to an intermediate bitmap instead, and then blits (copies) the bitmap to the printer's device context. The option should normally be unchecked, because drawing directly to the printer takes advantage of the printer's resolution, which is usually much better than screen resolution.
The only down side of drawing directly to the printer is that images drawn in X-Ray mode may have slightly different colors in the printout than they do on the screen. Checking "Print from bitmap" fixes this, but at the cost of using screen resolution, which causes stairstepping (jaggedness) on lines and edges.
This setting changes the sensitivity of the pointing device to horizontal and vertical motion. The larger the value, the more effect motion has. The value is a percentage of normal sensitivity, ranging from 25 (a quarter as sensitive) to 400 (four times as sensitive). The default setting is 100 (normal). Note that this setting only affects Whorld, as opposed to the system mouse settings in the Control Panel, which affect all applications.
This setting changes the sensitivity of the pointing device's wheel. The larger the value, the more effect motion has. The value is a percentage of normal sensitivity, ranging from 25 (a quarter as sensitive) to 400 (four times as sensitive). The default setting is 100 (normal). Note that this setting only affects Whorld, as opposed to the system mouse settings in the Control Panel, which affect all applications.
This setting is the percentage that the nudge tempo commands increase or decrease the tempo by. The nudge tempo commands are Image/Tempo/Nudge Up (+ key) and Image/Tempo/Nudge Down (- key). The setting ranges from 0.1% to 0.9%.
For example, if Tempo Nudge is set to 0.25% (the default) and the tempo is 120, pressing the + key once makes the tempo 120.3 (120 × 1.0025 = 120.3).
Tempo nudge is a trade-off (precision versus speed) and a matter of taste. If it's too small, you won't be able to adjust the tempo quickly enough. If it's too big, you won't be able to get close enough to the desired tempo.
This option allows you to select a MIDI device. The list of devices varies, depending on what MIDI hardware is installed. If your PC doesn't have a MIDI device, the only option is "No MIDI input", which disables Whorld's MIDI support.
The default value is "No MIDI input", which means that in order to use MIDI, you must select a MIDI device at least once. Typically, you'll also need to assign specific MIDI messages to Whorld's functions, using the MIDI Setup dialog.
If you're using a USB MIDI interface, always connect it to the PC before launching Whorld. If you launch Whorld while the interface is disconnected, your device selection will be lost, and connecting the interface won't make it appear in the device list: you must first exit Whorld, and then connect the interface, re-launch Whorld, and reselect the device.
When this option is checked, Whorld synchronizes the tempo to MIDI clocks. Unlike manual synchronization, MIDI sync doesn't drift, even if the tempo changes. Note that tempo has no visible effect unless origin motion is set to Random.
The PC must be connected to a device that sends MIDI clocks for this option to work. While MIDI sync is checked, the origin will not jump unless Whorld is receiving MIDI clocks. Not all MIDI devices send clocks. If necessary, use a different application to verify that the PC is receiving MIDI clocks.
In MIDI sync mode, the usual methods of setting the tempo (Master dialog's tempo controls, Tab key, tempo nudge keys) have no effect. Other tempo functions have subtly different meanings, as shown below:
|Tap||Tab||No effect: tempo set by MIDI.|
|Nudge Up||+||No effect: tempo set by MIDI.|
|Nudge Down||-||No effect: tempo set by MIDI.|
|Resync||Enter||Restarts the tempo loop.|
|Double||]||Doubles the meter.|
|Half||[||Halves the meter.|
MIDI sync mode introduces the concept of meter, which governs the relationship between the MIDI tempo, and how often the origin jumps. Tempo is measured in beats per minute (BPM). When the meter is 1/4, the origin jumps once per beat, e.g. at 120 BPM, the origin jumps 120 times a minute, or twice per second. The meter is changed via the [ and ] keys. The available meters are listed below. Note that in MIDI sync mode, the status bar displays the meter instead of the tempo.
|4/1||every sixteen beats||/ 16|
|2/1||every eight beats||/ 8|
|1/1||every four beats||/ 4|
|1/2||every other beat||/ 2|
|1/4||every beat||× 1|
|1/8||twice per beat||× 2|
|1/16||four times per beat||× 4|
In Veejay mode, dialogs aren't permitted, and as a result, certain commands that create output files behave differently. These commands normally display a file dialog, which prompts the user for the name and location of the output file, but in Veejay mode, the output file is silently created in the default output folder, using a filename that's synthesized from the date and time. The commands that behave this way are:
This setting allows you to change the location of the default output folder. The default location is a subfolder called "Whorld" in "My Documents". The full path of the default location varies, but it typically has the form:
C:\Documents and Settings\foo\My Documents\Whorld
where foo is a substitute for the current username. The default location has advantages: since it's within your profile, you're guaranteed to have access to it, and it's also guaranteed to be a unique location for each user. If you change the location, make sure you have access to whatever folder you specify. Note that if you specify an invalid folder, or one that you don't have access to, you may not see any error messages, because Veejay mode doesn't allow dialogs.
It's possible to make these commands always create their output files silently; see Use default folder.
Use default folder
In Veejay mode, certain commands create their output files silently in the default output folder, instead of displaying file dialogs. You may find it more convenient for these commands to never display file dialogs; if so, change the "Use default folder" option from "In VJ mode" to "Always". Selecting "Always" is a trade-off: you can create files quickly without stopping the animation each time, but the files won't have meaningful names, unless you go back and rename them later.
Some of Whorld's dialogs allow multiple items to be selected at once. The interface is common to all Windows applications, but it's described here anyway.
|Single item||Left-click it.|
|Contiguous group||Left-click the first item, and then Shift+left-click the last item. Shift+left-click can also expand or trim an existing selection.|
|Non-contiguous group||Ctrl+left-click each item. To remove a item from the selection, Ctrl+left-click it again.|
|All items||Left-click any item, and press Ctrl+A.|
Tap tempo is a method of manually synchronizing Whorld's tempo to music, by tapping a special key along with the beat. This initial synchronization typically has to be corrected, by nudging the tempo up or down slightly. The tap tempo functions are as follows:
|Tap||Tab||Sets the tempo when tapped repeatedly in rhythm.|
|Nudge Up||+||Increases the tempo by the tempo nudge percentage.|
|Nudge Down||-||Decreases the tempo by the tempo nudge percentage.|
|Resync||Enter||Restarts the tempo loop, without changing the tempo.|
|Double||]||Doubles the tempo.|
|Half||[||Halves the tempo.|
The tempo can be entered simply by tapping the Tab key twice: Whorld measures the elapsed time between the taps, and sets the tempo accordingly. Note that tempo has no visible effect unless origin motion is set to Random.
More accurate results can be achieved by increasing the number of taps. Each additional tap provides another elapsed time measurement, or sample. The tempo is calculated by averaging the samples, but only so long as they stay within 10% of the average. If a sample is off by more than 10%, the history is flushed, and averaging starts over again from that sample.
You can tap on any evenly-spaced subdivision of the music, not only the main beat. You may prefer to tap on longer subdivisions (e.g. half notes, whole notes, every other measure) so the origin doesn't jump as often.
After tapping the tempo, watch the origin, to see if its jumps are in sync with the music. It's is easier to see when damping is low. If they seem out of sync, try tapping the Enter key once, right on the beat, or slightly ahead of it. This shifts the jumps onto the beat, but doesn't change the tempo. The sync should improve, at least temporarily. If it stays good for a while, you're done.
Otherwise, when the sync starts to drift, try to determine which way it's drifting. If the jumps are falling behind, the tempo is too slow, so nudge it up. If they're getting ahead, the tempo is too fast, so nudge it down. Be careful not to overcompensate. If you're way off, it may be easier to start over, by tapping the tempo again. It's beat-matching, and it takes some practice.
Without MIDI sync, drift is unavoidable; the question is just how quickly it gets big enough to bother you. Assuming the music has a fixed tempo, you shouldn't have to resync more than once or twice a minute. If you do, either the DJ has his thumb on the record, or you haven't got the tempo right. It may help to play with the tempo nudge percentage.
The export command creates a Windows bitmap (BMP file) from the current image. The command freezes the current frame, and displays a file dialog, allowing you to specify the output file's name and location. The command then displays the Export dialog, which allows you to configure the Export options, as described below. To do an export, use File/Export or Ctrl+E.
Still frames should initially be saved as snapshots, and exported later, because snapshots are much more compact than bitmaps, and can be zoomed and edited without loss of quality.
This command restores critical settings to reasonable values. The affected settings all have the potential to cause confusion or degrade performance. Panic can rescue you from a variety of problems, but the transition can be a bit jarring. To execute this command, use Window/Panic or press Esc.
Panic takes the following actions:
Panic also exits from full-screen, but not from Veejay mode.
Note that if you're using a MIDI controller, after pressing Panic, the positions of your knobs (or sliders, or whatever) are no longer meaningful. To fix this, move the knobs to their default positions, and then Zero Controllers, or press Panic again.
Tearing is a distracting visual artifact. It typically looks like horizontal lines running up and down the image. Tearing occurs if the display is refreshed while the CPU is in the middle of writing a new frame to the graphics hardware. At that moment, both the old and new frames are partially visible, and if they differ (as is likely), the eye perceives a discontinuity (a tear) in the image.
Tearing can be prevented by using Veejay mode to make the image full-screen; this causes Whorld to use DirectDraw's Exclusive mode, which synchronizes access to the graphics hardware. Note that both DirectDraw and Exclusive mode must be enabled; see DirectDraw options. In normal windowed and full-screen modes, tearing is unavoidable.
Performance problems typically manifest themselves as a slowing-down or jerkiness of the animation, with visible pauses between frames. In extreme cases, the user interface may become unresponsive. Should this occur during a performance, pressing Panic will usually resolve the situation.
The best solution is a more powerful computer. Whorld is graphics-bound, which means that upgrading the graphics card will probably make more difference than adding memory or upgrading the CPU. On the other hand, a cutting-edge graphics card may not perform optimally (or at all) without upgrades to other components, so it might be easier to start from scratch. The recommended system cost approximately $1300 in Q3 2005, not including the trackball and MIDI controller. It's a medium-duty gamer-style system, and it manages to avoid slowdowns in almost all cases, even while recording a movie.
Note that the recommended system is housed in a SFF (Small Form-Factor) Micro-ATX case, not a laptop. This has obvious disadvantages (it's not as portable as a laptop, and there's no built-in screen or keyboard/mouse) but at the time of this writing, there are no PC laptops powerful enough to run Whorld optimally, and even if there were, they would be absurdly expensive. For the moment, if you want Whorld to run smoothly in all modes, be prepared to lug a SFF machine to your gigs. It weighs about 20 pounds and fits in a gym bag.
The other performance solutions can be divided into two categories: less rings, and less effects.
Less rings means keeping the ring count low, and there are various ways to achieve this. The most direct method is the master Rings setting. This allows you to place an absolute limit on the number of rings. The downside is that you may drastically simplify the composition, though this could be a plus in some cases.
Decreasing the canvas size also helps keep the ring count low. The downside is that at values below 140%, rings may die (or be born) on-screen. Also there will be less hidden stuff to see when you zoom all the way out.
Increasing Ring Spacing is another way to reduce the ring count. The downside is that the composition becomes more spread-out and sparse.
The ring count can also be reduced by decreasing the window size and/or the screen resolution. For VJs, decreasing the window size isn't an option, because performing is always done full-screen. However, lowering the screen resolution to 1024x768 or less makes good sense. At higher resolutions, 1-pixel-wide lines start to look too thin anyway, and increasing the line width above 1 pixel is a major performance hit (see below). In addition, the native resolution of most projectors is currently 1024x768 or less, so drawing at higher resolutions is wasted work.
Less effects means being careful about any of the following: Fill mode, Outline mode, X-Ray mode, Line Widths greater than one, and zooming in. All of these caused increased graphics overhead, and in combination they can be deadly. X-Ray is by far the worst offender. Using X-Ray with wide lines, fill and outline can bring even the mighty Radeon X800XL to its knees. To use all of these effects at once, you may have to give up something else, e.g. limit the number of rings, increase the ring spacing, zoom out, etc.
Extreme negative Star Factor can also create performance problems, because it causes some of a ring's vertices to remain visible for much longer than others. Since a ring is only deleted when all of its vertices are off-canvas, extreme negative Star Factor prolongs the ring's life, thereby increasing the average ring count.
|+||Tempo Nudge Up||Increase tempo by nudge percentage|
|-||Tempo Nudge Down||Decrease tempo by nudge percentage|
|=||Tempo Nudge Up||Increase tempo by nudge percentage|
|Ctrl+A||Autoplay||Play the current playlist|
|Ctrl+C||Copy||Copy the selection and put it on the Clipboard|
|Shift+C||Center Origin||Center origin within window|
|Shift+D||Drag Origin||Enable origin dragging|
|Ctrl+E||Export Bitmap||Export the current image to a bitmap file|
|Ctrl+Shift+E||Export All||Export all snapshots|
|Shift+F||Patch Full||Loading a patch affects all settings|
|Shift+G||Patch Geometry||Loading a patch affects geometry only|
|Shift+I||MIDI Setup||Show or hide the MIDI setup dialog|
|Ctrl+J||Cycle Video||Cycle video clips in sync with tempo|
|Ctrl+L||Load Snapshot||Restore one or more captured images|
|Shift+L||Playlist||Show or hide the playlist dialog|
|Ctrl+M||View Mix||View crossfader mix|
|Shift+M||Master Speed||Show or hide the master speed dialog|
|Ctrl+N||New||Create a new patch|
|Shift+N||Numbers||Show or hide the numbers dialog|
|Ctrl+Shift+N||Playlist New||Create a new playlist|
|Ctrl+O||Open||Open an existing document|
|Shift+O||Options||Show the options dialog|
|Ctrl+Shift+O||Playlist Open||Open an existing playlist|
|Ctrl+P||Print the current image|
|Shift+P||Parameters||Show or hide the parameters dialog|
|Ctrl+R||Record Movie||Record a movie|
|Shift+R||Random Origin||Enable random origin|
|Ctrl+Shift+R||Video Random Origin||Randomize video origin when mirrored|
|Ctrl+S||Save||Save the current patch|
|Shift+S||Make Patch||Save the current mix as a new patch|
|Ctrl+Shift+S||Playlist Save||Save the current playlist|
|Ctrl+T||Take Snapshot||Capture the current image|
|Ctrl+V||Paste||Insert Clipboard contents|
|Shift+V||Print Preview||Display full pages|
|Backspace||Reverse||Grow rings inward|
|Alt+Backspace||Undo||Undo the last action|
|Shift+Backspace||Step Backward||Step rings backward|
|Num Del||Video Off||Disable video|
|Shift+Delete||Cut||Cut the selection and put it on the Clipboard|
|Down||Less Damping||Decrease damping|
|Ctrl+Down||Shorter Crossfade||Decrease crossfade time|
|End||Last||Go to last item|
|Esc||Panic||Restore default settings|
|F1||Help||List Help topics|
|F10||Random Patch||Generate a random patch from crossfader inputs|
|F11||Full Screen||Toggle full screen mode|
|Ctrl+F11||Veejay||Toggle live performance mode|
|F12||Auto Fade||Start/stop automated crossfade|
|Shift+F12||Loop||Enable/disable looping of automated crossfade|
|F2||Loop Hue||Limit hue cycling|
|F3||Rotate Hue||Rotate hue 90 degrees|
|F4||Invert Color||Invert color|
|F6||Fill||Fill area between rings|
|Shift+F6||Invert Fill||Toggle fill for all rings|
|F7||Outline||Outline filled rings|
|Shift+F7||Invert Outline||Toggle outline for all rings|
|F8||X-Ray||Draw rings with XOR pen|
|Shift+F8||Invert X-Ray||Toggle XOR pen for all rings|
|F9||Random Phase||Randomize modulator phases|
|Home||First||Go to first item|
|Shift+Home||Rewind Video||Automatically rewind clips before playing them|
|Ctrl+Insert||Copy||Copy the selection and put it on the Clipboard|
|Shift+Insert||Paste||Insert Clipboard contents|
|Left||Next Patch A||Load playlist's next patch into crossfader input A|
|Page Down||Next||Go to next item|
|Num 0||Clip 0||Select video clip 0|
|Ctrl+Num 0||ROP DSna||AND inverted source with destination|
|Alt+Num 0||Cycle 10||Cycle most recent 10 video clips|
|Num 1||Clip 1||Select video clip 1|
|Ctrl+Num 1||ROP DSno||OR inverted source with destination|
|Alt+Num 1||Cycle 1||Cycle most recent 1 video clips|
|Num 2||Clip 2||Select video clip 2|
|Ctrl+Num 2||ROP SDna||AND source with inverted destination|
|Alt+Num 2||Cycle 2||Cycle most recent 2 video clips|
|Num 3||Clip 3||Select video clip 3|
|Ctrl+Num 3||ROP SDno||OR source with inverted destination|
|Alt+Num 3||Cycle 3||Cycle most recent 3 video clips|
|Num 4||Clip 4||Select video clip 4|
|Ctrl+Num 4||ROP DSa||AND source with destination|
|Alt+Num 4||Cycle 4||Cycle most recent 4 video clips|
|Num 5||Clip 5||Select video clip 5|
|Ctrl+Num 5||ROP DSo||OR source with destination|
|Alt+Num 5||Cycle 5||Cycle most recent 5 video clips|
|Num 6||Clip 6||Select video clip 6|
|Ctrl+Num 6||ROP DSx||XOR source with destination|
|Alt+Num 6||Cycle 6||Cycle most recent 6 video clips|
|Num 7||Clip 7||Select video clip 7|
|Ctrl+Num 7||ROP DSan||AND source with destination, invert result|
|Alt+Num 7||Cycle 7||Cycle most recent 7 video clips|
|Num 8||Clip 8||Select video clip 8|
|Ctrl+Num 8||ROP DSon||OR source with destination, invert result|
|Alt+Num 8||Cycle 8||Cycle most recent 8 video clips|
|Num 9||Clip 9||Select video clip 9|
|Ctrl+Num 9||ROP DSxn||XOR source with destination, invert result|
|Alt+Num 9||Cycle 9||Cycle most recent 9 video clips|
|Page Up||Previous||Go to previous item|
|Enter||Tempo Resync||Resynchronize tempo|
|Shift+Enter||Step Forward||Step rings forward|
|Right||Next Patch B||Load playlist's next patch into crossfader input B|
|Space||Pause||Freeze current frame|
|Shift+Space||Step||Step forward one frame at a time|
|Up||More Damping||Increase damping|
|Ctrl+Up||Longer Crossfade||Increase crossfade time|
|Shift+W||Window Zoom||Enable window-centered zoom|
|Ctrl+X||Cut||Cut the selection and put it on the Clipboard|
|Shift+X||Crossfader||Show or hide the crossfader dialog|
|Ctrl+Z||Undo||Undo the last action|
|Shift+Z||Zero Controllers||Reset all MIDI controllers to zero|
|[||Tempo Half||Divide current tempo by two|
|\||Convex||Draw rings in descending size order|
|]||Tempo Double||Multiply current tempo by two|
|_||Tempo Nudge Down||Decrease tempo by nudge percentage|
|Ctrl+A||Select All||Select the entire playlist|
|Ctrl+C||Copy||Copy the selection and put it on the Clipboard|
|Ctrl+N||Playlist New||Create a new playlist|
|Ctrl+O||Playlist Open||Open an existing playlist|
|Ctrl+S||Playlist Save||Save the current playlist|
|Ctrl+V||Paste||Insert Clipboard contents|
|Delete||Delete||Delete the current selection|
|Insert||Insert Patch||Insert one or more patches into the playlist|
|Ctrl+X||Cut||Cut the selection and put it on the Clipboard|