THE CHALLENGE
Can you explain every note?
Data sonification becomes useful when someone can explain why a value produced a particular note. Lingji makes that relationship inspectable, while allowing a browser agent to help refine the music without overwriting deliberate human choices.
ENGINEERING
One score shared by human and agent
CSV parsing, column profiling, normalization, sequence generation, and provenance live in a pure domain layer. Numeric fields use min/max normalization, categories use a stable sorted lookup, and missing values can produce rests. The same input and mapping configuration generate the same event sequence.
The studio offers Melody, Pulse, and Bass tracks. A person can map fields to pitch, velocity, rhythm, brightness, or instruments; edit individual notes; and choose a repeated 16-step pattern or a complete dataset scan. Sampled piano and marimba sit alongside oscillator-based synth voices.
React controls and WebMCP tools both dispatch into one StudioSession store. Agent mutations must include the current revision. Stale requests and pending human drafts are rejected, and only the human can unlock protected decisions. The selected-note tool exposes the exact source row and mapping provenance.
One composition, not an agent-only copy
Human edits, agent edits, playback, previews, and export use the same effective sequence and command boundary.
Protection beyond a visible lock icon
Track, mapping, and note locks prevent indirect edits through changes to timing, sound, and mix. Manual overrides remain distinct from generated provenance.
Local audio rendering
Web Audio handles live playback and offline WAV rendering. Lingji has no audio-generation API, embedded chatbot, backend, or account system.
