![]() |
| 6-sided spiral harp, concept art |
These systems are aperiodic (with exceptions) and possess an infinite range of possibilities. Among these configurations defined by their sides and segments, many prove musically practical, with potential for some to manifest as tangible instruments, such as spiral harps. (An instrument with a single wound string where pitch is linked solely to string length, and tension becomes relative.)
Each unique configuration unveils distinct chords and progressions, often showcasing geometric patterns.
This audio clip features a short melody played on a digitally modeled harp-like instrument tuned according to a six-sided spiral polygonal chain (as depicted in the concept art). The final, highest note corresponds to the shortest 'string' of the spiral.
S6m1 - "S" for spiral, followed by the number of sides, "m" for margin; if its value is 1, it can be omitted (e.g., S6m1 = S6). [This tuning is of main interest.]
S5.5 - Five-and-a-half-sided spiral with margin 1 (omitted).
S1m1.05946 - One-sided spiral with a margin of the twelfth root of 2.
S7r2c1 - Seven-sided spiral with a margin of 1 (omitted), with an initial radius of 2, and constant increment c = 1. When omitted, spirals initial radius is 0, c = 1.
iS6m1 - Inverted six-sided spiral with a margin of 1.
The parameters affecting the resulting relative segment length progression are:
Amount of sides: from 0 to infinity.
Margin: usually 1 (to mimic spider-webs). This property can be (unnecessarily) employed to generate equal-division systems. For example, the angle is calculated with \( \frac {2\pi}{sides}\), so when sides are \(1\), \( \frac{1}{2}\), or \( \frac{1}{4}\), etc., it leaves the margin as the sole control for segment length increase. For instance, a one-sided spiral with a radius of approximately \( 1.05946 = \sqrt[12]{2} \) generates a 12 equal division system. From this perspective, equal-division systems can be seen as a subset of spirals.
Initial radius: usually 0 Using a different initial radius opens another dimension of progression; however, it seems to mostly affect the initial segments, and the rest of the spiral converges quickly with its version with radius 0.
Inversion: This parameter doesn't affect the progression but rather how the progression is treated, as string length or as frequency.
![]() |
| Spiral polygonal chains with different margins, |
![]() |
| Spiral polygonal chains with different sides. |
Construction:
Since, in most cases, they are aperiodic, the system sizes are infinite, it will depend on how many notes one wants to calculate.
Most spiral settings cover the audible range with less than 300 segments.
For instance, a six-sided spiral harp with margin 1, comprised of 120 segments spans approximately five octaves.
The spiral can be of any size, a diameter, or scale property, while changing the length of the segments, won't alter their relative length.(if started at 0,0)
We assign a frequency to the first segment, e.g. 8000hz, and the rest of the notes are calculated from it.
Algorithms for Segment Length Generation:
1- Euclidean distance between consecutive points on a spiral:
Given:
Radius: \(r= (z \times m)\times (m^n)\) where \(z\) is the constant size increment, \(m\) is margin and \(n\) is the point's index, starting at \(0\).
Angle \(a = \frac{2\pi}{s}\) where \(s\) is the amount of sides of the spiral
The x-coordinate and y-coordinate of a point on the spiral are calculated using:
\(x = r \times \cos(a)\)
\(y = r \times \sin(a)\)
The distance between two consecutive points on a spiral in Cartesian coordinates \((x_1,y_1)\) and \((x_2,y_2)\) is calculated using the Euclidean distance formula:
\(d = \sqrt{(x_2-x_1)^2 + (y_2-y_1)^2} \)
2- Direct Polar Calculation: Instead of converting to Cartesian coordinates, we can calculate the distance directly in polar coordinates. Let \(r_n\) and \(r_{n+1}\) be the radii of two consecutive points, and \(a\) be the constant angle between them. The distance \(d\) can be calculated using the law of cosines:
\(d = \sqrt{r_n^2 + r_{n+1}^2 - 2r_n r_{n+1}\cos(a)}\)
Since \(r_n = (z \times m) \times m^n\) and \(r_{n+1} = (z \times m) \times m^{n+1}\), we can simplify this to:
\(d = (z \times m) \times m^n \sqrt{1 + m^2 - 2m\cos(a)}\)
An open-source, virtual playable version is accessible link.
The new version is available as a interface in MIND.
The concept art is a 3d model post processed with AI.
mathematical over-extensions:
The geometry of a spirangle (a polygonal Archimedean spiral) generates a discrete sequence of segment lengths $L_n$, a self-similar, non-logarithmic progression
Free Generated Set / Sequence: the "spiral harp" is an indexed geometric sequence in a metric space, or a point set generated by a 1D discrete dynamical system.
Convergence to Arithmetic Progression:
For $m=1$, the radius grows linearly: $r_n = z \cdot n$. with the polar distance equation, the $n$-th segment length simplifies:
$$L_n = z \sqrt{n^2 + (n+1)^2 - 2n(n+1)\cos(a)}$$
so as $n \to \infty$, the ratio $L_n / n$ converges to a constant dependent on $a = \frac{2\pi}{s}$:
$$\lim_{n\to\infty} \frac{L_n}{n} = \sqrt{2(1 - \cos a)} = 2 \sin\left(\frac{\pi}{s}\right)$$
this means that far from the origin, $L_n \approx 2z \sin(\pi/s) \cdot n$. The string lengths form an approximate arithmetic sequence, which implies the frequencies $f_n \propto \frac{1}{n}$ form an overtone series (harmonic series) as $n \to \infty$.
the segment sequence $L_n(s, m, z)$.
the standard case ($m = 1$, constant step $z$):
$$L_n = z \sqrt{2n^2 + 2n + 1 - 2n(n+1)\cos\left(\frac{2\pi}{s}\right)}$$
Or:
$$L_n = z \sqrt{4n(n+1)\sin^2\left(\frac{\pi}{s}\right) + 1}$$
This closed form highlights the geometry, when $n$ is large, $L_n \approx 2z \sin(\pi/s) \cdot (n + 1/2)$, showing the linear asymptotic growth and the pitch interval (in millioctaves) between adjacent notes $n$ and $n+1$ is:
$$\Delta I_n = \log_2\left(\frac{L_{n+1}}{L_n}\right)$$
Because $L_n$ grows linearly, $\Delta I_n \to 0$ as $n \to \infty$, meaning the pitch intervals become progressively smaller, microtonal density increases with string length.
the microtonal asymmetry of the sequence and physical playability
the chord finder: by scanning the sequence via $\log_2(L_n) \pmod 1$ within a cent tolerance window $\epsilon$, we construct a geometric chord lookup table (see later)
geometric patterns emergence (log-spiral intersections)
When the auto-chord-finder highlights major/minor triads or scales, the visual patterns on the physical 2D spirangle aren't random they form secondary geometric curves.
Because the strings lie on a 2D spiral and pitch is proportional to radius/length, looking for a specific interval ratio $r = f_2 / f_1$ translates to finding pairs of indices $(n, k)$ such that $\frac{L_k}{L_n} \approx r$
On the polygonal chain:
Octaves ($r \approx 2$): String indices that yield octaves scale quadratically or near-exponentially in index distance, forming expanding logarithmic spirals across the frame.
Fifths ($r \approx 1.5$), Major Thirds ($r \approx 1.25$): these form family curves (similar to the phyllotaxis spirals seen in sunflower seed heads or pinecones)
Connecting all nodes that contain a valid Major triad on the 2D layout yields a lattice of intersecting Archimedean rays.
---
Brute-Force Chord Finder
search algorithm for the app documentation,
Tolerance Interval Match Function:
Let $P_n = \log_2(L_n) \pmod 1$ be the pitch class (in octave fractions, $P_n \in [0, 1)$).
A set of indices $\{n_1, n_2, \dots, n_k\}$ forms a target chord $C = \{c_1, c_2, \dots, c_k\}$ (where $c_i$ are target pitch classes in cents $/ 1200$) under tolerance $\epsilon$ if there exists a root offset $R$ such that:
$$\min_{m \in \mathbb{Z}} \left\vert{} (P_{n_i} - R) - c_i - m \right\vert{} < \frac{\epsilon}{1200} \quad \forall i \in \{1, \dots, k\}$$
because $P_n$ is monotonic-ish with decaying increments, it dosn't even need full $O(N^k)$ brute-force scans across all strings: Calculate $P_n = \log_2(L_n) \pmod 1$ once. $L_n$ grows predictably. binary search or two-pointer bounds to find all intervals within $\epsilon$ in $O(N \log N)$ time.
In microtonal theory and mathematical musicology, pitch space is typically mapped to either frequency space $\mathbb{R}^+$ (measured in Hz), string length space $\mathbb{R}^+$, or logarithmic pitch-class space $\mathbb{T} = \mathbb{R}/\mathbb{Z} \cong [0, 1)$ (measured in cents or octave fractions).
1. The Fundamental Length Set $\mathcal{L}$
The core geometric object is the ordered infinite set (or sequence) of discrete segment lengths $\mathcal{L}(s, m, z)$.
For the standard Archimedean case ($m = 1$, increment $z$, and $s$ sides):
$$\mathcal{L}(s, m, z) = \left\{ L_n \in \mathbb{R}^+ \;\middle\vert{}\; L_n = (z \cdot m) m^n \sqrt{1 + m^2 - 2m\cos\left(\frac{2\pi}{s}\right)}, \, n \in \mathbb{N}_0 \right\}$$
When $m = 1$, this simplifies to:
$$\mathcal{L}(s, z) = \left\{ z \sqrt{4n(n+1)\sin^2\left(\frac{\pi}{s}\right) + 1} \;\middle\vert{}\; n \in \mathbb{N}_0 \right\}$$
2. The Frequency Spectrum Set $\mathcal{F}$
To convert lengths to physical pitch, we define a mapping function $f: \mathbb{R}^+ \to \mathbb{R}^+$. Given a fundamental base frequency $f_0$ anchored to the shortest segment $L_0$, the pitch spectrum $\mathcal{F}$ is:
$$\mathcal{F}(s, z, f_0) = \left\{ f_n \in \mathbb{R}^+ \;\middle\vert{}\; f_n = f_0 \cdot \frac{L_0}{L_n}, \, L_n \in \mathcal{L}(s, z), \, n \in \mathbb{N}_0 \right\}$$
(If using the frequency inversion parameter $iS$, $f_n = f_0 \cdot \frac{L_n}{L_0}$ instead).
3. The Pitch-Class Set $\mathcal{P}$ on the Octave Torus $\mathbb{T}$
To analyze octave-equivalent pitch structures (chroma), we map frequencies or lengths into the unit interval $[0, 1) \cong \mathbb{R}/\mathbb{Z}$ using base-2 logarithms(the app uses mostly harmonic timbres, so chroma is effectively octave based, except for the spiral timbre which is far more complex to analyze meaningfully):
$$\mathcal{P}(s, z) = \left\{ p_n \in [0, 1) \;\middle\vert{}\; p_n = \log_2\left(\frac{L_n}{L_0}\right) \pmod 1, \, n \in \mathbb{N}_0 \right\}$$
In mocts, this set is simply $1000 \cdot \mathcal{P}$.
4. The Interval Set (Dyadic Structure) $\mathcal{I}$
the Interval Set represents all available intervals (ratios) formed between any two strings $i$ and $j$ in the system:
$$\mathcal{I}(s, z) = \left\{ r_{i,j} \in \mathbb{R}^+ \;\middle\vert{}\; r_{i,j} = \frac{L_j}{L_i}, \, (i, j) \in \mathbb{N}_0^2 \right\}$$
On the octave torus, the set of pitch-class intervals $\Delta \mathcal{P}$ is the non-transitive difference set:
$$\Delta \mathcal{P}(s, z) = \left\{ \delta_{i,j} \in [0, 1) \;\middle\vert{}\; \delta_{i,j} = \vert{}p_j - p_i\vert{} \pmod 1, \, p_i, p_j \in \mathcal{P} \right\}$$
5. The Interval Density Function
(the "matrix accumulation"), take $\mathcal{P}$ as a discrete point measure $\mu_N$ on the circle $\mathbb{S}^1$ as $N \to \infty$:
$$\mu_N = \frac{1}{N} \sum_{n=0}^{N-1} \delta_{p_n}$$
where $\delta_{p_n}$ is the Dirac delta measure centered at pitch class $p_n$.
the IDF $\rho(\theta)$ on the interval $\theta \in [0, 1200)$ cents is the pushforward limit density of pairwise differences:
$$\rho(\theta) = \lim_{N \to \infty} \frac{1}{N^2} \sum_{i=0}^{N-1} \sum_{j=0}^{N-1} \mathbf{1}_{\{[\Delta p_{i,j} - \theta\vert{} < \epsilon\}}$$
Because $L_n \approx c \cdot n$, the sequence of pitch classes $p_n \sim \log_2(n) \pmod 1$ is non-uniformly distributed over the torus, meaning $\rho(\theta)$ yields a smooth, continuous density function with distinct peaks rather than a flat uniform distribution! (see s6 matrix!)





No comments:
Post a Comment