You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The system includes a geometric Key Estimation module that analyzes the active surface topology in real-time. This feature visualizes the "Harmonic Wake"—the trajectory of the lattice as it moves through the Circle of Fourths.
NOTE: Topological Bias (Western Tonality)
While the Umbilic Torus lattice is structurally neutral, this specific estimation module applies a "Common Practice" filter. It detects Keys by identifying Topological Axes defined by the Dominant (t-1) and Torque (t+2) surfaces.
Supported: Standard Western Harmony (Bach to Jazz Standards).
Experimental: Symmetric scales (Whole-Tone, Diminished) or Quartal harmony may result in None or split readings (e.g., Dm F#m), as they do not form the specific topological container this tool is tuned to detect.
Control
Action
Description
k
Toggle Harmonic Wake
Switches the multi-line analysis display on/off.
Visualization Logic
The Chimney: The display uses a bottom-up stack.
Active (Bottom): The current geometric truth.
History (Rising): Previous states float upward and fade out, representing the "Wake" of the harmonic movement.
Mode-Agnostic Detection:
The system identifies the Diatonic Neighborhood (Parent Scale) rather than enforcing a strict Tonic anchor.
Example: A D Dorian progression (Dm <-> G) will be identified as C | Am, as it geometrically resides within the C-Major axis boundaries.
Ghostbuster Veto: To prevent false positives, the system rejects Major Keys if the Parallel Minor 3rd is present without the Major 3rd (e.g., Am will never trigger "A Major").
Harmonic Resolution:
Dynamic Minor Force: The system forces the Minor label (Am) when the Harmonic Tension (t+8) resolves (moves from History to Inactive).
The Diminished Exception: A standalone Dominant (E7) forces Minor, while a Diminished 7th (B°7) allows ambiguity (C | Am) because it contains the Subdominant note (t+1), creating a Plagal geometric opening.
Status Indicators
The system provides real-time feedback on the harmonic stability of the topology using color codes:
Key: C | Am (Valid):
Meaning: A stable, valid topological axis is established.
Behavior: The system displays the Key (or Relative Pair).
Key: None (Geometric Conflict):
Meaning: The current notes contradict the laws of the active Axis.
Causes:
The Veto: Playing a "Wall" note (e.g., Lydian #4 or Mixolydian b7) against a Major triad.
Geometric Saturation: The input activates contradictory vetoes across all potential axes (e.g., Whole-Tone Scale or Chromatic Clusters).
Result: The system refuses to guess and reports the contradiction.
Key: (Silence / Collapse):
Meaning: Harmonic energy has dissipated (No notes > 2.0s).
Result: The Chimney is force-cleared. The next chord is treated as a new harmonic anchor, free from previous context.
Playlist Automation (Auto-Advance)
The system features an automated playlist manager that monitors harmonic activity.
Timeout: If no notes are detected for a specific duration, the system automatically advances to the next song.
Configuration: The duration is controlled by constants.auto_advance_timeout (default: 5.0 seconds).
Logic: Automation is active during normal playback but is automatically disabled when the user enters Teacher Mode (Shift + Return), allowing for uninterrupted manual demonstrations.
FluidSynth Backend Architecture
To ensure stability and clean state management, the FluidSynth backend uses a Process-per-Song iteration model:
Each MIDI file is played by a fresh FluidSynth instance.
The system performs a TCP bind-test before launching a new process to ensure the communication port is fully released by the OS.
This architecture prevents "stuck notes" and memory leaks across long-running playlists.
Visualizer States
Power-Saving Pause (Freeze Mode)
Pressing p toggles a high-efficiency state:
Visuals: The 3D engine captures the current frame and stops all rendering calls, significantly reducing GPU/CPU load.
Audio: The MIDI sequencer is paused.
Synchronization: Changing the song via Tab or Return automatically exits Freeze mode to ensure visuals and audio remain synchronized.