::::::::::VECTOR SYNTHESIS LIBRARY ::::::::::
The Vector Synthesis library allows the creation and manipulation of 2D and 3D vector shapes, Lissajous figures, and scan processed image and video inputs using audio signals sent directly to oscilloscopes, hacked CRT monitors, Vectrex game consoles, ILDA laser displays, or oscilloscope emulation softwares using the Pure Data programming environment.
Audio waveforms control the vertical and horizontal movements as well as the brightness of a single beam of light, tracing shapes, points and curves with a direct relationship between sound and image.
The technique is based on the well-known principle of Lissajous figures, which are a mathematical representation of complex harmonic motion. Originally displayed by reflecting light between mirrors attached to a pair of vibrating tuning forks, we are most used to seeing them on the screen of an oscilloscope, where they can be produced using pairs of electronic oscillators tuned to specific ratios.
There is a wealth of such experiments from the 1950s onward by major figure such as Mary Ellen Bute, John Whitney, Larry Cuba, Manfred Mohr, Nam June Paik, Ben Laposky, Bill Etra, and Steina & Woody Vasulka, which were all highly inspiration to the development of this library.
Tutorials, announcements, and testing here:
Demo videos here:
Pure Data, version 0.45 or newer. Install 32 bit version if you wish to use GEM. Gem 0.93.3 (OPTIONAL, used in scan processor only. Installed via deken, Pd’s externals manager) NOTE: Gem does not run on 64 bit Pure Data, and Pd-Extended is too old for some features of this library.
DC-coupled audio interface with minimum 3 output channels (5 recommended) Oscilloscope with X/Y/Z inputs (all DC-coupled) —or— Vectrex game console modified for X/Y/Z input (all DC-coupled) —or— Vector monitor with X/Y/Z inputs (all DC-coupled) —or— Oscilloscope software with X/Y/Z inputs such as Hansi Raber's "Oscilloscope!" app https://github.com/kritzikratzi/Oscilloscope/releases/tag/1.0.9 (Hold SHIFT key when selecting input for third channel brightness control) plus audio loopback application such as SoundFlower or Virtual Audio Cable NOTE: the Z axis should control the brightness of the beam, not 3D depth
The files with "help" in their name are very good examples to start with. The files without "help" in their name are the abstractions themselves, without any controls. The files with ".txt" extension are backup data for the various 3D shapes. Audio Interface Output 1 : Horizontal Audio Interface Output 2 : Vertical Audio Interface Output 3 : Brightness Audio Interface Output 4 : Audio Left (Horizontal * Brightness, w/ multiplexing system patches) Audio Interface Output 5 : Audio Right (Vertical * Brightness, w/ multiplexing system patches) Higher sampling rate = higher resolution/fewer errors in the vector shapes Tested at 44.1K, 96K, 192K Stereo output is also usable, however there will be no brightness control. An AC-coupled soundcard or display will show noticeable distortions in the shape and screen location of the vector shapes (they will always appear in the center). DC-coupling is also necessary for brightness control. Brightness control is essential for multiplexing, scan processing, and a number of other interesting visual effects, however you can still use this library for many things without it.
LIST OF OBJECTS
—-NATIVE PD OBJECTS of NOTE
[phasor~] : sawtooth ramp generator which goes from value 0 to value 1 [wrap~] : remainder of a division operation, used here to generate phase-locked harmonics of [phasor~]. Adding an offset before [wrap~] changes the phase, and inserting a multiplication before [wrap~] changes the harmonic, since the object "wraps" any incoming signal over 1 back to phase = 0 degrees. [cos~] : transforms the signal from [phasor~] to a cosine wave. Adding an offset before [cos~] changes the phase, and inserting a multiplication before [cos~] changes the harmonic, since the objects "wraps" any incoming signal over 1 back to phase = 0 degrees.
[V-operator]: function generator with variable waveshaping, scaling, phase, and uni- and bi-polar outputs
——2D SHAPE GENERATORS
[VS-basic-lissajous] : create a simple Lissajous figure [VS-sine-circle] : create a circle [VS-triangle] : create a triangle [VS-diamond] : create a diamond/square [VS-poly] : create an n-sided polygon [VS-raster] : create a horizontal, vertical, or grid raster [VS-object_2d] : read X and Y points from a textfile and draw them
[VS-scale] : scale (resize) a 2D or 3D vector shape [VS-translate] : translate (move) a 2D or 3D vector shape [VS-rotate] : rotate a 2D or 3D vector shape [VS-projector] : project 3D shapes into 2D vector space with perspective and shadow [VS-morph] : morph between two 2D vector shapes [VS-decimate] : reduce the number of points used to draw a vector shape, with or without smoothing
—-3D SHAPE GENERATORS
[VS-sphere] : create a 3D sphere of triangular faces [VS-pyramid] : create a 3D pyramid with square base [VS-cube] : create a 3D cube [VS-tetrahedron] : create a 3D tetrahedron [VS-octahedron] : create a 3D octahedron [VS-dodecahedron] : create a 3D dodecahedron [VS-icosahedron] : create a 3D icosahedron [VS-hand] : create a 3D hand shape
[VS-seeme] : plot three signals (X, Y, and brightness, for example) onto visual arrays [VS-tabreadlin~] : read a table with linear interpolation (for reading 3D objects) [VS-waveselect] : preset waveshapes for [VS-operator] [VS-gamma] : apply gamma correction to the brightness signal [VS-invert-unipolar] : invert a signal with a (0 - 1) range [VS-invert-bipolar] : invert a signal with a (-1 - 1) range [VS-blanking] : control the brightness of an object in relation to the phase of its signal [VS-tri2ramp] : transform an input triangle wave (from an analog synth for example) to a ramp
—-MULTIPLEXING (see V-multiplex-help.pd for details)
[VS-masterclock] : sets multiplexing frequency and number of multiplexed channels [VS-output] : collects multiplexed channels and sends them to the audio interface [VS-multiplex] : assigns a vector shape to one multiplexing channel [VS-brightness-crossfade] : crossfades the brightness of two multiplexed channels
—-SCAN PROCESSING (requires GEM external library!)
[VS-scanprocessor] : scan a camera input, image, or video with an input raster or other vectors
—-ILDA LASER DISPLAY OUTPUT
[VS-ilda] : to do
I would like to thank the following people and institutions for their support and encouragement of the project:
Antti Ikonen/Aalto University Media Lab (Helsinki FI) Marianne Decoster-Taivalkoski/Centre for Music & Technology of the Sibelius Academy (Helsinki FI) Jason and Debora Bernagozzi/Signal Culture (Owego NY USA) Borut Savski/Cirkulacija2 (Ljubljana SI) Lars Larsen/LZX Industries (Portland OR USA) Gisle Frøysland/Piksel (Bergen NO) Alfredo Ciannameo and Lieke Ploeger/Spektrum (Berlin DE) Svetlana Maras/Radio Belgrade Electronic Studio (Belgrade SRB) Tapio “Tassu” Takala/Aalto University Department of Computer Science (Helsinki FI) Joseph Hyde/Seeing Sound/Bath Spa University (Bath UK) Jeff Chippewa & Nicolas Bernier/Canadian Electroacoustic Community (Montreal CA) Kari Yli-Annala/AAVE Festival (Helsinki FI) Andy Farnell Ivan Marušić Klif Dave Jones Nathan Thompson Roland Lioni/Akira’s Rebirth Hansi Raber Christian Ludwig/Jerobeam Fenderson Lee Montgomery Andrew Duff Marco Donnarumma Robert Henke Chris King and finally the Video Circuits online community, without whom I never would have started down this crazy road...