Marcus Anderson

Research notes, papers, software, and archived music work.

New Try my probabilistic music studio — free to sign up — at thesoundinator.com

Research

Software

Soundinator — a probabilistic, physically-modelled music studio and research instrument

A full browser-based music studio, designed and built end-to-end. It generates music from weighted probability distributions across several musical timescales, renders it through a physical-modelling synthesis engine, and arranges it on a multitrack producer timeline — while doubling as a reproducible instrument for researching why music sounds good.

Soundinator is live at thesoundinator.com — open sign-up, no invite code needed. The home page plays its patches straight away; open the studio to shape them. Found a problem? There's a “Report a problem” button in the account menu — every report helps.

Soundinator's Play page: a loaded patch, Rast Morning, drawn as a ring of notes beside six broad controls — Pace, Leaps, Pitch, Groove, Surprise and Space.
Soundinator's Melody face: a register strip, recent notes on a roll, and up / repeat / down probabilities for the next note.
The Melody face — what was just played, what comes next, and the odds of stepping up, down or repeating, all on one instrument face.
Soundinator's Harmony face: a four-chord loop with arrival and home chords, and sliders for chord count, fullness, progression focus and root motion.
Harmony — a chord progression plan with adherence; chords are scored from the instrument's own overtones, so the same loop fits differently on different instruments.
Soundinator's two-circle sequencer: a 16-beat sequence ring beside an 8-beat percussion loop.
Sequence and Percussion — a two-circle pattern sequencer: the phrase on one ring, the drum loop on the other.
Soundinator's Scale and Root page: a tuning wheel with home set to C4, beside a factory scale library.
Scale & Root — the tuning wheel beside a scale library of world scales and historical tunings, each with where and when it comes from.
Soundinator's sound designer: excitor, resonator, body, effects and space stages above the excitor controls and a partial field.
The sound designer — every note is built from an excitor → resonator → body → effects → space chain; here the excitor drives a field of individual partials.
Soundinator's space view: a polar map around the listener with a source placed at 3.2 metres and minus 15 degrees.
Space — each part stands at a distance and angle in one shared binaural room, with time of flight and level at the ears shown beneath.
Soundinator's producer: a preset library beside a multitrack timeline with harmonic guide, chord guide and global space lanes.
The producer — arrange seed-reproducible takes on a multitrack timeline, with a global scale and global space that evolve through the piece.

Vanilla JavaScript + Web Audio in the browser, backed by a Python (NumPy / SciPy) engine for reproducible offline rendering. · Source and full write-up on GitHub →

Biologically Inspired Graph Networks — a self-teaching notebook course on network topology, from graph theory to developmental pruning

An eight-notebook course that starts from graph-theory basics and builds towards the pruning-based network construction behind my sparse-network papers. It's written as a way into thinking about neural networks the way biology does: not wired from scratch, but grown dense and then pruned back. Every notebook motivates its maths with the brain — neurons as nodes, synapses as weighted edges — and ends in runnable code you can re-generate, change, and measure.

Four network-generation methods drawn side by side — Erdős-Rényi, Watts-Strogatz, Barabási-Albert, and a spatial inverse-square model — each labelled with its clustering coefficient.

The through-line is one question: what makes a network look like a brain? The course answers it by measuring candidate networks against biological criteria, then showing that pruning a dense weighted graph reproduces those criteria more faithfully than the standard random models.

Three small labelled graphs — undirected, directed, and weighted — side by side.
The vocabulary the course starts from — undirected, directed and weighted graphs — introduced through their neural counterparts: synapses that point one way, and connections that vary in strength.
The same four-node graph shown four times, each highlighting one node and its clustering coefficient, from 1.00 down to 0.00.
Clustering coefficient, one node at a time — the fraction of a node's neighbours that are also connected to each other. It's the first quantitative handle on whether a network has brain-like local structure.
Left: a dense hairball of 1,770 edges. Right: the same nodes reduced to a sparse, clearly structured 177-edge network after keeping only the strongest connections.
The pruning philosophy in one picture — a dense 1,770-edge graph reduced to 177 edges by keeping only the strongest connections. The brain builds sparse networks the same way: start dense, then prune. This is the process the papers build on.

Python notebooks (NetworkX / NumPy / Matplotlib / scikit-learn), runnable in Jupyter or Colab. · Notebooks and full course on GitHub →

Archive