{"id":4985,"date":"2017-08-04T11:01:15","date_gmt":"2017-08-04T09:01:15","guid":{"rendered":"http:\/\/macumbista.net\/?page_id=4985"},"modified":"2017-08-04T11:02:25","modified_gmt":"2017-08-04T09:02:25","slug":"vector-synthesis","status":"publish","type":"page","link":"http:\/\/macumbista.net\/?page_id=4985","title":{"rendered":"Vector Synthesis"},"content":{"rendered":"<p><a href=\"http:\/\/macumbista.net\/wp-content\/uploads\/2017\/08\/IMG_0556.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/macumbista.net\/wp-content\/uploads\/2017\/08\/IMG_0556-400x267.jpg\" alt=\"\" width=\"400\" height=\"267\" class=\"alignnone size-medium wp-image-4986\" srcset=\"http:\/\/macumbista.net\/wp-content\/uploads\/2017\/08\/IMG_0556-400x267.jpg 400w, http:\/\/macumbista.net\/wp-content\/uploads\/2017\/08\/IMG_0556-768x512.jpg 768w, http:\/\/macumbista.net\/wp-content\/uploads\/2017\/08\/IMG_0556-1024x683.jpg 1024w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<p>::::::::::VECTOR SYNTHESIS LIBRARY for PURE DATA::::::::::<\/p>\n<p><a href=\"https:\/\/github.com\/macumbista\/vectorsynthesis\" target=\"_blank\">https:\/\/github.com\/macumbista\/vectorsynthesis<\/a><\/p>\n<p>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.<\/p>\n<p>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.<\/p>\n<p>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.<\/p>\n<p>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 &#038; Woody Vasulka, which were all highly inspiration to the development of this library.<\/p>\n<p>You can see a demo video of the scan processing and 3D rotation functions here:<\/p>\n<p><iframe loading=\"lazy\" src=\"https:\/\/www.facebook.com\/plugins\/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fmacumbista%2Fvideos%2F795648800609817%2F&#038;width=400&#038;show_text=false&#038;height=224&#038;appId\" width=\"400\" height=\"224\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" allowFullScreen=\"true\"><\/iframe><\/p>\n<p>And you can see a two hour video presentation of this library here:<\/p>\n<p><iframe loading=\"lazy\" src=\"https:\/\/www.facebook.com\/plugins\/video.php?href=https%3A%2F%2Fwww.facebook.com%2Fmontse.torredamarti%2Fvideos%2F10155631922443413%2F&#038;width=400&#038;show_text=false&#038;height=225&#038;appId\" width=\"400\" height=\"225\" style=\"border:none;overflow:hidden\" scrolling=\"no\" frameborder=\"0\" allowTransparency=\"true\" allowFullScreen=\"true\"><\/iframe><\/p>\n<p><strong>REQUIREMENTS<\/strong><\/p>\n<p><em>\u2014\u2014SOFTWARE<\/em><\/p>\n<p>Pure Data 32 bit, version 0.45 or newer<br \/>\nGem 0.93.3 (OPTIONAL, used in scan processor only. Installed via deken, Pd\u2019s externals manager)<\/p>\n<p>NOTE: Gem does not run on 64 bit Pure Data, and Pd-Extended is too old for some features of this library.<\/p>\n<p><em>\u2014\u2014HARDWARE<\/em><\/p>\n<p>DC-coupled audio interface with minimum 3 output channels (5 recommended)<\/p>\n<p>Oscilloscope with X\/Y\/Z inputs (all DC-coupled)<br \/>\n\u2014or\u2014<br \/>\nVectrex game console modified for X\/Y\/Z input (all DC-coupled)<br \/>\n\u2014or\u2014<br \/>\nVector monitor with X\/Y\/Z inputs (all DC-coupled)<br \/>\n-or-<br \/>\nOscilloscope software with X\/Y\/Z inputs plus audio loopback application<\/p>\n<p>NOTE: the Z axis should control the brightness of the beam, not 3D depth<\/p>\n<p>Current development is on a MacBookPro\/OSX 10.12.6<br \/>\nOne target platform would be the BELA board with the Heavy compiler<br \/>\nScan processing with a webcam on the Raspberry Pi is also being investigated<\/p>\n<p><strong>GENERAL NOTES<\/strong><\/p>\n<p>Audio Interface Output 1 : Horizontal<br \/>\nAudio Interface Output 2 : Vertical<br \/>\nAudio Interface Output 3 : Brightness<br \/>\nAudio Interface Output 4 : Audio Left (Horizontal * Brightness, w\/ multiplexing system patches)<br \/>\nAudio Interface Output 5 : Audio Right (Vertical * Brightness, w\/ multiplexing system patches)<\/p>\n<p>Higher sampling rate = higher resolution\/fewer errors in the vector shapes<br \/>\nTested at 44.1K, 96K, 192K<\/p>\n<p>Stereo output is also usable, however there will be no brightness control.<\/p>\n<p>An AC-coupled soundcard or display will show noticeable distortions in the shape<br \/>\nand screen location of the vector shapes (they will always appear in the center).<\/p>\n<p>DC-coupling is also necessary for brightness control.<\/p>\n<p>Brightness control is essential for multiplexing, scan processing, and a<br \/>\nnumber of other interesting visual effects.<\/p>\n<p><strong>LIST OF OBJECTS<\/strong><\/p>\n<p><em>\u2014-NATIVE PD OBJECTS of NOTE<\/em><\/p>\n<p>[phasor~] : sawtooth ramp generator which goes from value 0 to value 1<br \/>\n[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 &#8220;wraps&#8221; any incoming signal over 1 back to phase = 0 degrees.<br \/>\n[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 &#8220;wraps&#8221; any incoming signal over 1 back to phase = 0 degrees.<\/p>\n<p><em>\u2014-FUNCTION GENERATORS<\/em><\/p>\n<p>[V-operator]: function generator with variable waveshaping, scaling, and uni- and bi-polar outputs<\/p>\n<p><em>\u2014\u20142D SHAPE GENERATORS<\/em><\/p>\n<p>[V-basic-lissajous] : create a simple Lissajous figure<br \/>\n[V-lissagen] : create a Lissajous figure with wave shaping and scaling options<br \/>\n[V-circle] : create a circle<br \/>\n[V-triangle] : create a triangle<br \/>\n[V-diamond] : create a diamond\/square<br \/>\n[V-poly-2D] : to do<br \/>\n[V-raster] : to do<\/p>\n<p><em>\u2014-2D VECTOR TRANSFORMATIONS<\/em><\/p>\n<p>[V-scale-2D] : scale (resize) a 2D vector shape<br \/>\n[V-translate-2D] : translate (move) a 2D vector shape<br \/>\n[V-rotate-2D] : rotate a 2D vector shape<br \/>\n[V-shear-2D] : to do<br \/>\n[V-mirror-2D] : to do<\/p>\n<p><em>\u2014-3D SHAPE GENERATORS (require [V-rotate-3D] to project onto 2D vector space)<\/em><\/p>\n<p>[V-sphere] : create a 3D sphere of triangular faces<br \/>\n[V-pyramid] : create a 3D pyramid with square base<br \/>\n[V-cube] : create a 3D cube<br \/>\n[V-tetrahedron] : create a 3D tetrahedron<br \/>\n[V-octahedron] : create a 3D octahedron<br \/>\n[V-dodecahedron] : create a 3D dodecahedron<br \/>\n[V-icosahedron] : create a 3D icosahedron<\/p>\n<p><em>\u2014-3D VECTOR TRANSFORMATIONS<\/em><\/p>\n<p>[V-scale-3D] : to do<br \/>\n[V-translate-3D] : to do<br \/>\n[V-rotate-3D] : project shapes to 3D and rotate<br \/>\n[V-shear-3D] : to do<br \/>\n[V-mirror-3D] : to do<br \/>\n[V-perspective-3D] : to do<br \/>\n[V-lighting-3D] : to do<\/p>\n<p><em>\u2014-UTILITIES<\/em><\/p>\n<p>[V-seeme~] : plot a signal onto a visual array<br \/>\n[V-tabreadlin~] : read a table with linear interpolation (for reading 3D objects)<br \/>\n[V-waveselect] : preset waveshapes for [V-operator]<br \/>\n[V-gamma] : apply gamma correction to the brightness signal<br \/>\n[V-invert-unipolar] : invert a signal with a (0 &#8211; 1) range<br \/>\n[V-invert-bipolar] : invert a signal with a (-1 &#8211; 1) range<br \/>\n[V-crossfade] : morph between two 2D vector shapes<br \/>\n[V-clip] : to do<\/p>\n<p><em>\u2014-MULTIPLEXING (see V-multiplex-help.pd for details)<\/em><\/p>\n<p>[V-masterclock] : sets multiplexing frequency and number of multiplexed channels<br \/>\n[V-output] : collects multiplexed channels and sends them to the audio interface<br \/>\n[V-multiplex] : assigns a vector shape to one multiplexing channel<br \/>\n[V-brightness-crossfade] : crossfades the brightness of two multiplexed channels<\/p>\n<p><em>\u2014-SCAN PROCESSING (requires GEM external library!)<\/em><\/p>\n<p>[V-scanprocessor] : scan a camera input, image, or video and apply it to a raster<\/p>\n<p><em>\u2014-ILDA LASER DISPLAY OUTPUT<\/em><\/p>\n<p>[V-ilda] : to do<\/p>\n<p><em>ACKNOWLEDGEMENTS<\/em><\/p>\n<p>The author also wishes to thank the following people and institutions for their support of the project:<\/p>\n<p>Aalto University Media Lab (Helsinki FI)<br \/>\nMarianne Decoster-Taivalkoski\/CMT Sibelius Academy (Helsinki FI)<br \/>\nJason and Debora Bernagozzi\/Signal Culture (Owego NY USA)<br \/>\nBorut Savski\/Cirkulacija2 (Ljubljana SI)<br \/>\nLars Larsen\/LZX Industries (Portland OR USA)<br \/>\nSpektrum (Berlin DE)<br \/>\nAndy Farnell<br \/>\nIvan Marusic Klif<br \/>\nDave Jones<br \/>\nNathan Thompson<br \/>\nRoland Lioni\/Akira\u2019s Rebirth<br \/>\nLee Montgomery <\/p>\n<p>Derek Holzer Berlin July 2017<\/p>\n","protected":false},"excerpt":{"rendered":"<p>::::::::::VECTOR SYNTHESIS LIBRARY for PURE DATA:::::::::: https:\/\/github.com\/macumbista\/vectorsynthesis 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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":370,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4985","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"http:\/\/macumbista.net\/index.php?rest_route=\/wp\/v2\/pages\/4985","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/macumbista.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/macumbista.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/macumbista.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/macumbista.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4985"}],"version-history":[{"count":6,"href":"http:\/\/macumbista.net\/index.php?rest_route=\/wp\/v2\/pages\/4985\/revisions"}],"predecessor-version":[{"id":4993,"href":"http:\/\/macumbista.net\/index.php?rest_route=\/wp\/v2\/pages\/4985\/revisions\/4993"}],"up":[{"embeddable":true,"href":"http:\/\/macumbista.net\/index.php?rest_route=\/wp\/v2\/pages\/370"}],"wp:attachment":[{"href":"http:\/\/macumbista.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4985"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}