{"id":5960,"date":"2025-12-24T08:36:48","date_gmt":"2025-12-24T08:36:48","guid":{"rendered":"https:\/\/antonyhall.net\/blog\/?p=5960"},"modified":"2026-01-07T08:02:42","modified_gmt":"2026-01-07T08:02:42","slug":"nodal-vector-synth-a-false-memory","status":"publish","type":"post","link":"https:\/\/antonyhall.net\/blog\/nodal-vector-synth-a-false-memory\/","title":{"rendered":"Nodal-vector synth (A false Memory)"},"content":{"rendered":"\n<p><span data-preserver-spaces=\"true\">This nodal synth project is based on a false memory. I was discussing false memories with friends last night and reflecting on some of my own. I woke up the next day still thinking about this. I often think about something that my friend Ben had shown me years ago, <\/span><span data-preserver-spaces=\"true\">I have this strong memory of connected objects like a circuit diagram or a mechanical network, and of it running like a program and making sound, and I have a distinct image of it which I am pleased to say I have recreated here, sadly its not sounding as good as i hoped but i am still working on it. At the time Ben was studying music and physics, maybe 1998ish. I had no idea what coding was at the time, but I understood mechanical systems and circuits. I loved feedback and pendulum-based oscillation, etc. <\/span><span data-preserver-spaces=\"true\">So, it<\/span><span data-preserver-spaces=\"true\"> made sense to me to see this diagram, or what ever it was like that: as objects with functions, masses, frequencies, directions, and<\/span> <span data-preserver-spaces=\"true\">the exchange of energy within a system.<\/span><span data-preserver-spaces=\"true\"> Sound.\u00a0\u00a0<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">Many years later, I got the opportunity to learn about coding (2005ish) and these nodal modular programming systems (MAX\/MSP and PureData), which made more sense to me than text-based code, and I ended up using PD and a go-to tool in my later practice. <\/span><span data-preserver-spaces=\"true\">But i often think about this non-existent software, of which I have retained a seemingly vivid image for so many years. I woke up and went to P5.JS and AI to help me get started on making this software a reality. I chose not to research similar software, and I am sure there is some. I wanted to explore making my own memory a reality.<br \/><\/span><\/p>\n<p><span data-preserver-spaces=\"true\">I described the instrument and the functionality I needed for the UI, and we quickly had a good prototype that looked almost exactly like the image in my head. With a few iterations, the graphical UI and its behaviours are nearly perfect (in terms of what I remember), the actual function of the objects and the resulting sound are the missing parts of my false memory which it was been interesting to explore. Here is the patch &#8211; you can use it here, upload sounds, See instructions on screen. \u00a0Sound is not working here so try this link if you like&#8230; and see the code here: <a href=\"https:\/\/editor.p5js.org\/tonythevortex\/full\/sIgNPvhgn\">https:\/\/editor.p5js.org\/tonythevortex\/full\/sIgNPvhgn<\/a><\/span><\/p>\n<p><iframe loading=\"lazy\" class=\"embed\" src=\"https:\/\/editor.p5js.org\/tonythevortex\/full\/Y0DLBohbC\" width=\"900\" height=\"800\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>\u00a0<\/p>\n<p><span data-preserver-spaces=\"true\">So <\/span><span data-preserver-spaces=\"true\">I&#8217;m<\/span><span data-preserver-spaces=\"true\"> assuming or imagining that such a UI could be one of several instruments: a simple, reductive or additive synth, or something stranger, such as a granular synth. I went with Graunlar first (the one I was most excited about and least understood). Also, the granular-style synth would let me play around with uploading field recordings.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">On this path, the nodes move according to a range of preset behaviours and can be programmed to generate sounds affected by their XY position and weight (mass, represented by size) (Z?)*.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">When nodes are connected, they <\/span><span data-preserver-spaces=\"true\">have<\/span><span data-preserver-spaces=\"true\"> a pendulum-like quality <\/span><span data-preserver-spaces=\"true\">in relation<\/span><span data-preserver-spaces=\"true\"> to <\/span><span data-preserver-spaces=\"true\">each other<\/span><span data-preserver-spaces=\"true\">, floating in an idealised space.<\/span><span data-preserver-spaces=\"true\">Vectors join to nodes and exhibit elasticity, creating oscillator effects in relation to other nodes. <\/span><span data-preserver-spaces=\"true\">To give it a circuit-like effect, <\/span><span data-preserver-spaces=\"true\">functions can be applied<\/span><span data-preserver-spaces=\"true\"> to vectors <\/span><span data-preserver-spaces=\"true\">in-line<\/span><span data-preserver-spaces=\"true\">, resistors<\/span><span data-preserver-spaces=\"true\">, <\/span><span data-preserver-spaces=\"true\">and resonators (springs), but I need to update this <\/span><span data-preserver-spaces=\"true\">so<\/span> <span data-preserver-spaces=\"true\">it&#8217;s<\/span><span data-preserver-spaces=\"true\"> clear sonically how the<\/span><span data-preserver-spaces=\"true\"> \u2018<\/span><span data-preserver-spaces=\"true\">signal<\/span><span data-preserver-spaces=\"true\">\u2019 <\/span><span data-preserver-spaces=\"true\">is transmitted along the vector and affects other nodes.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">The problem is <\/span><span data-preserver-spaces=\"true\">that<\/span> <span data-preserver-spaces=\"true\">each node generates sound. These could have a more summative\/reductive effect on the signal, and other nodes could <\/span><span data-preserver-spaces=\"true\">be chosen<\/span><span data-preserver-spaces=\"true\"> as outputs (DACs). But then this could end up looking more like <\/span><span data-preserver-spaces=\"true\">a version of<\/span><span data-preserver-spaces=\"true\"> PureData.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">(A note to say i recently confirled it must have been MAX MSP he showed me &#8211; but my memory was more like the synth i have created here)<\/span><\/p>\n<p><strong>What&#8217;s next for the nodal synth? From Granular to crystalline? <\/strong><\/p>\n<p><span data-preserver-spaces=\"true\">While I am happy with the UI in terms of look and functionality, the Granular synth is fun to use, but it needs to be more responsive and dynamic sonically. I need to add functions to adjust grain size and speed, retain this similar sound, and some of my <\/span><span data-preserver-spaces=\"true\">functions<\/span><span data-preserver-spaces=\"true\"> make only the most subtle change. <\/span><\/p>\n<p><span data-preserver-spaces=\"true\">Whilethis<\/span><span data-preserver-spaces=\"true\"> patch, <\/span><span data-preserver-spaces=\"true\">while<\/span><span data-preserver-spaces=\"true\"> based on my false memory, relates to my other experiments with floating particles inspired by pond life.<\/span> <span data-preserver-spaces=\"true\">And a dream <\/span><span data-preserver-spaces=\"true\">which<\/span><span data-preserver-spaces=\"true\"> led <\/span><span data-preserver-spaces=\"true\">to<\/span><span data-preserver-spaces=\"true\"> me <\/span><span data-preserver-spaces=\"true\">working<\/span><span data-preserver-spaces=\"true\"> with Dures Sold as a <\/span><span data-preserver-spaces=\"true\">basisi<\/span><span data-preserver-spaces=\"true\"> for a musical <\/span><span data-preserver-spaces=\"true\">instument<\/span><span data-preserver-spaces=\"true\">.<\/span><span data-preserver-spaces=\"true\"> It will be interesting to change this patch to a more drone-based generator where the nodes affect microtones.<\/span><\/p>\n<p><span data-preserver-spaces=\"true\">*I like the way <\/span><span data-preserver-spaces=\"true\">that that this<\/span><span data-preserver-spaces=\"true\"> XYZ potentially gives a spatial positioning, meaning that the points and vectors collectively represent a 3-dimensional crystalline form. Adding a fix-all points (crystalisation mode) where buy nodes retain a fixed position in space. I used AI to render that image into reality.<\/span><\/p>\n<p><strong>Note: The above text was written by me (i hope that clear!)\u00a0while this instrument (the code) was developed with the assistance of AI, and a lot of iterative prototyping and playtesting. I specified the interaction design and aesthetic goals, used AI to generate and refine p5.js\/Web Audio code, then tested and directed changes and tweaked the code.<br \/><\/strong><\/p>\n<p style=\"font-weight: 400;\"><strong>The following text is an AI Generated summary of the conversation and code developed:<\/strong><\/p>\n<p style=\"font-weight: 400;\">Core concept A physics-driven node graph where: Dots = sound bodies (each dot is a sound source + clock) Lines = signal relationships (audio routing and modulation) Actors on lines = processing modules (delay \/ drive \/ spring comb \/ filter) Everything floats in pseudo-3D, so distances and motion continuously reshape timing + timbre.<\/p>\n<blockquote>\n<p style=\"font-weight: 400;\"><strong>Core concept:<br \/><\/strong>&#8220;A physics-driven node graph where: Dots = sound bodies (each dot is a sound source + clock) Lines = signal relationships (audio routing and modulation) Actors on lines = processing modules (delay \/ drive \/ spring comb \/ filter) Everything floats in pseudo-3D, so distances and motion continuously reshape timing + timbre.&#8221;<\/p>\n<p style=\"font-weight: 400;\"><strong>Development:\u00a0<\/strong><\/p>\n<p style=\"font-weight: 400;\"><strong>Concept seed:\u00a0<\/strong>\u201cA musical instrument for granular synthesis with a minimal vector-line UI: dots as sounds, lines as connections, circuit-like modules on wires, floating physics changing relationships.\u201d<\/p>\n<p style=\"font-weight: 400;\"><strong>First prototype goal:<\/strong>\u00a0\u201cp5.js + Web Audio sketch with draggable nodes, connectable lines, basic granular playback from a buffer, and inline line actors (delay\/filter\/drive).\u201d<\/p>\n<p style=\"font-weight: 400;\"><strong>Feature expansion:\u00a0<\/strong>\u201cPer-node labels and data readouts; assign different samples to different nodes; add clearer circuit symbols for line modules.\u201d<\/p>\n<p style=\"font-weight: 400;\"><strong>Interaction fixes:<\/strong>\u00a0\u201cFix delete\/backspace behavior; improve selection and editing reliability; add slow mode for editing.\u201d<\/p>\n<p style=\"font-weight: 400;\"><strong>Physics controls:<\/strong>\u00a0\u201cMass\/size coupling (big dot moves slower); pin nodes in space; increase repulsion in slow mode so nodes spread out.\u201d<\/p>\n<p style=\"font-weight: 400;\"><strong>Clarity + sound upgrades:<\/strong>\u00a0\u201cExplain granular synthesis; make actors more legible with parameter readouts and editable \u2018amount\u2019; reduce runaway feedback.\u201d<\/p>\n<p style=\"font-weight: 400;\"><strong>Musical direction:<\/strong>\u00a0\u201cDirectional signal flow along connectors with arrows; add per-node clock + step sequencer editor for polyrhythms; add minimal glitch tick engine and node pulse visuals.\u201d<\/p>\n<\/blockquote>\n<pre>\u00a0<\/pre>\n\n\n","protected":false},"excerpt":{"rendered":"<p>This nodal synth project is based on a false memory. I was discussing false memories with friends last night and reflecting on some of my own. I woke up the next day still thinking about this. I often think about something that my friend Ben had shown me years ago, I have this strong memory&#8230;<\/p>\n","protected":false},"author":1,"featured_media":5962,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[32,328,279],"tags":[337,275,341,83],"_links":{"self":[{"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/posts\/5960"}],"collection":[{"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/comments?post=5960"}],"version-history":[{"count":9,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/posts\/5960\/revisions"}],"predecessor-version":[{"id":5996,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/posts\/5960\/revisions\/5996"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/media\/5962"}],"wp:attachment":[{"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/media?parent=5960"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/categories?post=5960"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/antonyhall.net\/blog\/wp-json\/wp\/v2\/tags?post=5960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}