CINXE.COM
Fusing Analog and Digital: Jay Borgwardt’s Vinyl Music Station with TouchDesigner | Derivative
<!DOCTYPE html> <html lang="en" dir="ltr" prefix="og: http://ogp.me/ns# content: http://purl.org/rss/1.0/modules/content/ dc: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/ rdfs: http://www.w3.org/2000/01/rdf-schema# sioc: http://rdfs.org/sioc/ns# sioct: http://rdfs.org/sioc/types# skos: http://www.w3.org/2004/02/skos/core# xsd: http://www.w3.org/2001/XMLSchema#"> <head> <link rel="profile" href="http://www.w3.org/1999/xhtml/vocab" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!--[if IE]><![endif]--> <link rel="dns-prefetch" href="//www.google-analytics.com" /> <link rel="preconnect" href="//www.google-analytics.com" /> <link rel="dns-prefetch" href="//stats.g.doubleclick.net" /> <link rel="preconnect" href="//stats.g.doubleclick.net" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript">(window.NREUM||(NREUM={})).init={ajax:{deny_list:["bam.nr-data.net"]}};(window.NREUM||(NREUM={})).loader_config={licenseKey:"09021bd6f0",applicationID:"119330051"};;/*! For license information please see nr-loader-rum-1.274.0.min.js.LICENSE.txt */ (()=>{var e,t,r={8122:(e,t,r)=>{"use strict";r.d(t,{a:()=>i});var n=r(944);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.R)(3);if(!t||"object"!=typeof t)return(0,n.R)(4);const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{if(null===e[a]){r[a]=null;continue}Array.isArray(e[a])&&Array.isArray(t[a])?r[a]=Array.from(new Set([...e[a],...t[a]])):"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.R)(1,e)}return r}catch(e){(0,n.R)(2,e)}}},2555:(e,t,r)=>{"use strict";r.d(t,{Vp:()=>c,fn:()=>s,x1:()=>u});var n=r(384),i=r(8122);const o={beacon:n.NT.beacon,errorBeacon:n.NT.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){try{const t=c(e);return!!t.licenseKey&&!!t.errorBeacon&&!!t.applicationID}catch(e){return!1}}function c(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function u(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.a)(t,o);const r=(0,n.nY)(e);r&&(r.info=a[e])}},9417:(e,t,r)=>{"use strict";r.d(t,{D0:()=>g,gD:()=>h,xN:()=>p});var n=r(993);const i=e=>{if(!e||"string"!=typeof e)return!1;try{document.createDocumentFragment().querySelector(e)}catch{return!1}return!0};var o=r(2614),a=r(944),s=r(384),c=r(8122);const u="[data-nr-mask]",d=()=>{const e={mask_selector:"*",block_selector:"[data-nr-block]",mask_input_options:{color:!1,date:!1,"datetime-local":!1,email:!1,month:!1,number:!1,range:!1,search:!1,tel:!1,text:!1,time:!1,url:!1,week:!1,textarea:!1,select:!1,password:!0}};return{ajax:{deny_list:void 0,block_internal:!0,enabled:!0,harvestTimeSeconds:10,autoStart:!0},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},feature_flags:[],generic_events:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},harvest:{tooManyRequestsDelay:60},jserrors:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},logging:{enabled:!0,harvestTimeSeconds:10,autoStart:!0,level:n.p_.INFO},metrics:{enabled:!0,autoStart:!0},obfuscate:void 0,page_action:{enabled:!0},page_view_event:{enabled:!0,autoStart:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,autoStart:!0},performance:{capture_marks:!1,capture_measures:!1},privacy:{cookies_enabled:!0},proxy:{assets:void 0,beacon:void 0},session:{expiresMs:o.wk,inactiveMs:o.BB},session_replay:{autoStart:!0,enabled:!1,harvestTimeSeconds:60,preload:!1,sampling_rate:10,error_sampling_rate:100,collect_fonts:!1,inline_images:!1,fix_stylesheets:!0,mask_all_inputs:!0,get mask_text_selector(){return e.mask_selector},set mask_text_selector(t){i(t)?e.mask_selector="".concat(t,",").concat(u):""===t||null===t?e.mask_selector=u:(0,a.R)(5,t)},get block_class(){return"nr-block"},get ignore_class(){return"nr-ignore"},get mask_text_class(){return"nr-mask"},get block_selector(){return e.block_selector},set block_selector(t){i(t)?e.block_selector+=",".concat(t):""!==t&&(0,a.R)(6,t)},get mask_input_options(){return e.mask_input_options},set mask_input_options(t){t&&"object"==typeof t?e.mask_input_options={...t,password:!0}:(0,a.R)(7,t)}},session_trace:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},soft_navigations:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},spa:{enabled:!0,harvestTimeSeconds:10,autoStart:!0},ssl:void 0,user_actions:{enabled:!0}}},l={},f="All configuration objects require an agent identifier!";function g(e){if(!e)throw new Error(f);if(!l[e])throw new Error("Configuration for ".concat(e," was never set"));return l[e]}function p(e,t){if(!e)throw new Error(f);l[e]=(0,c.a)(t,d());const r=(0,s.nY)(e);r&&(r.init=l[e])}function h(e,t){if(!e)throw new Error(f);var r=g(e);if(r){for(var n=t.split("."),i=0;i<n.length-1;i++)if("object"!=typeof(r=r[n[i]]))return;r=r[n[n.length-1]]}return r}},3371:(e,t,r)=>{"use strict";r.d(t,{V:()=>f,f:()=>l});var n=r(8122),i=r(384),o=r(6154),a=r(9324);let s=0;const c={buildEnv:a.F3,distMethod:a.Xs,version:a.xv,originTime:o.WN},u={customTransaction:void 0,disabled:!1,isolatedBacklog:!1,loaderType:void 0,maxBytes:3e4,onerror:void 0,ptid:void 0,releaseIds:{},appMetadata:{},session:void 0,denyList:void 0,timeKeeper:void 0,obfuscator:void 0},d={};function l(e){if(!e)throw new Error("All runtime objects require an agent identifier!");if(!d[e])throw new Error("Runtime for ".concat(e," was never set"));return d[e]}function f(e,t){if(!e)throw new Error("All runtime objects require an agent identifier!");d[e]={...(0,n.a)(t,u),...c},Object.hasOwnProperty.call(d[e],"harvestCount")||Object.defineProperty(d[e],"harvestCount",{get:()=>++s});const r=(0,i.nY)(e);r&&(r.runtime=d[e])}},9324:(e,t,r)=>{"use strict";r.d(t,{F3:()=>i,Xs:()=>o,xv:()=>n});const n="1.274.0",i="PROD",o="CDN"},6154:(e,t,r)=>{"use strict";r.d(t,{OF:()=>c,RI:()=>i,WN:()=>d,bv:()=>o,gm:()=>a,mw:()=>s,sb:()=>u});var n=r(1863);const i="undefined"!=typeof window&&!!window.document,o="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),a=i?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),s=Boolean("hidden"===a?.document?.visibilityState),c=/iPad|iPhone|iPod/.test(a.navigator?.userAgent),u=c&&"undefined"==typeof SharedWorker,d=((()=>{const e=a.navigator?.userAgent?.match(/Firefox[/\s](\d+\.\d+)/);Array.isArray(e)&&e.length>=2&&e[1]})(),Date.now()-(0,n.t)())},1687:(e,t,r)=>{"use strict";r.d(t,{Ak:()=>c,Ze:()=>l,x3:()=>u});var n=r(7836),i=r(3606),o=r(860),a=r(2646);const s={};function c(e,t){const r={staged:!1,priority:o.P3[t]||0};d(e),s[e].get(t)||s[e].set(t,r)}function u(e,t){e&&s[e]&&(s[e].get(t)&&s[e].delete(t),g(e,t,!1),s[e].size&&f(e))}function d(e){if(!e)throw new Error("agentIdentifier required");s[e]||(s[e]=new Map)}function l(e="",t="feature",r=!1){if(d(e),!e||!s[e].get(t)||r)return g(e,t);s[e].get(t).staged=!0,f(e)}function f(e){const t=Array.from(s[e]);t.every((([e,t])=>t.staged))&&(t.sort(((e,t)=>e[1].priority-t[1].priority)),t.forEach((([t])=>{s[e].delete(t),g(e,t)})))}function g(e,t,r=!0){const o=e?n.ee.get(e):n.ee,s=i.i.handlers;if(!o.aborted&&o.backlog&&s){if(r){const e=o.backlog[t],r=s[t];if(r){for(let t=0;e&&t<e.length;++t)p(e[t],r);Object.entries(r).forEach((([e,t])=>{Object.values(t||{}).forEach((t=>{t[0]?.on&&t[0]?.context()instanceof a.y&&t[0].on(e,t[1])}))}))}}o.isolatedBacklog||delete s[t],o.backlog[t]=null,o.emit("drain-"+t,[])}}function p(e,t){var r=e[1];Object.values(t[r]||{}).forEach((t=>{var r=e[0];if(t[0]===r){var n=t[1],i=e[3],o=e[2];n.apply(i,o)}}))}},7836:(e,t,r)=>{"use strict";r.d(t,{P:()=>c,ee:()=>u});var n=r(384),i=r(8990),o=r(3371),a=r(2646),s=r(5607);const c="nr@context:".concat(s.W),u=function e(t,r){var n={},s={},d={},l=!1;try{l=16===r.length&&(0,o.f)(r).isolatedBacklog}catch(e){}var f={on:p,addEventListener:p,removeEventListener:function(e,t){var r=n[e];if(!r)return;for(var i=0;i<r.length;i++)r[i]===t&&r.splice(i,1)},emit:function(e,r,n,i,o){!1!==o&&(o=!0);if(u.aborted&&!i)return;t&&o&&t.emit(e,r,n);for(var a=g(n),c=h(e),d=c.length,l=0;l<d;l++)c[l].apply(a,r);var p=m()[s[e]];p&&p.push([f,e,r,a]);return a},get:v,listeners:h,context:g,buffer:function(e,t){const r=m();if(t=t||"feature",f.aborted)return;Object.entries(e||{}).forEach((([e,n])=>{s[n]=t,t in r||(r[t]=[])}))},abort:function(){f._aborted=!0,Object.keys(f.backlog).forEach((e=>{delete f.backlog[e]}))},isBuffering:function(e){return!!m()[s[e]]},debugId:r,backlog:l?{}:t&&"object"==typeof t.backlog?t.backlog:{},isolatedBacklog:l};return Object.defineProperty(f,"aborted",{get:()=>{let e=f._aborted||!1;return e||(t&&(e=t.aborted),e)}}),f;function g(e){return e&&e instanceof a.y?e:e?(0,i.I)(e,c,(()=>new a.y(c))):new a.y(c)}function p(e,t){n[e]=h(e).concat(t)}function h(e){return n[e]||[]}function v(t){return d[t]=d[t]||e(f,t)}function m(){return f.backlog}}(void 0,"globalEE"),d=(0,n.Zm)();d.ee||(d.ee=u)},2646:(e,t,r)=>{"use strict";r.d(t,{y:()=>n});class n{constructor(e){this.contextId=e}}},9908:(e,t,r)=>{"use strict";r.d(t,{d:()=>n,p:()=>i});var n=r(7836).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},3606:(e,t,r)=>{"use strict";r.d(t,{i:()=>o});var n=r(9908);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.d,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.d);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3878:(e,t,r)=>{"use strict";function n(e,t){return{capture:e,passive:!1,signal:t}}function i(e,t,r=!1,i){window.addEventListener(e,t,n(r,i))}function o(e,t,r=!1,i){document.addEventListener(e,t,n(r,i))}r.d(t,{DD:()=>o,jT:()=>n,sp:()=>i})},5607:(e,t,r)=>{"use strict";r.d(t,{W:()=>n});const n=(0,r(9566).bz)()},9566:(e,t,r)=>{"use strict";r.d(t,{LA:()=>s,bz:()=>a});var n=r(6154);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n.gm?.crypto||n.gm?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(30))),i.split("").map((e=>"x"===e?o(t,r++).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n.gm?.crypto||n.gm?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(e)));const a=[];for(var s=0;s<e;s++)a.push(o(r,i++).toString(16));return a.join("")}},2614:(e,t,r)=>{"use strict";r.d(t,{BB:()=>a,H3:()=>n,g:()=>u,iL:()=>c,tS:()=>s,uh:()=>i,wk:()=>o});const n="NRBA",i="SESSION",o=144e5,a=18e5,s={STARTED:"session-started",PAUSE:"session-pause",RESET:"session-reset",RESUME:"session-resume",UPDATE:"session-update"},c={SAME_TAB:"same-tab",CROSS_TAB:"cross-tab"},u={OFF:0,FULL:1,ERROR:2}},1863:(e,t,r)=>{"use strict";function n(){return Math.floor(performance.now())}r.d(t,{t:()=>n})},944:(e,t,r)=>{"use strict";function n(e,t){"function"==typeof console.debug&&console.debug("New Relic Warning: https://github.com/newrelic/newrelic-browser-agent/blob/main/docs/warning-codes.md#".concat(e),t)}r.d(t,{R:()=>n})},5284:(e,t,r)=>{"use strict";r.d(t,{t:()=>c,B:()=>s});var n=r(7836),i=r(6154);const o="newrelic";const a=new Set,s={};function c(e,t){const r=n.ee.get(t);s[t]??={},e&&"object"==typeof e&&(a.has(t)||(r.emit("rumresp",[e]),s[t]=e,a.add(t),function(e={}){try{i.gm.dispatchEvent(new CustomEvent(o,{detail:e}))}catch(e){}}({loaded:!0})))}},8990:(e,t,r)=>{"use strict";r.d(t,{I:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},6389:(e,t,r)=>{"use strict";function n(e,t=500,r={}){const n=r?.leading||!1;let i;return(...r)=>{n&&void 0===i&&(e.apply(this,r),i=setTimeout((()=>{i=clearTimeout(i)}),t)),n||(clearTimeout(i),i=setTimeout((()=>{e.apply(this,r)}),t))}}function i(e){let t=!1;return(...r)=>{t||(t=!0,e.apply(this,r))}}r.d(t,{J:()=>i,s:()=>n})},5289:(e,t,r)=>{"use strict";r.d(t,{GG:()=>o,sB:()=>a});var n=r(3878);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.sp)("load",e,t)}function a(e){if(i())return e();(0,n.DD)("DOMContentLoaded",e)}},384:(e,t,r)=>{"use strict";r.d(t,{NT:()=>o,US:()=>d,Zm:()=>a,bQ:()=>c,dV:()=>s,nY:()=>u,pV:()=>l});var n=r(6154),i=r(1863);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return n.gm.NREUM||(n.gm.NREUM={}),void 0===n.gm.newrelic&&(n.gm.newrelic=n.gm.NREUM),n.gm.NREUM}function s(){let e=a();return e.o||(e.o={ST:n.gm.setTimeout,SI:n.gm.setImmediate,CT:n.gm.clearTimeout,XHR:n.gm.XMLHttpRequest,REQ:n.gm.Request,EV:n.gm.Event,PR:n.gm.Promise,MO:n.gm.MutationObserver,FETCH:n.gm.fetch,WS:n.gm.WebSocket}),e}function c(e,t){let r=a();r.initializedAgents??={},t.initializedAt={ms:(0,i.t)(),date:new Date},r.initializedAgents[e]=t}function u(e){let t=a();return t.initializedAgents?.[e]}function d(e,t){a()[e]=t}function l(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},2843:(e,t,r)=>{"use strict";r.d(t,{u:()=>i});var n=r(3878);function i(e,t=!1,r,i){(0,n.DD)("visibilitychange",(function(){if(t)return void("hidden"===document.visibilityState&&e());e(document.visibilityState)}),r,i)}},3434:(e,t,r)=>{"use strict";r.d(t,{YM:()=>c});var n=r(7836),i=r(5607);const o="nr@original:".concat(i.W);var a=Object.prototype.hasOwnProperty,s=!1;function c(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");const a="-"===n.charAt(0);for(let s=0;s<t.length;s++){const c=t[s],u=e[c];d(u)||(e[c]=r(u,a?c+n:n,i,c,o))}},r.flag=o,r;function r(t,r,n,s,c){return d(t)?t:(r||(r=""),nrWrapper[o]=t,function(e,t,r){if(Object.defineProperty&&Object.keys)try{return Object.keys(e).forEach((function(r){Object.defineProperty(t,r,{get:function(){return e[r]},set:function(t){return e[r]=t,t}})})),t}catch(e){u([e],r)}for(var n in e)a.call(e,n)&&(t[n]=e[n])}(t,nrWrapper,e),nrWrapper);function nrWrapper(){var o,a,d,l;try{a=this,o=[...arguments],d="function"==typeof n?n(o,a):n||{}}catch(t){u([t,"",[o,a,s],d],e)}i(r+"start",[o,a,s],d,c);try{return l=t.apply(a,o)}catch(e){throw i(r+"err",[o,a,e],d,c),e}finally{i(r+"end",[o,a,l],d,c)}}}function i(r,n,i,o){if(!s||t){var a=s;s=!0;try{e.emit(r,n,i,t,o)}catch(t){u([t,r,n,i],e)}s=a}}}function u(e,t){t||(t=n.ee);try{t.emit("internal-error",e)}catch(e){}}function d(e){return!(e&&"function"==typeof e&&e.apply&&!e[o])}},993:(e,t,r)=>{"use strict";r.d(t,{ET:()=>o,p_:()=>i});var n=r(860);const i={ERROR:"ERROR",WARN:"WARN",INFO:"INFO",DEBUG:"DEBUG",TRACE:"TRACE"},o="log";n.K7.logging},3969:(e,t,r)=>{"use strict";r.d(t,{TZ:()=>n,XG:()=>s,rs:()=>i,xV:()=>a,z_:()=>o});const n=r(860).K7.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},6630:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewEvent},782:(e,t,r)=>{"use strict";r.d(t,{T:()=>n});const n=r(860).K7.pageViewTiming},6344:(e,t,r)=>{"use strict";r.d(t,{G4:()=>i});var n=r(2614);r(860).K7.sessionReplay;const i={RECORD:"recordReplay",PAUSE:"pauseReplay",REPLAY_RUNNING:"replayRunning",ERROR_DURING_REPLAY:"errorDuringReplay"};n.g.ERROR,n.g.FULL,n.g.OFF},4234:(e,t,r)=>{"use strict";r.d(t,{W:()=>o});var n=r(7836),i=r(1687);class o{constructor(e,t){this.agentIdentifier=e,this.ee=n.ee.get(e),this.featureName=t,this.blocked=!1}deregisterDrain(){(0,i.x3)(this.agentIdentifier,this.featureName)}}},7603:(e,t,r)=>{"use strict";r.d(t,{j:()=>P});var n=r(860),i=r(2555),o=r(3371),a=r(9908),s=r(7836),c=r(1687),u=r(5289),d=r(6154),l=r(944),f=r(3969),g=r(384),p=r(6344);const h=["setErrorHandler","finished","addToTrace","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId","setApplicationVersion","start",p.G4.RECORD,p.G4.PAUSE,"log","wrapLogger"],v=["setErrorHandler","finished","addToTrace","addRelease"];var m=r(1863),b=r(2614),y=r(993);var w=r(2646),A=r(3434);function R(e,t,r,n){if("object"!=typeof t||!t||"string"!=typeof r||!r||"function"!=typeof t[r])return(0,l.R)(29);const i=function(e){return(e||s.ee).get("logger")}(e),o=(0,A.YM)(i),a=new w.y(s.P);return a.level=n.level,a.customAttributes=n.customAttributes,o.inPlace(t,[r],"wrap-logger-",a),i}function E(){const e=(0,g.pV)();h.forEach((t=>{e[t]=(...r)=>function(t,...r){let n=[];return Object.values(e.initializedAgents).forEach((e=>{e&&e.api?e.exposed&&e.api[t]&&n.push(e.api[t](...r)):(0,l.R)(38,t)})),n.length>1?n:n[0]}(t,...r)}))}const x={};function _(e,t,g=!1){t||(0,c.Ak)(e,"api");const h={};var w=s.ee.get(e),A=w.get("tracer");x[e]=b.g.OFF,w.on(p.G4.REPLAY_RUNNING,(t=>{x[e]=t}));var E="api-",_=E+"ixn-";function N(t,r,n,o){const a=(0,i.Vp)(e);return null===r?delete a.jsAttributes[t]:(0,i.x1)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),j(E,n,!0,o||null===r?"session":void 0)(t,r)}function T(){}h.log=function(e,{customAttributes:t={},level:r=y.p_.INFO}={}){(0,a.p)(f.xV,["API/log/called"],void 0,n.K7.metrics,w),function(e,t,r={},i=y.p_.INFO){(0,a.p)(f.xV,["API/logging/".concat(i.toLowerCase(),"/called")],void 0,n.K7.metrics,e),(0,a.p)(y.ET,[(0,m.t)(),t,r,i],void 0,n.K7.logging,e)}(w,e,t,r)},h.wrapLogger=(e,t,{customAttributes:r={},level:i=y.p_.INFO}={})=>{(0,a.p)(f.xV,["API/wrapLogger/called"],void 0,n.K7.metrics,w),R(w,e,t,{customAttributes:r,level:i})},v.forEach((e=>{h[e]=j(E,e,!0,"api")})),h.addPageAction=j(E,"addPageAction",!0,n.K7.genericEvents),h.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,o.f)(e).customTransaction=(r||"http://custom.transaction")+t,j(E,"setPageViewName",!0)()},h.setCustomAttribute=function(e,t,r=!1){if("string"==typeof e){if(["string","number","boolean"].includes(typeof t)||null===t)return N(e,t,"setCustomAttribute",r);(0,l.R)(40,typeof t)}else(0,l.R)(39,typeof e)},h.setUserId=function(e){if("string"==typeof e||null===e)return N("enduser.id",e,"setUserId",!0);(0,l.R)(41,typeof e)},h.setApplicationVersion=function(e){if("string"==typeof e||null===e)return N("application.version",e,"setApplicationVersion",!1);(0,l.R)(42,typeof e)},h.start=()=>{try{(0,a.p)(f.xV,["API/start/called"],void 0,n.K7.metrics,w),w.emit("manual-start-all")}catch(e){(0,l.R)(23,e)}},h[p.G4.RECORD]=function(){(0,a.p)(f.xV,["API/recordReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(p.G4.RECORD,[],void 0,n.K7.sessionReplay,w)},h[p.G4.PAUSE]=function(){(0,a.p)(f.xV,["API/pauseReplay/called"],void 0,n.K7.metrics,w),(0,a.p)(p.G4.PAUSE,[],void 0,n.K7.sessionReplay,w)},h.interaction=function(e){return(new T).get("object"==typeof e?e:{})};const S=T.prototype={createTracer:function(e,t){var r={},i=this,o="function"==typeof t;return(0,a.p)(f.xV,["API/createTracer/called"],void 0,n.K7.metrics,w),g||(0,a.p)(_+"tracer",[(0,m.t)(),e,r],i,n.K7.spa,w),function(){if(A.emit((o?"":"no-")+"fn-start",[(0,m.t)(),i,o],r),o)try{return t.apply(this,arguments)}catch(e){const t="string"==typeof e?new Error(e):e;throw A.emit("fn-err",[arguments,this,t],r),t}finally{A.emit("fn-end",[(0,m.t)()],r)}}}};function j(e,t,r,i){return function(){return(0,a.p)(f.xV,["API/"+t+"/called"],void 0,n.K7.metrics,w),i&&(0,a.p)(e+t,[(0,m.t)(),...arguments],r?null:this,i,w),r?void 0:this}}function k(){r.e(296).then(r.bind(r,8778)).then((({setAPI:t})=>{t(e),(0,c.Ze)(e,"api")})).catch((e=>{(0,l.R)(27,e),w.abort()}))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{S[e]=j(_,e,void 0,g?n.K7.softNav:n.K7.spa)})),h.setCurrentRouteName=g?j(_,"routeName",void 0,n.K7.softNav):j(E,"routeName",!0,n.K7.spa),h.noticeError=function(t,r){"string"==typeof t&&(t=new Error(t)),(0,a.p)(f.xV,["API/noticeError/called"],void 0,n.K7.metrics,w),(0,a.p)("err",[t,(0,m.t)(),!1,r,!!x[e]],void 0,n.K7.jserrors,w)},d.RI?(0,u.GG)((()=>k()),!0):k(),h}var N=r(9417),T=r(8122);const S={accountID:void 0,trustKey:void 0,agentID:void 0,licenseKey:void 0,applicationID:void 0,xpid:void 0},j={};var k=r(5284);const I=e=>{const t=e.startsWith("http");e+="/",r.p=t?e:"https://"+e};let O=!1;function P(e,t={},r,n){let{init:a,info:c,loader_config:u,runtime:l={},exposed:f=!0}=t;l.loaderType=r;const p=(0,g.pV)();c||(a=p.init,c=p.info,u=p.loader_config),(0,N.xN)(e.agentIdentifier,a||{}),function(e,t){if(!e)throw new Error("All loader-config objects require an agent identifier!");j[e]=(0,T.a)(t,S);const r=(0,g.nY)(e);r&&(r.loader_config=j[e])}(e.agentIdentifier,u||{}),c.jsAttributes??={},d.bv&&(c.jsAttributes.isWorker=!0),(0,i.x1)(e.agentIdentifier,c);const h=(0,N.D0)(e.agentIdentifier),v=[c.beacon,c.errorBeacon];O||(h.proxy.assets&&(I(h.proxy.assets),v.push(h.proxy.assets)),h.proxy.beacon&&v.push(h.proxy.beacon),E(),(0,g.US)("activatedFeatures",k.B),e.runSoftNavOverSpa&&=!0===h.soft_navigations.enabled&&h.feature_flags.includes("soft_nav")),l.denyList=[...h.ajax.deny_list||[],...h.ajax.block_internal?v:[]],l.ptid=e.agentIdentifier,(0,o.V)(e.agentIdentifier,l),e.ee=s.ee.get(e.agentIdentifier),void 0===e.api&&(e.api=_(e.agentIdentifier,n,e.runSoftNavOverSpa)),void 0===e.exposed&&(e.exposed=f),O=!0}},8374:(e,t,r)=>{r.nc=(()=>{try{return document?.currentScript?.nonce}catch(e){}return""})()},860:(e,t,r)=>{"use strict";r.d(t,{$J:()=>o,K7:()=>n,P3:()=>i});const n={ajax:"ajax",genericEvents:"generic_events",jserrors:"jserrors",logging:"logging",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",softNav:"soft_navigations",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.spa]:5,[n.ajax]:6,[n.sessionTrace]:7,[n.softNav]:8,[n.sessionReplay]:9,[n.logging]:10,[n.genericEvents]:11},o={[n.pageViewTiming]:"events",[n.ajax]:"events",[n.spa]:"events",[n.softNav]:"events",[n.metrics]:"jserrors",[n.jserrors]:"jserrors",[n.sessionTrace]:"browser/blobs",[n.sessionReplay]:"browser/blobs",[n.logging]:"browser/logs",[n.genericEvents]:"ins"}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>"nr-rum-1.274.0.min.js",i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA-1.274.0.PROD:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d<u.length;d++){var l=u[d];if(l.getAttribute("src")==r||l.getAttribute("data-webpack")==t+o){s=l;break}}if(!s){c=!0;var f={296:"sha512-gkYkZDAwQ9PwaDXs2YM+rNIdRej1Ac1mupWobRJ8eahQcXz6/sunGZCKklrzi5kWxhOGRZr2tn0rEKuLTXzfAA=="};(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",t+o),s.src=r,0!==s.src.indexOf(window.location.origin+"/")&&(s.crossOrigin="anonymous"),f[a]&&(s.integrity=f[a])}e[r]=[n];var g=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},p=setTimeout(g.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=g.bind(null,s.onerror),s.onload=g.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.p="https://js-agent.newrelic.com/",(()=>{var e={840:0,374:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u<a.length;u++)o=a[u],i.o(e,o)&&e[o]&&e[o][0](),e[o]=0},r=self["webpackChunk:NRBA-1.274.0.PROD"]=self["webpackChunk:NRBA-1.274.0.PROD"]||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),(()=>{"use strict";i(8374);var e=i(944),t=i(6344),r=i(9566);class n{agentIdentifier;constructor(e=(0,r.LA)(16)){this.agentIdentifier=e}#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}addPageAction(e,t){return this.#e("addPageAction",e,t)}setPageViewName(e,t){return this.#e("setPageViewName",e,t)}setCustomAttribute(e,t,r){return this.#e("setCustomAttribute",e,t,r)}noticeError(e,t){return this.#e("noticeError",e,t)}setUserId(e){return this.#e("setUserId",e)}setApplicationVersion(e){return this.#e("setApplicationVersion",e)}setErrorHandler(e){return this.#e("setErrorHandler",e)}addRelease(e,t){return this.#e("addRelease",e,t)}log(e,t){return this.#e("log",e,t)}}class o extends n{#e(t,...r){if("function"==typeof this.api?.[t])return this.api[t](...r);(0,e.R)(35,t)}start(){return this.#e("start")}finished(e){return this.#e("finished",e)}recordReplay(){return this.#e(t.G4.RECORD)}pauseReplay(){return this.#e(t.G4.PAUSE)}addToTrace(e){return this.#e("addToTrace",e)}setCurrentRouteName(e){return this.#e("setCurrentRouteName",e)}interaction(){return this.#e("interaction")}wrapLogger(e,t,r){return this.#e("wrapLogger",e,t,r)}}var a=i(860),s=i(9417);const c=Object.values(a.K7);function u(e){const t={};return c.forEach((r=>{t[r]=function(e,t){return!0===(0,s.gD)(t,"".concat(e,".enabled"))}(r,e)})),t}var d=i(7603);var l=i(1687),f=i(4234),g=i(5289),p=i(6154),h=i(384);const v=e=>p.RI&&!0===(0,s.gD)(e,"privacy.cookies_enabled");function m(e){return!!(0,h.dV)().o.MO&&v(e)&&!0===(0,s.gD)(e,"session_trace.enabled")}var b=i(6389);class y extends f.W{constructor(e,t,r=!0){super(e.agentIdentifier,t),this.auto=r,this.abortHandler=void 0,this.featAggregate=void 0,this.onAggregateImported=void 0,!1===e.init[this.featureName].autoStart&&(this.auto=!1),this.auto?(0,l.Ak)(e.agentIdentifier,t):this.ee.on("manual-start-all",(0,b.J)((()=>{(0,l.Ak)(e.agentIdentifier,this.featureName),this.auto=!0,this.importAggregator(e)})))}importAggregator(t,r={}){if(this.featAggregate||!this.auto)return;let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let o;try{if(v(this.agentIdentifier)){const{setupAgentSession:e}=await i.e(296).then(i.bind(i,3861));o=e(t)}}catch(t){(0,e.R)(20,t),this.ee.emit("internal-error",[t]),this.featureName===a.K7.sessionReplay&&this.abortHandler?.()}try{if(t.sharedAggregator)await t.sharedAggregator;else{t.sharedAggregator=i.e(296).then(i.bind(i,9337));const{EventAggregator:e}=await t.sharedAggregator;t.sharedAggregator=new e}if(!this.#t(this.featureName,o))return(0,l.Ze)(this.agentIdentifier,this.featureName),void n(!1);const{lazyFeatureLoader:e}=await i.e(296).then(i.bind(i,6103)),{Aggregate:a}=await e(this.featureName,"aggregate");this.featAggregate=new a(t,r),n(!0)}catch(t){(0,e.R)(34,t),this.abortHandler?.(),(0,l.Ze)(this.agentIdentifier,this.featureName,!0),n(!1),this.ee&&this.ee.abort()}};p.RI?(0,g.GG)((()=>o()),!0):o()}#t(e,t){switch(e){case a.K7.sessionReplay:return m(this.agentIdentifier)&&!!t;case a.K7.sessionTrace:return!!t;default:return!0}}}var w=i(6630);class A extends y{static featureName=w.T;constructor(e,t=!0){super(e,w.T,t),this.importAggregator(e)}}var R=i(9908),E=i(2843),x=i(3878),_=i(782),N=i(1863);class T extends y{static featureName=_.T;constructor(e,t=!0){super(e,_.T,t),p.RI&&((0,E.u)((()=>(0,R.p)("docHidden",[(0,N.t)()],void 0,_.T,this.ee)),!0),(0,x.sp)("pagehide",(()=>(0,R.p)("winPagehide",[(0,N.t)()],void 0,_.T,this.ee))),this.importAggregator(e))}}var S=i(3969);class j extends y{static featureName=S.TZ;constructor(e,t=!0){super(e,S.TZ,t),this.importAggregator(e)}}new class extends o{constructor(t,r){super(r),p.gm?(this.features={},(0,h.bQ)(this.agentIdentifier,this),this.desiredFeatures=new Set(t.features||[]),this.desiredFeatures.add(A),this.runSoftNavOverSpa=[...this.desiredFeatures].some((e=>e.featureName===a.K7.softNav)),(0,d.j)(this,t,t.loaderType||"agent"),this.run()):(0,e.R)(21)}get config(){return{info:this.info,init:this.init,loader_config:this.loader_config,runtime:this.runtime}}run(){try{const t=u(this.agentIdentifier),r=[...this.desiredFeatures];r.sort(((e,t)=>a.P3[e.featureName]-a.P3[t.featureName])),r.forEach((r=>{if(!t[r.featureName]&&r.featureName!==a.K7.pageViewEvent)return;if(this.runSoftNavOverSpa&&r.featureName===a.K7.spa)return;if(!this.runSoftNavOverSpa&&r.featureName===a.K7.softNav)return;const n=function(e){switch(e){case a.K7.ajax:return[a.K7.jserrors];case a.K7.sessionTrace:return[a.K7.ajax,a.K7.pageViewEvent];case a.K7.sessionReplay:return[a.K7.sessionTrace];case a.K7.pageViewTiming:return[a.K7.pageViewEvent];default:return[]}}(r.featureName).filter((e=>!(e in this.features)));n.length>0&&(0,e.R)(36,{targetFeature:r.featureName,missingDependencies:n}),this.features[r.featureName]=new r(this)}))}catch(t){(0,e.R)(22,t);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,h.Zm)();delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.features,delete this.sharedAggregator;return r.ee.get(this.agentIdentifier).abort(),!1}}}({features:[A,T,j],loaderType:"lite"})})()})();</script> <meta about="/tags/installation" typeof="skos:Concept" property="rdfs:label skos:prefLabel" content="Installation" /> <link rel="shortcut icon" href="https://derivative.ca/sites/all/themes/derivative2017/favicon.ico" type="image/vnd.microsoft.icon" /> <meta name="description" content="Vinyl enthusiast and media artist Jay Borgwardt has taken his love for analog music to the next level with the creation of the Vinyl Music Station. Originally designed as a simple informational display to showcase the album currently playing in his record store, the project evolved into an elegant system blending both analog and digital music experiences. Using TouchDesigner," /> <meta name="keywords" content="Audiovisual, Data Visualization, music, vinyl, Interactive, Installation" /> <meta name="generator" content="Drupal 7 (https://www.drupal.org)" /> <link rel="image_src" href="https://derivative-devforum-backups.s3.us-east-2.amazonaws.com/static/manifest512.png" /> <link rel="canonical" href="https://derivative.ca/community-post/fusing-analog-and-digital-jay-borgwardt%E2%80%99s-vinyl-music-station-touchdesigner/70165" /> <link rel="shortlink" href="https://derivative.ca/node/70165" /> <meta property="og:site_name" content="Derivative" /> <meta property="og:type" content="article" /> <meta property="og:url" content="https://derivative.ca/community-post/fusing-analog-and-digital-jay-borgwardt%E2%80%99s-vinyl-music-station-touchdesigner/70165" /> <meta property="og:title" content="Fusing Analog and Digital: Jay Borgwardt’s Vinyl Music Station with TouchDesigner" /> <meta property="og:description" content="Vinyl enthusiast and media artist Jay Borgwardt has taken his love for analog music to the next level with the creation of the Vinyl Music Station. Originally designed as a simple informational display to showcase the album currently playing in his record store, the project evolved into an elegant system blending both analog and digital music experiences. Using TouchDesigner, which drives all of his projects he says, Borgwardt’s station features four main components: an album database, vinyl recognition, an audio visualizer, and end sensor playback." /> <meta property="og:updated_time" content="2024-09-24T12:14:15-04:00" /> <meta property="og:image" content="https://derivative.ca/sites/default/files/styles/og_image/public/field/image/VRS.JPEG" /> <meta property="og:image:type" content="image/jpeg" /> <meta property="og:image:secure_url" content="https://derivative-devforum-backups.s3.us-east-2.amazonaws.com/static/manifest512.png" /> <meta property="og:image:width" content="1200" /> <meta property="og:image:height" content="630" /> <meta property="article:author" content="https://www.facebook.com/isabelle.rousset" /> <meta property="article:tag" content="Audiovisual" /> <meta property="article:tag" content="Data Visualization" /> <meta property="article:tag" content="music" /> <meta property="article:tag" content="vinyl" /> <meta property="article:tag" content="Interactive" /> <meta property="article:tag" content="Installation" /> <meta property="article:published_time" content="2024-09-09T13:15:00-04:00" /> <meta property="article:modified_time" content="2024-09-24T12:14:15-04:00" /> <meta itemprop="name" content="Fusing Analog and Digital: Jay Borgwardt’s Vinyl Music Station with TouchDesigner" /> <meta itemprop="description" content="Vinyl enthusiast and media artist Jay Borgwardt has taken his love for analog music to the next level with the creation of the Vinyl Music Station. Originally designed as a simple informational display to showcase the album currently playing in his record store, the project evolved into an elegant system blending both analog and digital music experiences. Using TouchDesigner, which drives all of his projects he says, Borgwardt’s station features four main components: an album database, vinyl recognition, an audio visualizer, and end sensor playback." /> <title>Fusing Analog and Digital: Jay Borgwardt’s Vinyl Music Station with TouchDesigner | Derivative</title> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__9cWqptSUNYq5YedfIwh33VxtugFVWjDdEsblT8GhLKI__quUjyhSfbEukHj8a0hYvzm9VTmPALmSZvA0xfM_Oxzo__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__umS_7iB8OLqD-AIc28jz7stMtgRnPBrMHXbg802aJVI__42_FYiRnR5OQaV2U3Sr9cY21EIjnMGdJsPXMEFLQPCo__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__T7twZATSz9YDtA4CEs3XoRq-lmvsWC1-9rzLrGpoWuY__jYMOyCwkeeWX4KvLeu7GhjzHVkW5HDKp2hWWBDkyRSE__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__h3o5SsIeYDjeYwWuITpy06v8c6WOBFF_caVfOD5h1f0__ZsLGPx-kmWjlNCh4cPgAj41gw9yYOn00M7G5ddPHXyU__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__e3GI6WYIorn4GgDovKROICmgCalUEGUxXa6BAN_x15c__xuWYXUTjyghfXbZeOb7naFNx-DXu39CgrIPpmWyZanQ__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__Irf_gwb-Pq8mHOWu1TP1HcgM0-G_n2aM6hh2T7HrP9w__wq2cMTqH2xzpUaajNK-ntVjmRA-Umb0bp3Uq5h5tINo__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__JYcid99Dh1MsM1THpjKWy47KqpsDB4PXynpoWHDem4Y__471xsXpLPlEbqMPjU6spfxWd0YORHhAibok4rb_-0fY__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__kg7S0dNHB51gTPALGAOAOThnISlBjTi_y7Sso2n2qOg__BTWp3W9drSse25DdWVDqOTveyoc3yVq9LWdACeGI4Aw__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__tqIxnlnU0Bh0Gt7-nJnf2DRtVQeTvgNc_6dtDjT-duM__z2rU7fZTDjjCGnKFEzXmazWHGwx24Jku9Y5h1G9Exng__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__K8R0FVWF0gKju1B8h9vC5S2yU4FJ5AZbgBzm0rhrpkc__Lf77875HmDgWXlnw7h4mr4mZ7tYhxCC_kbLRCdDA4dk__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__XTN3wnKEfUHYyRdXdw0jmHnzYJSJIFt7-CwN0OXywgU__gA6_ws_9qa4vpd-XZcPj1P1kD248PDfOpzGW48piTTE__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__OyUNCcm0pzFxmVPYJ3JvI5TUiAoDARos5c4b3xqdAvU__XjCwnLChLPuJ4Q_xva9z2IRXtXmv1MGS3JoOvYtJyx0__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__vl5p-vm_LgZkqJ6rMgayC5ZepiCcbAzgKcsUY7bKgVc__OfEmzeElbttcCQ7UIoCtH9xAb06atbwrl10eXPTNzLE__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__XEflqfFnBJdRX4lOgu7ukxEXvKtdC7LJQxdKtfeaRSk__39-M3V13QtXdXnJIFcqRXxNOH7O0DEAQwAhW2MWdxtY__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__2nmGSuuQxj_U7XTUt2xK3L_uOiI8LHdTW3lYFmO3xOY__wNTjsCVaNUtW_xprV2prfu5CjND7JX5FfC9Ze4uXxg8__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__WXbUgQkEDqAzBSpe8KJnXLX-0wb8Jpn4x5DHn96CkKk__lWAnp5Wbp0FAk1C_53CgvupgjctL1wGmT9bQH-lmFb8__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__xi81ZFFbLe7OT9HZyl9hLKmKk4nwzr1wH46mOmDjDUk__ZPcMDjra5fE20CWLF53yfluDpyT8tbIfsdBBO63Mk1I__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__Pq59485DVDHvSuDFisvJhcZqQST88l-Fp67fJdjVhl0__O-_GJqywnCNjtB9B1G8FQg8hIHFx3o94l9oizjpfqxw__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__A4nWcEt2qXbYnCh8TbImL_OY7ybaQqcUsqpteHdTsZg__PyvgPoxDvNeSiJIAwb21USXn9kQ-1eFBQHwCa0CXjtE__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__aDmsXnS9nDtiIjKhJr6DO2QDd9zuPAzCTzNVj41P1OE__miA14pYz5B1nyM1nXUhC1I4rwelBrBxEdntPfvodDHs__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__wbOLwwT4ggEIYTDBVV6imZqW9XqOK61pJiE2wL9cWZk__DRK3ioou7Skzy3BGUXOLcEhQGmaNb7In3Q2FZXDHAjc__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__AANeiFOKBX4OJG4wr7z9PRp5CV_TdnSoh7dDBBg7JVo__xvuN6n3RHn_sSNn6ysoEThbqLl2GFLJVxejEXF_3MyU__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <link type="text/css" rel="stylesheet" href="/sites/default/files/advagg_css/css__3u4yW5medfqMiN3ojzK0HNc607zQKSIKq35kQ1V70bY__Lw-p7AKX98HUkEcJJaHVNpVm6mShGUXXGVT49uFWrxg__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.css" media="all" /> <!-- HTML5 element support for IE6-8 --> <!--[if lt IE 9]> <script src="https://cdn.jsdelivr.net/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script> <![endif]--> <script type="text/javascript" src="/sites/default/files/advagg_js/js__GGZYAFV0PjdzQz9f7_sae2X6RB71T2IdTQ2iXDY_YzQ__pSJpfoX1hTB7CZe3KSLXW9a_rycYrbOoybY4RVB4XnU__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__ZyeOaiFuDejQQbhUV7yg7atYZnj4WLfH77o0scv4068__jeShjS1-sEwOx4dbB-NSBsCnxWfNslS1Nkgx4CZngGA__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__d8YFQ13JpfVF56BRJwLrqD_KtZUvRRj0RsEVDiGDTz4__b7VB3alskoA84lukUN1eBgtjmRLB2FZjoMM_8oo5xpE__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__RPyYfJ4hDepGgZWtp1VbdI9yRaaKhnupkp97kCqBx00___VKZphQ1g0R1q7NLg3c5j8TW51VAlZJ6OKVG4z51ylM__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__iOipSAIF1_CaPdSLQHns7vi2cq1ouQNDyYbFlVsz4g0__-uaS-kYWu4pXHWRYqGhY35qqwJvOshK48djBLHhrVvo__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__v6Ydsa-oLVsCbWBUPEs_rmv-EgYK35mJXlwzszDg2io__NcbPgl6yce1cPkJcub1SVldKst10pVo0nN36XtkHZn8__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__6__IQ9wfCOnkxxh3-xBv65bwhmZoNtcwHNnhprahFvw__JiTknG935-WORDUVnvwp_OgAgDnyJVjXiT5MkO5L2LY__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__OXJtpT2qiwXmfJjZkFvsqPZLv32HtZxKQx02FTw1fC0__1ka0o3LhIWopQcwAuO0wndkDQ3wKYhmcVSF1n-bGjGs__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__YT6D1B_BKxvm6JCH_t9sZNI5L6yITa_DlU5QcSlOkAU__OXobH7d1IP1o3WABlniIrU_-pcJacVSIPUv9bpD-6pQ__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__bFOh74rblCNfeAqBWGqF603OXHEBWOI8xUWm9gk-Mnw__WRsh3RAG-_KLWXWdUSL4k-yHTn1vu2dbvluPCCmj_wc__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js___jCO6jjlyBQMmFHUmvP_NSVy0hA13AhQtRDOhuK0c2I__mHl-1Yoe5tzA6N5zJ2UiSBDCA3KINLCiVLTFydNHc1g__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__2bzbrE24coPm5uj_fnejfHFhxP4MnERSax237TPs4fw__xUQRNikeM1o2gO7zLzoZfpxNU6-SwDqDl87Wmnq5Q0M__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__xhAAtfYpatnaolQln2dAxiO-Olrkj_jcdZVGXoDqMM4__2bYsKd2u06uYEKPT2l4xKZYQiMbo1w1s1LDiUp-kmho__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__CajjMgHTE1PwscR_Jluzv5MrC9NzoWq9mLHWtwesgIo__mrArwSTL6Ys68_y7Bl6G-QfcTe_19aanxfiq3UfUwwQ__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__UB69oxPLMBmbz4b3jEENdISvapD9LZ87bFrqNhcpks4__zUM1n6eCAkL3_yAAxw7ntL4cyqUeGytp3qhh_ysxf_M__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js___NGCdu7rYCr6cF2Wxmds5GIh39sMll_jBgW6RT5XF6E__JSb7-gLqxD0cMKrlszcZ3N45nBVLrlpnwyT_sewwHtk__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__fDZsF5a1RiJQd_onypqDjQiDGdw1cpdzm8E6T1xD2GI__S9icZkbVWJBSelCZUCxTMLdUXXcOfzCvIZP1TSbP8wc__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__yX7zWDMGkJfI-jBOBj0KlfktW_CDoNWNdq_AfFqn7LM__jS9RV2UqMEg6Fsy_NpcVlliI_ZUcKOQ-kw1fODxrczU__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__0XOr23_EKRbzs9mLhdghfqrCFnXnGcF8nofn5LTILvo__N1PATp9aCLwlI4qITXqUy4-Bw5aD0OxGn-SqDsZujqA__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__ZN1xq7EL5wnAUDUfheBq9wpBnvVD94Bu10ZpR9jnDxc__mULqY-1fv9p6OELSA36cq9PkyqHeupEMgk-HNMKHNlo__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__-TcCuty2z9TPO2Ss8jRxdh_txCyngrnqO_eXNMbwNx8__jESXDck0iVc7x1d3aictzl2HhIXKNaOtQeOPdLFucW4__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__OOBeaxfDBlQtrDaHEWcs3ioZX1ruV4PYVsSB1ATMHuM__IbAz8sCskEzznmyxLQDk4-QJ1B7kNIQvJp2hWBVTmJc__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- (function(i,s,o,r){i["GoogleAnalyticsObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date()})(window,document,"script","ga");ga("create", "UA-3123499-3", {"cookieDomain":"auto"});ga("set", "anonymizeIp", true);ga("send", "pageview"); //--><!]]> </script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__RvLVKOnTdQO4VBlh8z2t4GJAwCACZ-707Dk1YziIbCw__JoU2pGtFZeW8LW33wp5ibt4-t2X5DVrPOqeTZvgfPiY__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js" defer="defer" async="async"></script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__XOTZ8191sv5rhP1z3jxbZSAWGYBemQy8tWkdOVbO5Bw__J7Eh1ZlkNeYnIVrcT2WNeqh-L_3egcmlQYJeNhT-NQM__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- window.a2a_config=window.a2a_config||{};window.da2a={done:false,html_done:false,script_ready:false,script_load:function(){var a=document.createElement('script'),s=document.getElementsByTagName('script')[0];a.type='text/javascript';a.async=true;a.src='https://static.addtoany.com/menu/page.js';s.parentNode.insertBefore(a,s);da2a.script_load=function(){};},script_onready:function(){da2a.script_ready=true;if(da2a.html_done)da2a.init();},init:function(){for(var i=0,el,target,targets=da2a.targets,length=targets.length;i<length;i++){el=document.getElementById('da2a_'+(i+1));target=targets[i];a2a_config.linkname=target.title;a2a_config.linkurl=target.url;if(el){a2a.init('page',{target:el});el.id='';}da2a.done=true;}da2a.targets=[];}};(function ($){Drupal.behaviors.addToAny = {attach: function (context, settings) {if (context !== document && window.da2a) {if(da2a.script_ready)a2a.init_all();da2a.script_load();}}}})(jQuery);a2a_config.callbacks=a2a_config.callbacks||[];a2a_config.callbacks.push({ready:da2a.script_onready});a2a_config.overlays=a2a_config.overlays||[];a2a_config.templates=a2a_config.templates||{};var a2a_config = a2a_config || {}; a2a_config.icon_color = "#000"; //--><!]]> </script> <script type="text/javascript" src="/sites/default/files/advagg_js/js___IdfM1iG0aw2ykXppcZLkoj8qxoxTVmHVLtkNoDXwq4__731L0hexzidsqlG3Bh_WiU2FMwnA31WBKbfyHMwfraI__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- jQuery.extend(Drupal.settings,{"basePath":"\/","pathPrefix":"","setHasJsCookie":1,"ajaxPageState":{"theme":"derivative2017","theme_token":"pRIfnMJwTwJeiDzWGkfehixJOA-SJGkjzSCUnVGwb3E","jquery_version":"2.1","css":{"modules\/system\/system.base.css":1,"misc\/ui\/jquery.ui.core.css":1,"misc\/ui\/jquery.ui.theme.css":1,"sites\/all\/modules\/contrib\/colorbox_node\/colorbox_node.css":1,"modules\/field\/theme\/field.css":1,"modules\/node\/node.css":1,"sites\/all\/modules\/contrib\/workflow\/workflow_admin_ui\/workflow_admin_ui.css":1,"sites\/all\/modules\/contrib\/extlink\/extlink.css":1,"sites\/all\/modules\/contrib\/views\/css\/views.css":1,"sites\/all\/modules\/contrib\/ckeditor\/css\/ckeditor.css":1,"sites\/all\/modules\/contrib\/media\/modules\/media_wysiwyg\/css\/media_wysiwyg.base.css":1,"sites\/all\/modules\/contrib\/colorbox\/styles\/default\/colorbox_style.css":1,"sites\/all\/modules\/contrib\/ctools\/css\/ctools.css":1,"sites\/all\/modules\/contrib\/geshifilter\/geshifilter.css":1,"sites\/all\/modules\/contrib\/ctools\/css\/modal.css":1,"sites\/all\/modules\/contrib\/modal_forms\/css\/modal_forms_popup.css":1,"sites\/all\/libraries\/jgrowl\/jquery.jgrowl.min.css":1,"sites\/all\/modules\/contrib\/nicemessages\/css\/nicemessages_positions.css":1,"sites\/all\/modules\/contrib\/nicemessages\/css\/nicemessages_jgrowl.css":1,"sites\/all\/modules\/contrib\/nicemessages\/css\/shadows.css":1,"sites\/all\/modules\/contrib\/panels\/css\/panels.css":1,"sites\/all\/modules\/custom\/derivative_ckeditor\/derivative_ckeditor.css":1,"sites\/all\/modules\/contrib\/addtoany\/addtoany.css":1,"sites\/all\/libraries\/fontawesome\/css\/font-awesome.css":1,"sites\/all\/libraries\/superfish\/css\/superfish.css":1,"sites\/all\/libraries\/superfish\/css\/superfish-vertical.css":1,"sites\/all\/libraries\/superfish\/css\/superfish-smallscreen.css":1,"sites\/all\/themes\/derivative2017\/css\/style.css":1},"js":{"modules\/statistics\/statistics.js":1,"sites\/all\/themes\/bootstrap\/js\/bootstrap.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/jquery\/2.1\/jquery.min.js":1,"misc\/jquery-extend-3.4.0.js":1,"misc\/jquery-html-prefilter-3.5.0-backport.js":1,"misc\/jquery.once.js":1,"misc\/drupal.js":1,"sites\/all\/modules\/contrib\/equalheights\/jquery.equalheights.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.core.min.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.effect.min.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/ui\/external\/jquery.cookie.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/jquery.form\/4\/jquery.form.min.js":1,"sites\/all\/modules\/contrib\/jquery_update\/replace\/ui\/ui\/minified\/jquery.ui.effect-slide.min.js":1,"misc\/form-single-submit.js":1,"misc\/ajax.js":1,"sites\/all\/modules\/contrib\/jquery_update\/js\/jquery_update.js":1,"sites\/all\/modules\/contrib\/equalheights\/equalheights.js":1,"sites\/all\/modules\/contrib\/extlink\/extlink.js":1,"sites\/all\/modules\/contrib\/authcache\/authcache.js":1,"sites\/all\/libraries\/colorbox\/jquery.colorbox-min.js":1,"sites\/all\/modules\/contrib\/colorbox\/js\/colorbox.js":1,"sites\/all\/modules\/contrib\/colorbox\/styles\/default\/colorbox_style.js":1,"sites\/all\/modules\/contrib\/colorbox\/js\/colorbox_load.js":1,"sites\/all\/themes\/bootstrap\/js\/misc\/_progress.js":1,"sites\/all\/modules\/contrib\/ctools\/js\/modal.js":1,"sites\/all\/modules\/contrib\/modal_forms\/js\/modal_forms_popup.js":1,"sites\/all\/libraries\/jgrowl\/jquery.jgrowl.min.js":1,"sites\/all\/modules\/contrib\/nicemessages\/js\/nicemessages.js":1,"sites\/all\/modules\/contrib\/better_exposed_filters\/better_exposed_filters.js":1,"misc\/autocomplete.js":1,"sites\/all\/modules\/sandbox\/search_api_live_results\/js\/search_api_live_results.js":1,"sites\/all\/modules\/contrib\/ctools\/js\/auto-submit.js":1,"sites\/all\/modules\/custom\/derivative_search\/js\/derivative_search.js":1,"sites\/all\/libraries\/imagesloaded\/jquery.imagesloaded.min.js":1,"sites\/all\/modules\/contrib\/google_analytics\/googleanalytics.js":1,"sites\/default\/files\/advagg_relocate\/https-www.google-analytics.com-analytics.js":1,"sites\/all\/modules\/contrib\/authcache\/modules\/authcache_menu\/authcache_menu.js":1,"sites\/all\/modules\/contrib\/field_group\/field_group.js":1,"misc\/form.js":1,"sites\/all\/themes\/bootstrap\/js\/misc\/_collapse.js":1,"sites\/all\/modules\/contrib\/colorbox_node\/colorbox_node.js":1,"sites\/all\/libraries\/superfish\/sftouchscreen.js":1,"sites\/all\/libraries\/superfish\/jquery.hoverIntent.minified.js":1,"sites\/all\/libraries\/superfish\/sfsmallscreen.js":1,"sites\/all\/libraries\/superfish\/supposition.js":1,"sites\/all\/libraries\/superfish\/superfish.js":1,"sites\/all\/libraries\/superfish\/supersubs.js":1,"sites\/all\/modules\/contrib\/superfish\/superfish.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/affix.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/alert.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/button.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/carousel.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/collapse.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/dropdown.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/modal.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/tooltip.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/popover.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/scrollspy.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/tab.js":1,"sites\/all\/themes\/derivative2017\/bootstrap\/assets\/javascripts\/bootstrap\/transition.js":1,"sites\/all\/themes\/derivative2017\/vendor\/uikit\/js\/uikit.min.js":1,"sites\/all\/themes\/derivative2017\/js\/jquery.matchHeight.js":1,"sites\/all\/themes\/derivative2017\/js\/jquery.uniform.standalone.js":1,"sites\/all\/themes\/derivative2017\/js\/jquery.details.min.js":1,"sites\/all\/themes\/derivative2017\/js\/derivative.filters.js":1,"sites\/all\/themes\/derivative2017\/js\/derivative.js":1,"sites\/all\/themes\/derivative2017\/js\/derivative.magic-line.js":1,"sites\/all\/themes\/derivative2017\/js\/derivative-discrourse-comments.js":1,"sites\/all\/themes\/derivative2017\/js\/frontSlideshow.js":1,"sites\/all\/themes\/derivative2017\/js\/gridListToggle.js":1,"sites\/all\/themes\/derivative2017\/js\/header-search-block.js":1,"sites\/all\/themes\/derivative2017\/js\/node-teaser.js":1,"sites\/all\/themes\/derivative2017\/js\/scrollAnimation.js":1,"sites\/all\/themes\/derivative2017\/js\/site-status.js":1,"sites\/all\/themes\/derivative2017\/js\/svgReplace.js":1,"sites\/all\/themes\/derivative2017\/js\/ctools-modal.js":1,"sites\/all\/themes\/derivative2017\/js\/licenses-page.js":1,"sites\/all\/themes\/derivative2017\/js\/features_img_credits.js":1,"sites\/all\/themes\/derivative2017\/js\/derivative-fixedScroll.js":1,"sites\/all\/themes\/derivative2017\/js\/derivative-releases-archive.js":1,"sites\/all\/themes\/bootstrap\/js\/misc\/autocomplete.js":1,"sites\/all\/themes\/bootstrap\/js\/misc\/ajax.js":1}},"authcache":{"q":"node\/70165","cp":{"path":"\/","domain":".derivative.ca","secure":true},"cl":23.14814814814815},"colorbox":{"opacity":"0.85","current":"{current} of {total}","previous":"\u00ab Prev","next":"Next \u00bb","close":"Close","maxWidth":"98%","maxHeight":"98%","fixed":true,"mobiledetect":false,"mobiledevicewidth":"480px"},"CToolsModal":{"loadingText":"Loading...","closeText":"Close Window","closeImage":"\u003Cimg typeof=\u0022foaf:Image\u0022 class=\u0022img-responsive\u0022 src=\u0022https:\/\/derivative.ca\/sites\/all\/modules\/contrib\/ctools\/images\/icon-close-window.png\u0022 alt=\u0022Close window\u0022 title=\u0022Close window\u0022 \/\u003E","throbber":"\u003Cimg typeof=\u0022foaf:Image\u0022 class=\u0022img-responsive\u0022 src=\u0022https:\/\/derivative.ca\/sites\/all\/modules\/contrib\/ctools\/images\/throbber.gif\u0022 alt=\u0022Loading\u0022 title=\u0022Loading...\u0022 \/\u003E"},"modal-popup-small":{"modalSize":{"type":"fixed","width":300,"height":300},"modalOptions":{"opacity":1,"background-color":"#000"},"animation":"fadeIn","modalTheme":"ModalFormsPopup","throbber":"\u003Cimg typeof=\u0022foaf:Image\u0022 class=\u0022img-responsive\u0022 src=\u0022https:\/\/derivative.ca\/sites\/all\/modules\/contrib\/modal_forms\/images\/loading_animation.gif\u0022 alt=\u0022Loading...\u0022 title=\u0022Loading\u0022 \/\u003E","closeText":"Close"},"modal-popup-medium":{"modalSize":{"type":"fixed","width":550,"height":450},"modalOptions":{"opacity":1,"background-color":"#000"},"animation":"fadeIn","modalTheme":"ModalFormsPopup","throbber":"\u003Cimg typeof=\u0022foaf:Image\u0022 class=\u0022img-responsive\u0022 src=\u0022https:\/\/derivative.ca\/sites\/all\/modules\/contrib\/modal_forms\/images\/loading_animation.gif\u0022 alt=\u0022Loading...\u0022 title=\u0022Loading\u0022 \/\u003E","closeText":"Close"},"modal-popup-large":{"modalSize":{"type":"scale","width":1,"height":1},"modalOptions":{"opacity":1,"background-color":"#000"},"animation":"fadeIn","modalTheme":"ModalFormsPopup","throbber":"\u003Cimg typeof=\u0022foaf:Image\u0022 class=\u0022img-responsive\u0022 src=\u0022https:\/\/derivative.ca\/sites\/all\/modules\/contrib\/modal_forms\/images\/loading_animation.gif\u0022 alt=\u0022Loading...\u0022 title=\u0022Loading\u0022 \/\u003E","closeText":"Close"},"better_exposed_filters":{"datepicker":false,"slider":false,"settings":[],"autosubmit":false,"views":{"share_and_stats":{"displays":{"block_mobile":{"filters":[]},"block":{"filters":[]}}},"related_stories":{"displays":{"block_2":{"filters":[]},"block":{"filters":[]}}},"node_left_sidebar":{"displays":{"post":{"filters":[]}}}}},"search_api_live_results":{"min_length":3,"auto_hide":true,"view_all":true},"derivativeSearch":{"forum_url":"https:\/\/forum.derivative.ca\/search"},"urlIsAjaxTrusted":{"\/global-search":true},"equalHeightsModule":{"classes":[{"selector":".front .feature-inner-wrapper .views-field-title","mediaquery":"(min-width: 768px)","minheight":"","maxheight":"","overflow":"hidden"},{"selector":"#block-bean-experimental-build .top .field-name-field-bean-text, #block-bean-archive-build .top .field-name-field-bean-text","mediaquery":"(min-width: 768px)","minheight":"","maxheight":"","overflow":"hidden"},{"selector":".front .feature-inner-wrapper .views-field-body","mediaquery":"(min-width: 768px)","minheight":"","maxheight":"","overflow":"hidden"},{"selector":".front .feature-inner-wrapper .views-field-field-feature-icon","mediaquery":"(min-width: 768px)","minheight":"","maxheight":"","overflow":"hidden"},{"selector":".not-front:not(.page-node-20) .paragraphs-item-two-blocks-with-delimeter .field-item .field-name-field-text-area","mediaquery":"(min-width: 768px)","minheight":"","maxheight":"","overflow":"hidden"}],"imagesloaded_ie8":1},"extlink":{"extTarget":"_blank","extTargetNoOverride":1,"extClass":0,"extLabel":"(link is external)","extImgClass":0,"extSubdomains":1,"extExclude":"","extInclude":"","extCssExclude":"","extCssExplicit":"","extAlert":0,"extAlertText":"This link will take you to an external web site.","mailtoClass":0,"mailtoLabel":"(link sends e-mail)"},"googleanalytics":{"trackOutbound":1,"trackMailto":1,"trackDownload":1,"trackDownloadExtensions":"7z|aac|arc|arj|asf|asx|avi|bin|csv|doc(x|m)?|dot(x|m)?|exe|flv|gif|gz|gzip|hqx|jar|jpe?g|js|mp(2|3|4|e?g)|mov(ie)?|msi|msp|pdf|phps|png|ppt(x|m)?|pot(x|m)?|pps(x|m)?|ppam|sld(x|m)?|thmx|qtm?|ra(m|r)?|sea|sit|tar|tgz|torrent|txt|wav|wma|wmv|wpd|xls(x|m|b)?|xlt(x|m)|xlam|xml|z|zip","trackColorbox":1},"superfish":[{"id":"1","sf":{"animation":{"opacity":"show","height":"show"},"speed":"fast"},"plugins":{"touchscreen":{"disableHover":true,"mode":"window_width","breakpointUnit":"px"},"smallscreen":{"mode":"window_width","breakpointUnit":"px","title":"Mobile Main menu"}}},{"id":"2","sf":{"animation":{"opacity":"show","height":"show"},"speed":"fast"},"plugins":{"smallscreen":{"mode":"window_width","breakpointUnit":"px","title":"Main menu"},"supposition":true,"supersubs":true}}],"statistics":{"data":{"nid":"70165"},"url":"\/modules\/statistics\/statistics.php"},"field_group":{"div":"full"},"colorbox_node":{"width":"80%","height":"80%"},"bootstrap":{"anchorsFix":"0","anchorsSmoothScrolling":"0","formHasError":1,"popoverEnabled":1,"popoverOptions":{"animation":1,"html":0,"placement":"right","selector":"","trigger":"click","triggerAutoclose":1,"title":"","content":"","delay":0,"container":"body"},"tooltipEnabled":1,"tooltipOptions":{"animation":1,"html":0,"placement":"auto left","selector":"","trigger":"hover focus","delay":0,"container":"body"}}}); //--><!]]> </script> </head> <body class="html not-front not-logged-in no-sidebars page-node page-node- page-node-70165 node-type-project"> <div id="skip-link"> <a href="#main-content" class="element-invisible element-focusable">Skip to main content</a> </div> <style> @media screen and (max-width: 767px) { #user-info-xs { border-top: 1px solid #cccbcb; } #user-info-xs .share-and-stats.visible-xs-block { display: inline-block!important; width: 60%; padding-top: 20px; padding-left: 30px; padding-bottom: 0px; border-top: none; } #user-info-xs .full-node-page { top: 30px; display: inline-block; } } </style> <div id="mobile-menu" class="uk-offcanvas"> <div class="mobile-menu-close"> <a class="mobile-menu-toggle-close">Close</a> </div> <div class="uk-offcanvas-bar uk-offcanvas-bar-flip"> <div class="region region-mobile-menu"> <section id="block-superfish-1" class="block block-superfish clearfix"> <ul id="superfish-1" class="menu sf-menu sf-menu-mobile-main-menu sf-vertical sf-style-none sf-total-items-4 sf-parent-items-2 sf-single-items-2"><li id="menu-893-1" class="first odd sf-item-1 sf-depth-1 sf-no-children"><a href="/" title="" class="sf-depth-1">Home</a></li><li id="menu-894-1" class="middle even sf-item-2 sf-depth-1 sf-total-children-5 sf-parent-children-0 sf-single-children-6 menuparent"><a href="/product" title="" class="sf-depth-1 sf-depth-1 menuparent">TouchDesigner</a><ul><li id="menu-894-1" class="first odd sf-item-1 sf-depth-1 sf-clone-parent sf-no-children"><a href="/product" title="" class="sf-depth-1">TouchDesigner</a></li><li id="menu-896-1" class="middle even sf-item-2 sf-depth-2 sf-clone-parent sf-no-children"><a href="/feature/vr-support/12" title="" class="sf-depth-2">Features</a></li><li id="menu-7351-1" class="middle odd sf-item-3 sf-depth-2 sf-clone-parent sf-no-children"><a href="/showcase" title="" class="sf-depth-2">Showcase</a></li><li id="menu-7352-1" class="middle even sf-item-4 sf-depth-2 sf-clone-parent sf-no-children"><a href="/community" title="" class="sf-depth-2">Community</a></li><li id="menu-7353-1" class="last odd sf-item-5 sf-depth-2 sf-clone-parent sf-no-children"><a href="/job-board" title="" class="sf-depth-2">Job Board</a></li><li id="menu-7354-1" class="middle even sf-item-6 sf-depth-2 sf-clone-parent sf-no-children"><a href="/about-derivative" title="" class="sf-depth-2">About Derivative</a></li></ul></li><li id="menu-7350-1" class="middle odd sf-item-3 sf-depth-1 sf-clone-parent sf-total-children-7 sf-parent-children-0 sf-single-children-8 menuparent"><a href="/learn" title="" class="sf-depth-1 sf-depth-1 menuparent">Learn</a><ul><li id="menu-7350-1" class="first odd sf-item-1 sf-depth-1 sf-clone-parent sf-no-children"><a href="/learn" title="" class="sf-depth-1">Learn</a></li><li id="menu-7355-1" class="middle even sf-item-2 sf-depth-2 sf-clone-parent sf-no-children"><a href="/UserGuide/Main_Page" title="" class="sf-depth-2">User Guide</a></li><li id="menu-336990-1" class="middle odd sf-item-3 sf-depth-2 sf-clone-parent sf-no-children"><a href="https://learn.derivative.ca/" title="" class="sf-depth-2">Curriculum</a></li><li id="menu-167777-1" class="middle even sf-item-4 sf-depth-2 sf-clone-parent sf-no-children"><a href="https://forum.derivative.ca" title="" class="sf-depth-2">Forum</a></li><li id="menu-7356-1" class="middle odd sf-item-5 sf-depth-2 sf-clone-parent sf-no-children"><a href="/tutorials" title="" class="sf-depth-2">Tutorials</a></li><li id="menu-7358-1" class="middle even sf-item-6 sf-depth-2 sf-clone-parent sf-no-children"><a href="/workshops-events" title="" class="sf-depth-2">Workshops & Events</a></li><li id="menu-7359-1" class="last odd sf-item-7 sf-depth-2 sf-clone-parent sf-no-children"><a href="/resources" title="" class="sf-depth-2">Resources</a></li><li id="menu-7360-1" class="middle even sf-item-8 sf-depth-2 sf-clone-parent sf-no-children"><a href="/support-service" title="" class="sf-depth-2">Support</a></li></ul></li><li id="menu-899-1" class="last even sf-item-4 sf-depth-1 sf-clone-parent sf-no-children"><a href="/download" title="" class="sf-depth-1">Get It Now</a></li></ul> </section> <section id="block-menu-menu-privacy-policy" class="block block-menu clearfix"> <h2 class="block-title">Privacy policy</h2> <ul class="menu nav"><li class="first leaf"><a href="/terms-use" title="">Terms of use</a></li> <li class="last leaf"><a href="/privacy" title="">Privacy</a></li> </ul> </section> <section id="block-bean-mobile-follow-us" class="block block-bean col-xs-12 clearfix"> <h2 class="block-title">Follow us</h2> <div class="entity entity-bean bean-social-icons clearfix" about="/block/mobile-follow-us" typeof=""> <div class="content"> <div class="field field-name-field-social-links field-type-link-field field-label-hidden"> <div class="field-items"> <div class=" field-item even"> <a href="https://www.instagram.com/touchdesigner/" title="https://www.instagram.com/touchdesigner/" target="_blank"><i class="fa fa-instagram fa-fw"></i></a> <a href="https://www.instagram.com/touchdesigner/" title="https://www.instagram.com/touchdesigner/" target="_blank">https://www.instagram.com/touchdesigner/</a> </div> <div class=" field-item odd"> <a href="https://www.facebook.com/TouchDesigner" title="https://www.facebook.com/TouchDesigner" target="_blank"><i class="fa fa-facebook fa-fw"></i></a> <a href="https://www.facebook.com/TouchDesigner" title="https://www.facebook.com/TouchDesigner" target="_blank">https://www.facebook.com/TouchDesigner</a> </div> <div class=" field-item even"> <a href="https://twitter.com/1null1" title="https://twitter.com/1null1" target="_blank"><i class="fa fa-twitter fa-fw"></i></a> <a href="https://twitter.com/1null1" title="https://twitter.com/1null1" target="_blank">https://twitter.com/1null1</a> </div> <div class=" field-item odd"> <a href="https://www.youtube.com/TouchDesignerOfficial" title="https://www.youtube.com/TouchDesignerOfficial" target="_blank"><i class="fa fa-youtube fa-fw"></i></a> <a href="https://www.youtube.com/TouchDesignerOfficial" title="https://www.youtube.com/TouchDesignerOfficial" target="_blank">https://www.youtube.com/TouchDesignerOfficial</a> </div> </div> </div> </div> </div> </section> </div> </div> </div> <div id="wrapper-page"> <header id="navbar" role="banner" class="navbar navbar-default"> <div class="container-fluid"> <div class="row"> <a href="javascript:;" class="off-canvas-toggle icon-toggle col-xs-1" data-uk-offcanvas="{target:'#mobile-menu'}"> <i class="fa fa-navicon"></i> </a> <div class="navbar-header col-xs-6 col-md-2 col-lg-2"> <a class="logo navbar-btn pull-left" href="/" title="Home"> <img class="svg-img" src="https://derivative.ca/sites/all/themes/derivative2017/logo.svg" onerror="this.src='https://derivative.ca/sites/all/themes/derivative2017/logo.png'" alt="Home"/> </a> </div> <div class="navigation-wrapper col-md-6 col-lg-6"> <div class="region region-navigation col-md-12"> <section id="block-superfish-2" class="block block-superfish hidden-xs hidden-sm clearfix"> <ul id="superfish-2" class="menu sf-menu sf-main-menu sf-horizontal sf-style-none sf-total-items-2 sf-parent-items-2 sf-single-items-0"><li id="menu-519-2" class="active-trail first odd sf-item-1 sf-depth-1 sf-total-children-5 sf-parent-children-0 sf-single-children-5 menuparent"><a href="/showcase" title="" class="sf-depth-1 menuparent">TouchDesigner</a><ul><li id="menu-521-2" class="first odd sf-item-1 sf-depth-2 sf-no-children"><a href="/feature/application-building" class="sf-depth-2">Features</a></li><li id="menu-4446-2" class="active-trail middle even sf-item-2 sf-depth-2 sf-no-children"><a href="/showcase" title="" class="sf-depth-2">Showcase</a></li><li id="menu-4093-2" class="middle odd sf-item-3 sf-depth-2 sf-no-children"><a href="/community" title="" class="sf-depth-2">Community</a></li><li id="menu-525-2" class="middle even sf-item-4 sf-depth-2 sf-no-children"><a href="/job-board" title="" class="sf-depth-2">Job board</a></li><li id="menu-4447-2" class="last odd sf-item-5 sf-depth-2 sf-no-children"><a href="/about-derivative" class="sf-depth-2">About Derivative</a></li></ul></li><li id="menu-520-2" class="last even sf-item-2 sf-depth-1 sf-total-children-7 sf-parent-children-0 sf-single-children-7 menuparent"><a href="/learn" class="sf-depth-1 menuparent">Learn</a><ul><li id="menu-1058-2" class="first odd sf-item-1 sf-depth-2 sf-no-children"><a href="/UserGuide/Main_Page" title="" class="sf-depth-2">User Guide</a></li><li id="menu-336989-2" class="middle even sf-item-2 sf-depth-2 sf-no-children"><a href="https://learn.derivative.ca/" title="" class="sf-depth-2">Curriculum</a></li><li id="menu-53420-2" class="middle odd sf-item-3 sf-depth-2 sf-no-children"><a href="https://forum.derivative.ca" title="" class="sf-depth-2">Forum</a></li><li id="menu-5147-2" class="middle even sf-item-4 sf-depth-2 sf-no-children"><a href="/tutorials" title="" class="sf-depth-2">Tutorials</a></li><li id="menu-1060-2" class="middle odd sf-item-5 sf-depth-2 sf-no-children"><a href="/workshops-events" title="" class="sf-depth-2">Workshops & Events</a></li><li id="menu-1061-2" class="middle even sf-item-6 sf-depth-2 sf-no-children"><a href="/resources" title="" class="sf-depth-2">Resources</a></li><li id="menu-1062-2" class="last odd sf-item-7 sf-depth-2 sf-no-children"><a href="/support-service" class="sf-depth-2">Support</a></li></ul></li></ul> </section> <section id="block-views-exp-global-search-page" class="block block-views no-padding global-search clearfix"> <form class="ctools-auto-submit-full-form" action="/global-search" method="get" id="views-exposed-form-global-search-page" accept-charset="UTF-8"><div><div class="views-exposed-form"> <div class="views-exposed-widgets clearfix"> <div id="edit-query-wrapper" class="views-exposed-widget views-widget-filter-search_api_views_fulltext"> <div class="views-widget"> <input type="text" id="edit-query" name="query" value="" size="30" maxlength="128" class="form-text form-autocomplete live-results-search-textfield" /><input type="hidden" id="edit-query-autocomplete" value="https://derivative.ca/search_api_live_results/search_api_views_global_search" disabled="disabled" class="live-result-autocomplete" /> </div> </div> <div id="edit-filter-by-wrapper" class="views-exposed-widget views-widget-filter-composite_views_filter"> <label for="edit-filter-by"> Filter by </label> <div class="views-widget"> <div class="form-item form-item-filter-by form-type-select form-group"><div class="bef-select-as-links"><div class="form-item"><div class="form-item form-item-edit-filter-by-all form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=All">All</a></div><div class="form-item form-item-edit-filter-by-wiki form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=wiki">User Guide</a></div><div class="form-item form-item-edit-filter-by-forum form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=forum">Forum</a></div><div class="form-item form-item-edit-filter-by-tutorials form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=tutorials">Tutorials</a></div><div class="form-item form-item-edit-filter-by-event-workshop form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=event_workshop">Events & Workshops</a></div><div class="form-item form-item-edit-filter-by-features form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=features">Features</a></div><div class="form-item form-item-edit-filter-by-community form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=community">Community</a></div><div class="form-item form-item-edit-filter-by-showcase form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=showcase">Showcase</a></div><div class="form-item form-item-edit-filter-by-resources form-type-bef-link form-group"><a href="https://derivative.ca/global-search?filter_by=resources">Resources</a></div></div><select class="form-control form-select" style="display: none;" id="edit-filter-by" name="filter_by"><option value="All">All</option><option value="wiki">User Guide</option><option value="forum">Forum</option><option value="tutorials">Tutorials</option><option value="event_workshop">Events & Workshops</option><option value="features">Features</option><option value="community">Community</option><option value="showcase">Showcase</option><option value="resources">Resources</option></select></div></div> </div> </div> <div class="views-exposed-widget views-submit-button"> <button class="btn btn-primary form-submit" type="submit" id="edit-submit-global-search" name="" value="<span class="icon-dv-search"></span>"><span class="icon-dv-search"></span></button> </div> </div> </div> </div></form> </section> </div> </div> <div class="account-menu pull-right col-xs-offset-1 col-xs-4 col-md-offset-0 col-md-4 col-lg-4"> <div class="region region-user-profile"> <section id="block-derivative-users-du-account-menu-guest" class="block block-derivative-users clearfix"> <div class="my-account"> <a href="/user/login" class="user-has-no-icon"> <i class="icon-dv-account"> </i>My account </a> </div> </section> </div> <div class="search-link"> <a href="#"> <i class="icon-dv-search"> </i>Search </a> <div class="search-box"></div> </div> <div class="cart-icon"> <a href="/cart"> <i class="icon-dv-cart"> </i>Cart </a> </div> <div class="get-now pull-right hidden-xs hidden-sm"> <div class="get-it-btn"> <div class="btn-background"></div> <a href="/download"><span>Get it now</span></a> </div> </div> <div class="get-now-icon pull-right visible-xs-flex visible-sm-flex"> <a href="/download"> <i class="icon-dv-download"> </i>Get it now </a> </div> </div> </div> </div> </header> <div class="main-container container-fluid"> <header role="banner" id="page-header"> <div class="row"> </div> </header> <!-- /#page-header --> <div class="row title"> <div class="container-fluid"> <div class="highlighted jumbotron hidden-xs"> <div class="region region-highlighted"> <section id="block-views-share-and-stats-block" class="block block-views clearfix"> <div class="view view-share-and-stats view-id-share_and_stats view-display-id-block view-dom-id-5a054f32d6230b0440a32aa735624ee5"> <div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first views-row-last row"> <div class="share-buttons col-sm-7 col-lg-8 views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-addtoany-link"><span class="views-label views-label-addtoany-link col-sm-offset-4 col-md-offset-6">Share</span><span class="field-content"><span class="a2a_kit a2a_kit_size_32 a2a_target addtoany_list" id="da2a_2"> <a class="a2a_button_twitter" href="https://twitter.com/"></a> <a class="a2a_button_facebook" href="https://facebook.com/"></a> <a class="a2a_button_email"></a> </span> </span></div> </div> <div class="node-stats col-xs-12 col-sm-5 col-lg-4 views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-created col-sm-6"><span class="views-label views-label-created">Posted on: </span><span class="field-content">Sep 09th 2024</span></div> <div class="comment-views-wrapper col-xs-8 col-sm-6 no-padding views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-nothing"><span class="field-content"><div class="comment-count plural comment-count-[field_discourse_topic_id]" rel-topic-id="[field_discourse_topic_id]"> <span>Comments</span></div></span></div> <div class="views-field views-field-totalcount"><span class="field-content">2,790 views</span></div> </div> </div> </div> </div> </div> </section> </div> </div> <ol class="breadcrumb"><li><a href="/">Home</a></li> <li class="active"> Fusing Analog and Digital: Jay Borgwardt’s Vinyl Music Station with TouchDesigner</li> </ol> <a id="main-content"></a> <ul class="action-links"></ul> </div> </div> <div class="row main"> <div class="container-fluid"> <aside class="author-info-wrapper hidden-xs col-sm-3 col-md-2 no-padding"> <div class="view view-node-left-sidebar view-id-node_left_sidebar view-display-id-post view-dom-id-6cba37f0b19b62597ae4b5de16df47ac"> <div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first views-row-last"> <div class="outer-wrapper views-fieldset" data-module="views_fieldsets"> <div class="instructor views-fieldset" data-module="views_fieldsets"> <div class="user-avatar views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-field-user-picture"><div class="field-content"> <div class="field-user-picture"> <a href="/user/58216/profile"><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/200x200_user_page/public/user-picture/img_7049_0.jpg" width="200" height="200" alt=" img_7049_0.jpg" /></a> </div> </div></div> </div> <div class="user-info views-fieldset" data-module="views_fieldsets"> <div class="user-account views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-name"><span class="field-content"><a href="/user/58216/profile">isabelle</a></span></div> </div> <div class="views-field views-field-field-bio"><div class="field-content">An alumni of the Ontario College of Art and Design and the Beal Institute For Strategic Creativity, Isabelle’s background is in research, design and film making. She joined the Derivative team in 2008 to assume the role of scouting out and writing about the growing body of work produced by artists and designers using TouchDesigner. Closely engaged with the community and its members’ evolving needs and objectives, Isabelle detects early signals and trends to inform development, facilitate connections, alliances and the production of educational initiatives and community events.</div></div> </div> <div class="social-links views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-field-youtube-link"><div class="field-content"> </div></div> <div class="views-field views-field-field-facebook-link"><div class="field-content"> <div class="author-social author-facebook"> <div class="btn-background"></div> <a href="https://www.facebook.com/isabelle.rousset"> <i class="fa fa-facebook" aria-hidden="true"></i> </a> </div> </div></div> <div class="views-field views-field-field-instagram-link"><div class="field-content"> <div class="author-social author-instagram"> <div class="btn-background"></div> <a href="https://www.instagram.com/vjiq1000/"> <i class="fa fa-instagram" aria-hidden="true"></i> </a> </div> </div></div> <div class="views-field views-field-field-vimeo-link"><div class="field-content"> </div></div> <div class="views-field views-field-field-company-url"><div class="field-content"> </div></div> </div> </div> </div> </div> </div> </div> </aside> <section class="col-sm-9 col-md-10"> <div id="user-info-xs"> <div class="share-and-stats visible-xs-block"> <div class="region region-mobile-share"> <section id="block-views-share-and-stats-block-mobile" class="block block-views clearfix"> <div class="view view-share-and-stats view-id-share_and_stats view-display-id-block_mobile view-dom-id-3b4211ede035ef316e592b8b2cab8577"> <div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first views-row-last row"> <div class="share-buttons views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-addtoany-link"><span class="field-content"><span class="a2a_kit a2a_kit_size_32 a2a_target addtoany_list" id="da2a_1"> <a class="a2a_button_twitter" href="https://twitter.com/"></a> <a class="a2a_button_facebook" href="https://facebook.com/"></a> <a class="a2a_button_email"></a> </span> <script type="text/javascript"> <!--//--><![CDATA[//><!-- if(window.da2a)da2a.script_load(); //--><!]]> </script></span></div> </div> </div> </div> </div> </section> </div> </div> <div class="full-node-page node-type post company-post" style="display: inline-block"> <span class="node-type-title">Company Post</span> </div> </div> <h1 class="page-header"> Fusing Analog and Digital: Jay Borgwardt’s Vinyl Music Station with TouchDesigner <span class="expirience-level"></span> </h1> <div class="region-content-wrapper col-sm-offset-1 col-md-offset-2"> <div class="region region-content"> <section id="block-system-main" class="block block-system clearfix"> <article id="node-70165" class="node node-project node-promoted clearfix" about="/community-post/fusing-analog-and-digital-jay-borgwardt%E2%80%99s-vinyl-music-station-touchdesigner/70165" typeof="sioc:Item foaf:Document"> <header> <span property="dc:title" content=" Fusing Analog and Digital: Jay Borgwardt’s Vinyl Music Station with TouchDesigner" class="rdf-meta element-hidden"></span> <div class="share-and-stats visible-xs-block"> <!-- add left side bar here to show user info for all community post types--> <div class="view view-node-left-sidebar view-id-node_left_sidebar view-display-id-post view-dom-id-0f584c4314d30feef21aa4093023d3c6"> <div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first views-row-last"> <div class="outer-wrapper views-fieldset" data-module="views_fieldsets"> <div class="instructor views-fieldset" data-module="views_fieldsets"> <div class="user-avatar views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-field-user-picture"><div class="field-content"> <div class="field-user-picture"> <a href="/user/58216/profile"><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/200x200_user_page/public/user-picture/img_7049_0.jpg" width="200" height="200" alt=" img_7049_0.jpg" /></a> </div> </div></div> </div> <div class="user-info views-fieldset" data-module="views_fieldsets"> <div class="user-account views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-name"><span class="field-content"><a href="/user/58216/profile">isabelle</a></span></div> </div> <div class="views-field views-field-field-bio"><div class="field-content">An alumni of the Ontario College of Art and Design and the Beal Institute For Strategic Creativity, Isabelle’s background is in research, design and film making. She joined the Derivative team in 2008 to assume the role of scouting out and writing about the growing body of work produced by artists and designers using TouchDesigner. Closely engaged with the community and its members’ evolving needs and objectives, Isabelle detects early signals and trends to inform development, facilitate connections, alliances and the production of educational initiatives and community events.</div></div> </div> <div class="social-links views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-field-youtube-link"><div class="field-content"> </div></div> <div class="views-field views-field-field-facebook-link"><div class="field-content"> <div class="author-social author-facebook"> <div class="btn-background"></div> <a href="https://www.facebook.com/isabelle.rousset"> <i class="fa fa-facebook" aria-hidden="true"></i> </a> </div> </div></div> <div class="views-field views-field-field-instagram-link"><div class="field-content"> <div class="author-social author-instagram"> <div class="btn-background"></div> <a href="https://www.instagram.com/vjiq1000/"> <i class="fa fa-instagram" aria-hidden="true"></i> </a> </div> </div></div> <div class="views-field views-field-field-vimeo-link"><div class="field-content"> </div></div> <div class="views-field views-field-field-company-url"><div class="field-content"> </div></div> </div> </div> </div> </div> </div> </div> <div class="view view-share-and-stats view-id-share_and_stats view-display-id-block view-dom-id-e4a96e09238a80acc02a4e5df116507e"> <div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first views-row-last row"> <div class="share-buttons col-sm-7 col-lg-8 views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-addtoany-link"><span class="views-label views-label-addtoany-link col-sm-offset-4 col-md-offset-6">Share</span><span class="field-content"><span class="a2a_kit a2a_kit_size_32 a2a_target addtoany_list" id="da2a_3"> <a class="a2a_button_twitter" href="https://twitter.com/"></a> <a class="a2a_button_facebook" href="https://facebook.com/"></a> <a class="a2a_button_email"></a> </span> </span></div> </div> <div class="node-stats col-xs-12 col-sm-5 col-lg-4 views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-created col-sm-6"><span class="views-label views-label-created">Posted on: </span><span class="field-content">Sep 09th 2024</span></div> <div class="comment-views-wrapper col-xs-8 col-sm-6 no-padding views-fieldset" data-module="views_fieldsets"> <div class="views-field views-field-nothing"><span class="field-content"><div class="comment-count plural comment-count-[field_discourse_topic_id]" rel-topic-id="[field_discourse_topic_id]"> <span>Comments</span></div></span></div> <div class="views-field views-field-totalcount"><span class="field-content">2,790 views</span></div> </div> </div> </div> </div> </div> </div> </header> <div class="field field-name-body field-type-text-with-summary field-label-hidden"> <div class="field-items"> <div class="field-item even" property="content:encoded"><div class="dc-class-style text-bundle text-bundle-large">Vinyl enthusiast and media artist Jay Borgwardt has taken his love for analog music to the next level with the creation of the Vinyl Music Station. Originally designed as a simple informational display to showcase the album currently playing in his record store, the project evolved into an elegant system blending both analog and digital music experiences. Using TouchDesigner, which drives all of his projects he says, Borgwardt’s station features four main components: an album database, vinyl recognition, an audio visualizer, and end sensor playback. Vinyl recognition is achieved with computer vision (the original prototype used RFID tags), while Spotify integration finds and plays similar music when the record ends. Once the system has been satisfactorily polished, Jay intends to go full circle and bring the VMS to record stores and vinyl bars, as well as making it available to music and tech enthusiasts. Stay tuned!</div> <p> </p> <blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/reel/C8uifD6vH4D/?utm_source=ig_embed&utm_campaign=loading" data-instgrm-version="14" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"> <div style="padding:16px;"> <div style=" display: flex; flex-direction: row; align-items: center;"> <div style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"> </div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"> </div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"> </div> </div> </div> <div style="padding: 19% 0;"> </div> <div style="display:block; height:50px; margin:0 auto 12px; width:50px;"><a href="https://www.instagram.com/reel/C8uifD6vH4D/?utm_source=ig_embed&utm_campaign=loading" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank"><svg height="50px" version="1.1" viewbox="0 0 60 60" width="50px" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"><g fill="none" fill-rule="evenodd" stroke="none" stroke-width="1"><g fill="#000000" transform="translate(-511.000000, -20.000000)"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"></path></g></g></g></svg></a></div> <div style="padding-top: 8px;"> <div style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;"><a href="https://www.instagram.com/reel/C8uifD6vH4D/?utm_source=ig_embed&utm_campaign=loading" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank">View this post on Instagram</a></div> </div> <div style="padding: 12.5% 0;"> </div> <div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;"> <div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"> </div> <div style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"> </div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"> </div> </div> <div style="margin-left: 8px;"> <div style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"> </div> <div style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)"> </div> </div> <div style="margin-left: auto;"> <div style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"> </div> <div style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"> </div> <div style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"> </div> </div> </div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"> </div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"> </div> </div> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/reel/C8uifD6vH4D/?utm_source=ig_embed&utm_campaign=loading" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A post shared by Jay Borgwardt (@jay.borgwardt)</a></p> </div> </blockquote> <script async="" src="//www.instagram.com/embed.js"></script> <p> </p> <p><span><strong>Derivative:</strong> <em>Please tell us a bit about yourself and what inspires you, what you do and how you came to work in this field.</em></span></p> <p><span><strong><span><span>Jay Borgwardt: </span></span></strong>I fell in love with interactive art in college when I took a class on creative coding in Processing. The TA for that class recommended I try out TouchDesigner, and I was hooked! After that I was lucky enough to get an internship with Harvey Moon at the precursor to <a href="https://spectra.studio/">Spectra Studio</a>, where I’ve been working ever since. </span></p> <p><span>I’m always interested in projects that use physical objects to interact with digital content. One big inspiration for me was an installation by Design I/O called “</span><a href="https://www.design-io.com/projects/connectedworlds"><span>Connected Worlds</span></a><span>”. In it, children could use large foam logs to change the course of a projected river, and send the water to different virtual habitats. Another was Neil Mendoza’s project “</span><a href="https://www.neilmendoza.com/portfolio/mechanical-masterpieces/"><span>Mechanical Masterpieces</span></a><span>” for the Pittsburgh Children's Museum, in which guests could push levers, turn cranks, and pull ropes to interact with digital copies of famous paintings.</span></p> <p><span>I strive to create projects that use novel methods of interaction, not just as a gimmick but as a genuine, unique way of engaging with art and technology.</span></p> <p><span><strong>Derivative:</strong> <em>Your recent work the Vinyl Music Station has been a huge hit with the community, for audiophiles and well beyond. Can you explain where the idea originated and what the precedents were for you.</em></span></p> <p><span><strong><span><span>Jay Borgwardt: </span></span></strong>I love vinyl records. There’s something so magical about being able to see and hold your favorite songs in your hands. I used to work in a record store and was constantly fielding questions about what was currently playing in the store. I designed a simple informational display that would show the title and artist of whatever album was currently playing, and the project grew from there. I actually added in the record end sensor after finishing the first prototype of the Vinyl Music Station; I started listening to records more when I had company over, but I would have to drop everything to flip the record when the side was over to avoid dead air. So I decided to add a sensor to detect when the record side was over, and I used Spotify integration to find and play similar music. This ended up being a lovely mix of analog music and digital music, blending the strengths of both.</span></p> <div class="media-element-container media-live_results_search"><div id="file-497517" class="file file-image file-image-png"> <div class="content"> <figure><a title="The TouchDesigner network that creates the album info screen for each vinyl. This method uses containers to form the layout and animation paths." class="colorbox" href="https://derivative.ca/sites/default/files/styles/content_colorbox/public/field/body-images/VinylVisuals.png"><img alt=" VinylVisuals.png" title="The TouchDesigner network that creates the album info screen for each vinyl. This method uses containers to form the layout and animation paths." class="media-element file-live-results-search img-responsive" data-delta="1" typeof="foaf:Image" src="https://derivative.ca/sites/default/files/field/body-images/VinylVisuals.png" width="1920" height="1080" /></a><figcaption> The TouchDesigner network that creates the album info screen for each vinyl. This method uses containers to form the layout and animation paths.</figcaption></figure> </div> </div> </div> <p><span><strong>Derivative:</strong> <em>Please explain how you built the VMS and how TouchDesigner was used.</em></span></p> <p><span><strong><span><span>Jay Borgwardt: </span></span></strong></span><span>As with all of my projects, TouchDesigner drives everything! There are four basic parts: The album database, vinyl recognition, audio visualizer, and end sensor playback. </span><span>Vinyl recognition now uses computer vision, but the prototype used in the video used RFID tags as well. Once the album is identified, most of the rest of the work is data wrangling and information display. Currently I use containers and text COMPs for the visual elements, but in future versions I’m thinking about switching to rendered Geos, as I hear it can provide a lot more freedom.</span></p> <p><span>The speakers I use have an audio out port which is a really easy way of getting the audio feed from the record player to the computer. From there it’s only a few CHOPs and some instancing to get an audio visualizer. I think I used <a href="https://www.youtube.com/watch?v=shj4473s96Y">Kaiho Nishimura's tutoria</a>l as inspiration.</span></p> <div class="media-element-container media-live_results_search"><div id="file-497516" class="file file-image file-image-png"> <div class="content"> <figure><a title="The network to make the audio visualizer. Rectangles are instanced using data from the Audio Spectrum CHOP." class="colorbox" href="https://derivative.ca/sites/default/files/styles/content_colorbox/public/field/body-images/VinylVisualizer.png"><img alt=" VinylVisualizer.png" title="The network to make the audio visualizer. Rectangles are instanced using data from the Audio Spectrum CHOP." class="media-element file-live-results-search img-responsive" data-delta="2" typeof="foaf:Image" src="https://derivative.ca/sites/default/files/field/body-images/VinylVisualizer.png" width="1920" height="1080" /></a><figcaption> The network to make the audio visualizer. Rectangles are instanced using data from the Audio Spectrum CHOP.</figcaption></figure> </div> </div> </div> <p><span>The “similar music” player was one of the more difficult parts of the installation, mostly because of Spotify API integration issues. The Spotify API uses OAuth 2.0 authentication, which was a bit of a headache to figure out. After I got access, I could find the 5 most popular songs on the current album and query the API for 100 similar songs, then add those 100 songs to the queue and start playing until the end sensor detected that the needle was no longer at the end of the record.</span></p> <div class="media-element-container media-live_results_search"><div id="file-497515" class="file file-image file-image-png"> <div class="content"> <figure><a title="" class="colorbox" href="https://derivative.ca/sites/default/files/styles/content_colorbox/public/field/body-images/SpotifySimilarSongs.png"><img alt=" SpotifySimilarSongs.png" class="media-element file-live-results-search img-responsive" data-delta="3" typeof="foaf:Image" src="https://derivative.ca/sites/default/files/field/body-images/SpotifySimilarSongs.png" width="1920" height="1080" /></a><figcaption> </figcaption></figure> </div> </div> </div> <p><em>Above image caption: Finding similar songs on Spotify. The album name is fed into a Spotify API request to get the Spotify tracklist, which is then sorted by popularity. The top five songs on the album are then sent as a request to find similar songs, which are then added to the Spotify queue to be played once the record side is complete.</em></p> <p><span><strong>Derivative: </strong><em>It's really ingenious and useful too. Were you surprised at the response and do you have any plans to release it in some form for public use?</em></span></p> <p><span><strong><span><span>Jay Borgwardt: </span></span></strong></span>Thanks so much! I was definitely surprised at the response from the public, I was expecting a few engineers and music enthusiasts would enjoy the Vinyl Music Station but I was blown away by how much of a wider audience it reached. It was really refreshing to see the project through other people's eyes, especially after spending so long tinkering with it. I feet very lucky to get so much positive feedback and constructive criticism on a project that means so much to me.</p> <p>I'm making a project breakdown for people who are interested in how it works, and I also plan on building and installing custom Vinyl Music Stations for people and businesses who want one. I really want to bring the station to record stores and vinyl bars. The project came from working at a record store so I’d love to bring it full circle. There’s still a lot of polishing to be done, but I’m excited to continue adding to it!</p> <p><span><strong>Derivative:</strong> <em>We'd love to know a bit about your work with the team at Spectra Studio, how you collaborate and it would be nice to hear about a project - research or client - that is exciting to you right now.</em></span></p> <p><span><strong><span><span>Jay Borgwardt: </span></span></strong>Working at Spectra Studio is a dream! I get to work with some incredibly talented artists and engineers on crazy projects. We’re all interested in each other's work and have weekly team sessions where we share new techniques, theories, and practices to help us grow both individually and as a studio. </span></p> <p><span>One exciting project we’re working on right now is Harry Potter Visions of Magic, which is currently in Brussels, Belgium. Guests can actually use wands to interact with lights and projection, and it feels really responsive. I had a blast prototyping the Visions of Magic interaction because it ties in so well with my interests: physical objects interacting with digital content. </span></p> <p><span><strong>Derivative:</strong> <em>What's next?!</em></span></p> <p><span><strong><span><span>Jay Borgwardt: </span></span></strong></span>I have a couple more fun engineering projects that I've been working on, and I also want to get back to my art practice. There are also a few exciting things at Spectra Studio coming up next year as well. I wish I could go into more detail, but for now that's a much as I can say!<br /> </p> <p>Follow Jay on <a href="https://www.instagram.com/jay.borgwardt/" target="_blank">Instagram</a></p> </div> </div> </div> <footer> <div class="field field-name-field-tags field-type-taxonomy-term-reference field-label-above"> <div class="field-label">Tags </div> <div class="field-items"> <div class="field-item even"><a href="/tags/audiovisual" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Audiovisual</a></div> <div class="field-item odd"><a href="/tags/data-visualization" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Data Visualization</a></div> <div class="field-item even"><a href="/tags/music" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">music</a></div> <div class="field-item odd"><a href="/tags/vinyl" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">vinyl</a></div> <div class="field-item even"><a href="/tags/interactive" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Interactive</a></div> <div class="field-item odd"><a href="/tags/installation" typeof="skos:Concept" property="rdfs:label skos:prefLabel" datatype="">Installation</a></div> </div> </div> <ul class="links list-inline"><li class="statistics_counter first last"><span>2790 reads</span></li> </ul> </footer> </article> </section> </div> </div> <div class="region region-below-content"> <section id="block-derivative-content-derivative-comments-block" class="block block-derivative-content clearfix"> <div class="comments-wrapper col-sm-12 post-comment-responsive"> <h2 class="comments-title">Comments</h2> <div id="discourse-comments"></div> <script type="text/javascript"> window.DiscourseEmbed = { discourseUrl: "https://forum.derivative.ca/", topicId: 527960}; (function() { var d = document.createElement("script"); d.type = "text/javascript"; d.async = true; d.src = window.DiscourseEmbed.discourseUrl + "javascripts/embed.js"; (document.getElementsByTagName("head")[0] || document.getElementsByTagName("body")[0]).appendChild(d); })(); </script> </div> </section> <section id="block-views-related-stories-block-2" class="block block-views clearfix"> <h2 class="block-title">Related Posts</h2> <div class="view view-related-stories view-id-related_stories view-display-id-block_2 row view-dom-id-6b1bd29ccbd0a105b7664493b4c49884"> <div class="view-content"> <div class="views-row views-row-1 views-row-odd views-row-first col-md-4 col-sm-4 col-xs-12"> <article id="node-60820" class="node node-project node-promoted node-teaser clearfix" about="/community-post/touch-project-profile-irene-sanz-and-markus-heckmann/60820" typeof="sioc:Item foaf:Document"> <header> <div class="field field-name-field-image field-type-image field-label-hidden"> <div class="field-items"> <div class="field-item even"><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/project_teaser_small/public/field/body-images/irene_interface.jpg" width="440" height="440" alt=" irene_interface.jpg" /></div> </div> </div> </header> <div class="node-content clearfix"><div class="node-content-inner"> <div class="inner-top-wrapper"> <div class="node-type post company-post"> Company Post </div> <div class="show-only-list"> <div class="field field-name-body field-type-text-with-summary field-label-hidden"> <div class="field-items"> <div class="field-item even" property="content:encoded"><p>Internationally unknown German media artists Markus Heckmann and Irene Sanz's work Slicky is featured this summer as part of the Open Doors exhibit at Bauhaus University in Weimar.</p></div> </div> </div> </div> <h2><a href="/community-post/touch-project-profile-irene-sanz-and-markus-heckmann/60820">TOUCH PROJECT PROFILE: Irene Sanz and Markus Heckmann</a></h2> <span property="dc:title" content="TOUCH PROJECT PROFILE: Irene Sanz and Markus Heckmann" class="rdf-meta element-hidden"></span> </div> <div class="inner-bottom-wrapper clearfix"> <div class="read-more"><a href="/community-post/touch-project-profile-irene-sanz-and-markus-heckmann/60820">Read more</a> </div> <div class="row submitted-wrapper"> <div class="submitted col-xs-5 col-sm-6 pull-right no-padding"> <div class="avatar"> <div class="user-picture"> <div class="avatar image-style-200x200_user_page" data-uid="58216" data-username="isabelle" data-image-style="200x200_user_page"><a href="/user/58216/profile" title="View user profile."><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/200x200_user_page/public/user-picture/img_7049_0.jpg" width="200" height="200" alt="isabelle's picture" title="isabelle's picture" /></a></div> </div> </div> <div class="author"> <span rel="sioc:has_creator"><a href="/user/58216/profile" title="View user profile." class="username" xml:lang="" about="/users/isabelle" typeof="sioc:UserAccount" property="foaf:name" datatype="">isabelle</a></span> <div class="date">Jul 01st 2005</div> </div> </div> </div> <div class="type-list-view-only hide-mobile node-type post company-post"> Company Post </div> <footer> <div class="field field-name-field-tags field-type-taxonomy-term-reference field-label-hidden"> <div class="field-items"> <div class="field-item even"><div id="taxonomy-term-168" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/interactive">Interactive</a></h2> <div class="content"> </div> </div> </div> <div class="field-item odd"><div id="taxonomy-term-104" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/installation">Installation</a></h2> <div class="content"> </div> </div> </div> </div> </div> </footer> </div> </div></div> </article> </div> <div class="views-row views-row-2 views-row-even col-md-4 col-sm-4 col-xs-12"> <article id="node-60819" class="node node-project node-promoted node-teaser clearfix" about="/community-post/touch-artist-profile-noboru-tsubaki/60819" typeof="sioc:Item foaf:Document"> <header> <div class="field field-name-field-image field-type-image field-label-hidden"> <div class="field-items"> <div class="field-item even"><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/project_teaser_small/public/field/body-images/pa281556lg.jpg" width="440" height="440" alt=" pa281556lg.jpg" /></div> </div> </div> </header> <div class="node-content clearfix"><div class="node-content-inner"> <div class="inner-top-wrapper"> <div class="node-type post company-post"> Company Post </div> <div class="show-only-list"> <div class="field field-name-body field-type-text-with-summary field-label-hidden"> <div class="field-items"> <div class="field-item even" property="content:encoded"><p>Internationally renowned Japanese media artist Noboru Tsubaki's work Cochineal is featured this winter as part of the Fantaisies Cybernétiques: Hommes et Robots exhibit at the Japanese Cultural Centre in Paris.</p></div> </div> </div> </div> <h2><a href="/community-post/touch-artist-profile-noboru-tsubaki/60819">TOUCH ARTIST PROFILE: Noboru Tsubaki</a></h2> <span property="dc:title" content="TOUCH ARTIST PROFILE: Noboru Tsubaki" class="rdf-meta element-hidden"></span> </div> <div class="inner-bottom-wrapper clearfix"> <div class="read-more"><a href="/community-post/touch-artist-profile-noboru-tsubaki/60819">Read more</a> </div> <div class="row submitted-wrapper"> <div class="submitted col-xs-5 col-sm-6 pull-right no-padding"> <div class="avatar"> <div class="user-picture"> <div class="avatar image-style-200x200_user_page" data-uid="58216" data-username="isabelle" data-image-style="200x200_user_page"><a href="/user/58216/profile" title="View user profile."><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/200x200_user_page/public/user-picture/img_7049_0.jpg" width="200" height="200" alt="isabelle's picture" title="isabelle's picture" /></a></div> </div> </div> <div class="author"> <span rel="sioc:has_creator"><a href="/user/58216/profile" title="View user profile." class="username" xml:lang="" about="/users/isabelle" typeof="sioc:UserAccount" property="foaf:name" datatype="">isabelle</a></span> <div class="date">Apr 30th 2007</div> </div> </div> </div> <div class="type-list-view-only hide-mobile node-type post company-post"> Company Post </div> <footer> <div class="field field-name-field-tags field-type-taxonomy-term-reference field-label-hidden"> <div class="field-items"> <div class="field-item even"><div id="taxonomy-term-104" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/installation">Installation</a></h2> <div class="content"> </div> </div> </div> </div> </div> </footer> </div> </div></div> </article> </div> <div class="views-row views-row-3 views-row-odd views-row-last col-md-4 col-sm-4 col-xs-12"> <article id="node-60813" class="node node-project node-promoted node-teaser clearfix" about="/community-post/derivative-median-gallery-toronto-nuit-blanche-2009/60813" typeof="sioc:Item foaf:Document"> <header> <div class="field field-name-field-image field-type-image field-label-hidden"> <div class="field-items"> <div class="field-item even"><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/project_teaser_small/public/field/body-images/invite.jpg" width="440" height="440" alt=" invite.jpg" /></div> </div> </div> </header> <div class="node-content clearfix"><div class="node-content-inner"> <div class="inner-top-wrapper"> <div class="node-type post company-post"> Company Post </div> <div class="show-only-list"> <div class="field field-name-body field-type-text-with-summary field-label-hidden"> <div class="field-items"> <div class="field-item even" property="content:encoded"><p>From October 3 to Sunday October 11, Toronto's Median Contemporary Gallery, (1142 Queen St West) shows 10 light and video-based art pieces, of which three are produced with TouchDesigner.</p></div> </div> </div> </div> <h2><a href="/community-post/derivative-median-gallery-toronto-nuit-blanche-2009/60813">DERIVATIVE at MEDIAN GALLERY, TORONTO NUIT BLANCHE 2009</a></h2> <span property="dc:title" content="DERIVATIVE at MEDIAN GALLERY, TORONTO NUIT BLANCHE 2009" class="rdf-meta element-hidden"></span> </div> <div class="inner-bottom-wrapper clearfix"> <div class="read-more"><a href="/community-post/derivative-median-gallery-toronto-nuit-blanche-2009/60813">Read more</a> </div> <div class="row submitted-wrapper"> <div class="submitted col-xs-5 col-sm-6 pull-right no-padding"> <div class="avatar"> <div class="user-picture"> <div class="avatar image-style-200x200_user_page" data-uid="58216" data-username="isabelle" data-image-style="200x200_user_page"><a href="/user/58216/profile" title="View user profile."><img typeof="foaf:Image" class="img-responsive" src="https://derivative.ca/sites/default/files/styles/200x200_user_page/public/user-picture/img_7049_0.jpg" width="200" height="200" alt="isabelle's picture" title="isabelle's picture" /></a></div> </div> </div> <div class="author"> <span rel="sioc:has_creator"><a href="/user/58216/profile" title="View user profile." class="username" xml:lang="" about="/users/isabelle" typeof="sioc:UserAccount" property="foaf:name" datatype="">isabelle</a></span> <div class="date">Oct 02nd 2009</div> </div> </div> </div> <div class="type-list-view-only hide-mobile node-type post company-post"> Company Post </div> <footer> <div class="field field-name-field-tags field-type-taxonomy-term-reference field-label-hidden"> <div class="field-items"> <div class="field-item even"><div id="taxonomy-term-104" class="taxonomy-term vocabulary-tags"> <h2><a href="/tags/installation">Installation</a></h2> <div class="content"> </div> </div> </div> </div> </div> </footer> </div> </div></div> </article> </div> </div> </div> </section> </div> </section> </div> </div> </div> </div> <footer class="footer"> <div class="inner container-fluid"> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-4 no-padding footer-long-first"> <div class="region region-footer1"> <section id="block-block-1" class="block block-block clearfix"> <h2 class="block-title">Newsletter</h2> <p>Stay up to date with our Newsletter.</p> <p><a href="/derivative-newsletter/subscription"><span>Sign up here</span></a></p> </section> </div> </div> <div class="col-xs-12 col-sm-12 col-md-offset-1 col-md-7 col-lg-offset-2 col-lg-6 no-only-padding footer-long-last"> <div class="col-xs-12 col-sm-5 col-md-5 col-xl-4 desktop"> <div class="region region-footer2"> <section id="block-menu-menu-footer-menu" class="block block-menu clearfix"> <ul class="menu nav"><li class="first leaf"><a href="/support-service">Support service</a></li> <li class="leaf"><a href="/contact-us">Contact Us</a></li> <li class="leaf"><a href="/privacy">Privacy</a></li> <li class="last leaf"><a href="/terms-use">Terms of use</a></li> </ul> </section> </div> </div> <div class="col-xs-12 col-sm-4 col-md-4 col-xl-4 desktop"> <div class="region region-footer3"> <section id="block-bean-social-icons-footer" class="block block-bean clearfix"> <div class="entity entity-bean bean-social-icons clearfix" about="/block/social-icons-footer" typeof=""> <div class="content"> <div class="field field-name-field-social-links field-type-link-field field-label-hidden"> <div class="field-items"> <div class=" field-item even"> <a href="https://www.youtube.com/TouchDesignerOfficial" title="YouTube" target="_blank"><i class="fa fa-youtube fa-fw"></i></a> <a href="https://www.youtube.com/TouchDesignerOfficial" title="YouTube" target="_blank">YouTube</a> </div> <div class=" field-item odd"> <a href="https://www.facebook.com/TouchDesigner" title="Facebook" target="_blank"><i class="fa fa-facebook fa-fw"></i></a> <a href="https://www.facebook.com/TouchDesigner" title="Facebook" target="_blank">Facebook</a> </div> <div class=" field-item even"> <a href="https://twitter.com/1null1" title="Twitter" target="_blank"><i class="fa fa-twitter fa-fw"></i></a> <a href="https://twitter.com/1null1" title="Twitter" target="_blank">Twitter</a> </div> <div class=" field-item odd"> <a href="https://www.instagram.com/TouchDesigner/" title="Instagram" target="_blank"><i class="fa fa-instagram fa-fw"></i></a> <a href="https://www.instagram.com/TouchDesigner/" title="Instagram" target="_blank">Instagram</a> </div> </div> </div> </div> </div> </section> </div> </div> <div class="col-xs-12 col-sm-3 col-md-3 col-xl-4 desktop"> <div class="footer-logo-wrapper"> <a class="logo" href="/" title="Home"> <img class="svg-img" src="https://derivative.ca/sites/all/themes/derivative2017/logo.svg" onerror="this.src='https://derivative.ca/sites/all/themes/derivative2017/logo.png'" alt="Home"/> </a> </div> </div> </div> </div> </div> </footer> <script type="text/javascript" src="/sites/default/files/advagg_js/js__QERVh_Fzf6p9iHQYCmUr1O2jFHk11e-Q95akflX9HwI__JSeQmfvtfZjPwtnI4bIh5Z2ePRm2PQCEu653byvDXfU__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- da2a.targets=[ {title:" Fusing Analog and Digital: Jay Borgwardt\u2019s Vinyl Music Station with TouchDesigner",url:"https:\/\/derivative.ca\/community-post\/fusing-analog-and-digital-jay-borgwardt%E2%80%99s-vinyl-music-station-touchdesigner\/70165"}, {title:" Fusing Analog and Digital: Jay Borgwardt\u2019s Vinyl Music Station with TouchDesigner",url:"https:\/\/derivative.ca\/community-post\/fusing-analog-and-digital-jay-borgwardt%E2%80%99s-vinyl-music-station-touchdesigner\/70165"}]; da2a.html_done=true;if(da2a.script_ready&&!da2a.done)da2a.init();da2a.script_load(); //--><!]]> </script> <script type="text/javascript" src="/sites/default/files/advagg_js/js__i11V-7AETPhfL9YzRpXBpECwVkYyQ_ahu2eHxES_mK0__S79mhsO6q7fWONLNt9XSEZx-JmiQeAEtuPkuVxIEjpY__Lq6xSYrdtGJGTkqRw2ugiqMeUzjfEloNPq0-jO3cQ60.js"></script> <script type="text/javascript">window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","licenseKey":"09021bd6f0","applicationID":"119330051","transactionName":"ZlBRbBZWXkUCAk0LXV8aclsQXl9YTA9WBlduRVJfAWhGXwYW","queueTime":0,"applicationTime":493,"atts":"ShdSGl5MTUs=","errorBeacon":"bam.nr-data.net","agent":""}</script></body> </html>