This library allows the creation and manipulation of vector shapes using audio signals sent directly to oscilloscopes, hacked CRT monitors, Vectrex game consoles, ILDA laser displays, and oscilloscope emulation software using the Pure Data programming environment.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
00.vector_synthesis-3d_parser 2018 Jun 20, 2018
01.tables 2018 Jun 20, 2018
.gitattributes Initial commit Jul 24, 2017
.gitignore Test Jul 24, 2017
LICENSE.txt MIT Aug 14, 2018 Update Jul 16, 2018
VS-basic-lissajous-gui.pd 2018 Jun 20, 2018
VS-basic-lissajous.pd 2018 Jun 20, 2018
VS-blanking.pd 2018 Jun 20, 2018
VS-brightness-crossfade-help.pd 2018 Jun 20, 2018
VS-brightness-crossfade.pd 2018 Jun 20, 2018
VS-cube.pd 2018 Jun 20, 2018
VS-decimate-help.pd 2018 Jun 20, 2018
VS-diamond-help.pd 2018 Jun 20, 2018
VS-diamond.pd 2018 Jun 20, 2018
VS-dodecahedron.pd 2018 Jun 20, 2018
VS-hand-help.pd 2018 Jun 20, 2018
VS-hand.pd 2018 Jun 20, 2018
VS-icosahedron-help.pd 2018 Jun 20, 2018
VS-icosahedron.pd 2018 Jun 20, 2018
VS-invert-bipolar-help.pd 2018 Jun 20, 2018
VS-invert-bipolar.pd 2018 Jun 20, 2018
VS-invert-unipolar-help.pd 2018 Jun 20, 2018
VS-invert-unipolar.pd 2018 Jun 20, 2018
VS-masterclock-help.pd 2018 Jun 20, 2018
VS-masterclock.pd 2018 Jun 20, 2018
VS-morph-help.pd 2018 Jun 20, 2018
VS-morph.pd 2018 Jun 20, 2018
VS-multiplex-help.pd 2018 Jun 20, 2018
VS-multiplex.pd 2018 Jun 20, 2018
VS-object_2d.pd Manual table length not needed Jul 17, 2018
VS-octahedron-help.pd 2018 Jun 20, 2018
VS-octahedron.pd 2018 Jun 20, 2018
VS-operator-help.pd 2018 Jun 20, 2018
VS-operator.pd 2018 Jun 20, 2018
VS-output-help.pd 2018 Jun 20, 2018
VS-output.pd 2018 Jun 20, 2018
VS-projector-help.pd Clipping moved into abs Aug 14, 2018
VS-projector.pd Added clipping to output Aug 14, 2018
VS-pyramid-help.pd 2018 Jun 20, 2018
VS-pyramid.pd 2018 Jun 20, 2018
VS-raster-help.pd 2018 Jun 20, 2018
VS-rotate-help.pd 2018 Jun 20, 2018
VS-rotate.pd 2018 Jun 20, 2018
VS-scale-help.pd 2018 Jun 20, 2018
VS-scale.pd 2018 Jun 20, 2018
VS-scanprocessor-help.pd 2018 Jun 20, 2018
VS-scanprocessor.pd 2018 Jun 20, 2018
VS-seeme-help.pd 2018 Jun 20, 2018
VS-seeme.pd 2018 Jun 20, 2018
VS-sine-circle-help.pd 2018 Jun 20, 2018
VS-sphere-help.pd 2018 Jun 20, 2018
VS-sphere.pd 2018 Jun 20, 2018
VS-tabreadlin~.pd 2018 Jun 20, 2018
VS-tetrahedron-help.pd 2018 Jun 20, 2018
VS-translate-help.pd 2018 Jun 20, 2018
VS-translate.pd 2018 Jun 20, 2018
VS-tri2ramp-help.pd 2018 Jun 20, 2018
VS-tri2ramp.pd 2018 Jun 20, 2018
VS-triangle-help.pd 2018 Jun 20, 2018
VS-waveselect-help.pd 2018 Jun 20, 2018
VS-waveselect.pd 2018 Jun 20, 2018

::::::::::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)
Vectrex game console modified for X/Y/Z input (all DC-coupled)
Vector monitor with X/Y/Z inputs (all DC-coupled)
Oscilloscope software with X/Y/Z inputs such as Hansi Raber's "Oscilloscope!" app
(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.



[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


[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


[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


[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...

Derek Holzer Berlin June 2018