Coding/Software

Coefficient Product Analyser

The Coefficient Product Analyser is a comprehensive system for the spectral analysis and classification of pitch-class sets using discrete Fourier transform (DFT) techniques. The tool computes the DFT of binary pitch-class vectors over ℤ₁₂ and employs the complex product of selected coefficients (specifically a2⋅a3⋅a7​) as a principal spectral invariant for classification.

The application is implemented in Python using tkinter for the graphical interface and matplotlib for visualization. Each set is analyzed for inversional symmetry, intervallic structure, and spectral energy distribution.

The classifier categorizes sets into harmonic archetypes based on the geometry of the coefficient product in the complex plane. These categories—Diatonic (Coherent), Aligned, Minor-like (Anti-Diatonic), and Major-like (Anti-Diatonic)—are defined by the real and imaginary parts of the triple product. Additionally, the tool maps sets heuristically to Takemitsu-inspired categories (Dream, Water, Garden, Celestial, Bell, Mist) using magnitude thresholds, phase relationships, and inversional properties.

Kuramoto Oscillator Network Synth

This software implements a customizable simulation of the Kuramoto model of coupled phase oscillators, with extended support for sonic rendering, spatial audio synthesis, and generative audiovisual animation. The simulation operates on N oscillators over a time span T, integrating the system of differential equations.

Each of the 𝑁 oscillators is defined by a natural frequency ωᵢ and a time-varying phase θᵢ (t), governed by the differential equation:

​dθᵢ/dt = ωᵢ + (K(t)/N) * Σⱼ Kᵢⱼ * sin(θⱼ – θᵢ)

Each oscillator iii is defined by a natural frequency ωi​ and a time-varying phase θi(t). Frequencies ωi​ are sampled from uniform, Gaussian, or log-normal distributions. The interaction topology is defined by the coupling matrix Aij​, which may be global (all-to-all), local (nearest neighbors), or randomly generated. Coupling strength K(t) is either sinusoidally modulated or defined by user-specified piecewise functions.

To quantify phase coherence, the simulation computes the Kuramoto order parameter:
R(t) = |(1/N) * Σⱼ exp(i * θⱼ(t))|

The system supports both static frequency distributions and dynamic reassignment via “multi-distribution” regimes, where oscillator subsets switch among predefined statistical profiles during simulation. All parameters—including oscillator count, duration, coupling strength, modulation rate, and frequency bounds—are configurable through an interactive input interface.

Phase trajectories are integrated using scipy.integrate.odeint. The resulting dynamics are rendered as stereo audio by mapping oscillator phases to waveform generators, with optional rhythmic gating, envelope shaping, and stereo spatialization. Visualization includes phase trajectories, spectral plots, and animated videos of oscillator synchronization behavior, with options for unified or individual radial displays.

Pulse 回路 – Life Computer Simulation- Python

I attempted to recreate the simulation featured in Kiyoshi Kurosawa’s Pulse (回路, 2001).

In this simulation, each point drifts through a three-dimensional void, leaving behind a fading trail. The mechanics are simple: the farther apart the points are, the more they attract one another through a faint gravitational pull. Yet when two come too close, one disappears. There is no collision, no explosion — only absence. Over time, fewer points remain. The simulation becomes quieter. The space doesn’t collapse; it simply empties.

This behavior closely mirrors Schopenhauer’s hedgehog’s dilemma. In his parable, hedgehogs seek closeness to share warmth on a cold night, but their spines injure one another when they draw near. They are forced into a tragic compromise — the desire for intimacy tempered by the pain of proximity. In the same way, the dots in this simulation are drawn toward others, only to vanish upon contact.

In practice, the simulation proved more challenging than expected. Dots sometimes dragged one another off-screen, as if fleeing the frame entirely, or froze in equilibrium. These behaviors, unintended as they were, certainly warrant their own interpretation in the context of the hedgehog’s dilemma.