No description
  • JavaScript 62.3%
  • C# 31.8%
  • PowerShell 3.9%
  • HTML 2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Aqua 908e8dcb3b web: band-split dB-flux onset detector, synthetic drum bench
Replaces the log1p-compressed whole-spectrum flux with four-band flux in dB,
a two-frame max-filtered reference, a per-band median+8 MAD threshold with a
per-band minimum rise, and one refractory period. Level-independent.

tools/onset-bench.mjs synthesises kick/snare/hat patterns with known onset
times (3 patterns x 3 tempos x 3 levels x 3 beds = 81 signals), scores hit
rate, false positives and median timing at 30 fps and 512-sample hops.
tools/onset-legacy.mjs freezes the old detector for the before numbers.

Synthetic only. Nothing was listened to; no real music, no real GPU.
Corpus adjustments made after the first baseline run: coincident kick+snare
count as one onset; voices end in a 60 ms fade because truncation clicks read
as onsets in the near-silent gaps; hats raised relative to the snare tail.
Baseline was rerun after each change.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 12:34:14 +00:00
docs Feed Perlines from Fensalir audio stems 2026-05-31 02:35:46 +01:00
scripts Build Fensalir Perlines demo 2026-05-31 00:38:24 +01:00
src/Perlines Feed Perlines from Fensalir audio stems 2026-05-31 02:35:46 +01:00
web web: band-split dB-flux onset detector, synthetic drum bench 2026-11-06 12:34:14 +00:00
.gitignore Build Fensalir Perlines demo 2026-05-31 00:38:24 +01:00
Perlines.sln Build Fensalir Perlines demo 2026-05-31 00:38:24 +01:00
README.md README front door: point at web/ v2, state unwatched status 2026-11-05 19:05:22 +00:00

Perlines

Perlines turns music into a storm of Perlin-noise trails. Two implementations live here:

  • web/ (v2, browser): zero-install WebAudio + WebGL2 visualizer. Static folder, no build, no dependencies. File and microphone input, onset detection, key estimate that tints the scene, three scenes (aurora disk, burning water, vector trails). Entry: node web/tools/serve.mjs, then http://localhost:8080/; analysis in web/src/dsp.js; tests cd web && npm test; details in web/README.md. Status: no human has watched it run. It has synthetic-signal tests and headless-Chrome captures only; no real-GPU frame-time measurement exists yet (web/BENCH.md).
  • src/Perlines/ (Fensalir client, C#): the 2012 Aethervis trail idea as a client of the Fensalir D3D12 renderer. Described below.

The Fensalir client: Perlines is the 2012 Aethervis trail idea rebuilt as a Fensalir client: audio becomes a rolling field resource that Fensalir's renderer draws as a storm of curl-noise trails, with no private line renderer in the client.

Valuable here: the signal path. src/Perlines/PerlinesSignalProcessor.cs turns audio into FFT energy, adaptively whitens it per band, detects the key, and projects bins onto musical scale-note lanes. src/Perlines/PerlinesRuntime.cs writes one Float32 column per frame into a rolling field resource and hands it to Fensalir (Perlin4D.cs and SmoothNoise.cs supply the noise). It is a worked example of a Fensalir client that owns a signal and leaves visibility, reservoir reuse, bloom and reconstruction to the renderer.

Problem it solves: the Unity version owned trails through LineRenderer and TrailRenderer objects, so the renderer could not reason about them. Here the renderer owns the trails and Perlines owns only the signal.

Entry points: client project src/Perlines/Perlines.csproj (solution Perlines.sln); design and authority map in docs/system-map.md; launched through Fensalir's scripts/dev-reload.ps1. Requires a sibling checkout of GameCult/Fensalir (Windows, D3D12).

Status: live as a demo. Input is a Fensalir-owned Windows system-loopback stem when one is available, otherwise a procedural fallback signal. Last commit 2026-05-31.

Run

From the root of the Fensalir checkout (Perlines checked out beside it):

.\scripts\dev-reload.ps1 -ClientProject ..\Perlines\src\Perlines\Perlines.csproj

Headless smoke test, also from Fensalir:

.\scripts\dev-reload.ps1 -Headless -ClientProject ..\Perlines\src\Perlines\Perlines.csproj

scripts/run-dev.ps1 and scripts/capture-headless.ps1 in this repo wrap the same launch and a headless PNG capture, but both hardcode the Fensalir location as E:\Projects\Fensalir, which does not exist on current workstations. Edit that path before running them.

Live Model

  • Perlines owns procedural audio/FFT/whitening and field-resource uploads.
  • Fensalir owns the Win32 host, D3D12 renderer, TubeField compute/render lowering, shared reservoir, and presentation denoising.
  • The rolling spectrum is a below-native field evidence source, not a private line renderer.
  • The spline lanes are assigned to notes in the detected key instead of arbitrary spectrum bins.
  • Each rendered spline is one note lane evolving over the rolling time window.
  • A Fensalir spline presentation turns that reservoir into the old radial Perlines trail storm with a divergence-free curl-noise flow, while TubeField evidence remains available to the shared reservoir path.
  • Low-energy bands taper and fade out instead of leaving permanent bright strokes.